[
  {
    "path": ".github/workflows/desktop-client-dev.yml",
    "content": "name: Build\n\non:\n  push:\n    branches: [ main, dev ]\n    tags: [ 'v*' ]\n  pull_request:\n    branches: [ main, dev ]\n\njobs:\n  build:\n    runs-on: ${{ matrix.os }}\n\n    strategy:\n      matrix:\n        include:\n          - os: windows-latest\n            platform: win\n            artifact_name: windows-build\n            build_command: build-win\n            installer_command: build-win-installer\n            green_command: build-win-green\n          - os: macos-latest\n            platform: mac\n            artifact_name: macos-build\n            build_command: build-mac\n            installer_command: build-mac-installer\n            green_command: build-mac-green\n          - os: macos-15-intel\n            platform: mac-x64\n            artifact_name: macos-build-x64\n            build_command: build-mac-x64\n            installer_command: build-mac-x64-installer\n            green_command: build-mac-x64-green\n\n    steps:\n      - name: 准备代码\n        uses: actions/checkout@v4\n\n      - name: 设置Node.js环境\n        uses: actions/setup-node@v4\n        with:\n          node-version: '22'\n          cache: 'npm'\n          cache-dependency-path: desktop-client/package-lock.json\n\n      - name: 安装Electron依赖\n        run: npm ci\n        working-directory: ./desktop-client\n\n      - name: 安装前端依赖\n        run: npm ci\n        working-directory: ./desktop-client/web\n\n      - name: 构建前端\n        run: npm run build\n        working-directory: ./desktop-client/web\n\n      - name: 更新版本号\n        run: node scripts/update-version.js\n        working-directory: ./desktop-client\n        env:\n          GITHUB_REF: ${{ github.ref }}\n\n      - name: 根据平台打包应用程序\n        run: npm run ${{ matrix.build_command }}\n        working-directory: ./desktop-client\n\n      - name: 根据平台创建安装包\n        run: npm run ${{ matrix.installer_command }}\n        working-directory: ./desktop-client\n        env:\n          # 添加环境变量以解决macOS构建问题\n          CSC_IDENTITY_AUTO_DISCOVERY: false\n          DEBUG: electron-builder\n\n      - name: 构建绿色安装包\n        if: matrix.green_command != 'null'\n        run: npm run ${{ matrix.green_command }}\n        working-directory: ./desktop-client\n        env:\n          # 添加环境变量以解决macOS构建问题\n          CSC_IDENTITY_AUTO_DISCOVERY: false\n          DEBUG: electron-builder\n\n      - name: 列出dist目录内容\n        run: |\n          echo \"当前操作系统: ${{ runner.os }}\"\n          ls desktop-client/dist/\n        shell: bash\n\n      - name: 上传安装包构件\n        uses: actions/upload-artifact@v4\n        with:\n          name: ${{ matrix.artifact_name }}-installer\n          path: desktop-client/dist/\n          if-no-files-found: ignore\n\n      - name: 上传绿色安装包构件\n        if: matrix.green_command != 'null'\n        uses: actions/upload-artifact@v4\n        with:\n          name: ${{ matrix.artifact_name }}-green\n          path: desktop-client/dist/*.zip\n          if-no-files-found: ignore\n\n      - name: 发布版本\n        if: startsWith(github.ref, 'refs/tags/v')\n        uses: softprops/action-gh-release@v1\n        with:\n          tag_name: ${{ github.ref_name }}\n          name: Release ${{ github.ref_name }}\n          files: |\n            desktop-client/dist/capcut-mate-windows-x64-installer.exe\n            desktop-client/dist/capcut-mate-macos-arm64-installer.dmg\n            desktop-client/dist/capcut-mate-macos-x64-installer.dmg\n            desktop-client/dist/*.zip\n          overwrite: true\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}"
  },
  {
    "path": ".github/workflows/dev.yml",
    "content": "name: Docker Image CI Dev\n\non:\n  push:\n    branches: [ \"main\", \"dev\" ]\n    tags:\n      - 'v*'  # 当推送v开头的tag时触发\n  pull_request:\n    branches: [ \"main\", \"dev\" ]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: 准备代码\n        uses: actions/checkout@v4\n        \n      # 安装uv环境\n      - name: 安装uv\n        uses: astral-sh/setup-uv@v2\n        with:\n          version: \"0.8.11\"\n          enable-cache: true\n\n      - name: 准备python环境\n        uses: actions/setup-python@v5\n        with:\n          python-version: \"3.11\"\n\n      - name: 安装基础依赖\n        run: uv sync  #只安装基础依赖，避免平台特定依赖\n\n      - name: 查看文件和目录结构\n        run: ls -lha  \n\n      - name: 准备生产环境文件\n        run: |\n          mkdir -p dist/etc\n          # 复制源代码\n          cp -rf src dist/\n          cp -rf config dist/\n          cp -rf template dist/\n          # 复制依赖配置文件\n          cp pyproject.toml dist/\n          cp *.py dist/\n          cp uv.lock dist/\n          echo \"${{ github.sha }}\" > dist/etc/commit_hash\n\n      - name: 查看文件和目录结构\n        run: ls -lha  dist -R\n\n      - name: 准备打包Docker镜像的环境\n        uses: docker/setup-buildx-action@v3\n\n      # 登录到Docker Hub\n      - name: 登录Docker Hub\n        if: github.event_name != 'pull_request'  # PR时不登录\n        uses: docker/login-action@v3\n        with:\n          username: ${{ secrets.DOCKERHUB_USERNAME }}\n          password: ${{ secrets.DOCKERHUB_TOKEN }}\n\n      # 提取标签信息 - 使用与登录相同的Secret变量名\n      - name: 提取镜像标签\n        id: meta\n        uses: docker/metadata-action@v5\n        with:\n          images: |\n            ${{ secrets.DOCKERHUB_USERNAME }}/capcut-mate  # 统一使用DOCKERHUB_USERNAME（无下划线）\n          tags: |\n            type=ref,event=branch\n            type=ref,event=tag\n            type=sha,format=short\n            type=raw,value=latest,enable={{is_default_branch}}\n\n      # 调试步骤：检查生成的标签\n      - name: 显示生成的镜像标签\n        run: |\n          echo \"生成的标签: ${{ steps.meta.outputs.tags }}\"\n          # 检查标签是否包含正确的用户名格式\n          if [[ ! \"${{ steps.meta.outputs.tags }}\" == *\"${{ secrets.DOCKERHUB_USERNAME }}/capcut-mate:\"* ]]; then\n            echo \"错误：标签格式不正确，应为 ${secrets.DOCKERHUB_USERNAME}/capcut-mate:标签\"\n            exit 1\n          fi\n\n      # 构建并推送Docker镜像\n      - name: 构建并推送Docker镜像\n        uses: docker/build-push-action@v5\n        with:\n          context: .\n          file: ./Dockerfile\n          push: ${{ github.event_name != 'pull_request' }}\n          tags: ${{ steps.meta.outputs.tags }}\n          cache-from: type=gha\n          cache-to: type=gha,mode=max\n    \n"
  },
  {
    "path": ".gitignore",
    "content": "*.pyc\n.venv\n./dist\n/.qoder\n/output\n/temp\n/logs\n/db\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM python:3.11-slim\n\n# 使用pip安装uv\nRUN pip install --no-cache-dir uv\n\n# 验证uv安装\nRUN uv --version\n\n# 设置工作目录\nWORKDIR /app\n\n# 创建非root用户并提前配置缓存目录\nRUN mkdir -p /root/.cache/uv /app/bin/\n\n# 从CI构建的dist目录复制所有文件\nCOPY dist/ .\nCOPY tools/ffprobe /app/bin/ffprobe\n\n# 安装依赖（仍使用root用户确保权限）\nRUN uv sync\n\n# 添加权限\nRUN chmod 0755 /app/bin/*\n\n# 暴露应用端口\nEXPOSE 30000\n\n# 设置环境变量，指定uv缓存目录和用户主目录\nENV PYTHONDONTWRITEBYTECODE=1 \\\n    PYTHONUNBUFFERED=1 \\\n    PATH=\"/app/.venv/bin:/app/bin:$PATH\" \\\n    HOME=\"/root\" \\\n    UV_CACHE_DIR=\"/root/.cache/uv\"\n\n# 启动命令\nCMD [\"uv\", \"run\", \"main.py\", \"--workers\", \"4\"]\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 gogoshine\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.\n"
  },
  {
    "path": "README.md",
    "content": "# CapCut Mate API\n\n<div align=\"center\">\n\n### 🌐 Language Switch\n\n[中文版](README.zh.md) | [English](README.md)\n\n</div>\n\n---\n\n## Project Introduction\nCapCut Mate API is a **completely open-source and free** Jianying draft automation assistant built on **FastAPI**, supporting **independent deployment**. This project focuses on empowering large models with basic video editing capabilities, providing out-of-the-box video editing **Skills**, and has fully **automated the entire Jianying core functionality workflow**. It can directly **connect with large models** to achieve diverse intelligent video editing, enabling ordinary users to quickly create professional and advanced video works.\n\nFlexible project usage: Can be **independently deployed**, or combined with **Coze or n8n** to build **automated workflows**, and can also connect with Jianying to achieve **cloud rendering**, directly generating final videos from drafts.\n\n## Project Resources\n- [⭐ Jianying Assistant](https://github.com/Hommy-master/capcut-mate)\n- [🔌 Jianying Assistant - Coze Plugin](https://www.coze.cn/store/plugin/7576197869707722771)\n- [🔗 Workflow Examples](https://jcaigc.cn/workflow)\n\n⭐ If you find this project helpful, please give us a Star! Your support is the greatest motivation for me to continuously maintain and improve the project 😊\n\n## Features\n- 🎬 Draft Management: Create draft, get draft, save draft\n- 🎥 Material Addition: Add videos, audios, images, stickers, subtitles, effects, masks, etc.\n- 🔧 Advanced Functions: Keyframe control, text styles, animation effects, etc.\n- 📤 Video Export: Cloud rendering to generate final video\n- 🛡️ Data Validation: Using Pydantic for request data validation\n- 📖 RESTful API: Compliant with standard API design specifications\n- 📚 Auto Documentation: FastAPI automatically generates interactive API documentation\n\n## Tech Stack\n- Python 3.11+\n- FastAPI: High-performance web framework\n- Pydantic: Data validation and model definition\n- Passlib: Password encryption (if using user authentication)\n- Uvicorn: ASGI server\n- uv: Python package manager and project management tool\n\n## Quick Start\n\n### Prerequisites\n- Python 3.11+\n- uv: Python package manager and project management tool\n\nInstallation:\n#### Windows\n```powershell\npowershell -ExecutionPolicy ByPass -c \"irm https://astral.sh/uv/install.ps1 | iex\"\n```\n\n#### Linux/macOS\n```bash\nsh -c \"$(curl -LsSf https://astral.sh/uv/install.sh)\"\n```\n\n### Installation Steps\n1. Clone the project\n```bash\ngit clone git@github.com:Hommy-master/capcut-mate.git\ncd capcut-mate\n```\n\n2. Install dependencies\n```bash\n# Install dependencies\nuv sync\n\n# Additional execution for Windows\nuv pip install -e .[windows]\n```\n\n3. Start the server\n```bash\nuv run main.py\n```\n\n4. Access API documentation\nAfter starting, visit http://localhost:30000/docs to view the automatically generated interactive API documentation\n\n### Docker Deployment\n\n#### Quick Deployment (Recommended)\n\n📺 **Video Tutorial**: [CapCut Mate Private Deployment Complete Tutorial](https://v.douyin.com/5p-o319uA5o/)\n\n```bash\ngit clone https://github.com/Hommy-master/capcut-mate.git\ncd capcut-mate\ndocker-compose pull && docker-compose up -d\n```\n\nAfter deployment, access the API documentation at: http://localhost:30000/docs\n\n## One-Click Import Coze Plugin\n\n1. Open Coze platform: https://coze.cn/home\n\n   ![Step 1](./assets/coze1.png)\n\n2. Add Plugin\n\n   ![Step 2](./assets/coze2.png)\n\n3. Import Plugin\n\n   ![Step 3](./assets/coze3.png)\n\n4. Upload the openapi.yaml file in the current project directory\n\n   ![Step 4](./assets/coze4.png)\n\n5. Complete file upload\n\n   ![Step 5](./assets/coze5.png)\n\n6. Complete logo replacement\n\n   ![Step 6](./assets/coze6.png)\n\n7. Enable Plugin\n\n   ![Step 7](./assets/coze7.png)\n\n## API Documentation\n\nThe following are the core interfaces provided by CapCut Mate API, supporting a complete video creation workflow:\n\n### 🏗️ Draft Management\n| Interface | Function | Description | Documentation Link |\n|-----------|----------|-------------|-------------------|\n| **create_draft** | Create Draft | Create a new Jianying draft project, set canvas size | [📖 View Documentation](./docs/create_draft.md) |\n| **save_draft** | Save Draft | Save current draft state, ensure edit content persistence | [📖 View Documentation](./docs/save_draft.md) |\n| **get_draft** | Get Draft | Get draft file list and detailed information | [📖 View Documentation](./docs/get_draft.md) |\n\n### 🎥 Video Materials\n| Interface | Function | Description | Documentation Link |\n|-----------|----------|-------------|-------------------|\n| **add_videos** | Add Videos | Batch add video materials, support cropping, scaling, effects | [📖 View Documentation](./docs/add_videos.md) |\n| **add_images** | Add Images | Batch add image materials, support animations and transition effects | [📖 View Documentation](./docs/add_images.md) |\n| **add_sticker** | Add Stickers | Add decorative stickers, support position and size adjustment | [📖 View Documentation](./docs/add_sticker.md) |\n\n### 🎵 Audio Processing\n| Interface | Function | Description | Documentation Link |\n|-----------|----------|-------------|-------------------|\n| **add_audios** | Add Audios | Batch add audio materials, support volume and fade in/out | [📖 View Documentation](./docs/add_audios.md) |\n| **get_audio_duration** | Get Audio Duration | Get precise duration information of audio files | [📖 View Documentation](./docs/get_audio_duration.md) |\n\n### 📝 Text Subtitles\n| Interface | Function | Description | Documentation Link |\n|-----------|----------|-------------|-------------------|\n| **add_captions** | Add Captions | Batch add captions, support keyword highlighting and style settings | [📖 View Documentation](./docs/add_captions.md) |\n| **add_text_style** | Text Style | Create rich text styles, support keyword colors and fonts | [📖 View Documentation](./docs/add_text_style.md) |\n\n### ✨ Effects & Animations\n| Interface | Function | Description | Documentation Link |\n|-----------|----------|-------------|-------------------|\n| **add_effects** | Add Effects | Add visual effects, such as filters, borders, dynamic effects | [📖 View Documentation](./docs/add_effects.md) |\n| **add_keyframes** | Keyframe Animation | Create property animations for position, scale, rotation, etc. | [📖 View Documentation](./docs/add_keyframes.md) |\n| **add_masks** | Mask Effects | Add various shape masks, control visible areas of the screen | [📖 View Documentation](./docs/add_masks.md) |\n\n### 🎨 Animation Resources\n| Interface | Function | Description | Documentation Link |\n|-----------|----------|-------------|-------------------|\n| **get_text_animations** | Text Animations | Get available text entrance, exit, and loop animations | [📖 View Documentation](./docs/get_text_animations.md) |\n| **get_image_animations** | Image Animations | Get available image animation effects list | [📖 View Documentation](./docs/get_image_animations.md) |\n\n### 🎬 Video Generation\n| Interface | Function | Description | Documentation Link |\n|-----------|----------|-------------|-------------------|\n| **gen_video** | Generate Video | Submit video rendering task, asynchronous processing | [📖 View Documentation](./docs/gen_video.md) |\n| **gen_video_status** | Query Status | Query the progress and status of video generation tasks | [📖 View Documentation](./docs/gen_video_status.md) |\n\n### 🚀 Quick Tools\n| Interface | Function | Description | Documentation Link |\n|-----------|----------|-------------|-------------------|\n| **easy_create_material** | Quick Creation | Add multiple types of materials at once, simplify creation process | [📖 View Documentation](./docs/easy_create_material.md) |\n\n### 🛠️ Utility Tools\n| Interface | Function | Description | Documentation Link |\n|-----------|----------|-------------|-------------------|\n| **get_url** | Extract URL | Extract URL information from input content | [📖 View Documentation](./docs/get_url.md) |\n| **search_sticker** | Search Sticker | Search sticker materials by keyword | [📖 View Documentation](./docs/search_sticker.md) |\n| **objs_to_str_list** | Objects to String List | Convert object list to string list format | [📖 View Documentation](./docs/objs_to_str_list.md) |\n| **str_list_to_objs** | String List to Objects | Convert string list to object list format | [📖 View Documentation](./docs/str_list_to_objs.md) |\n| **str_to_list** | String to List | Convert string to list format | [📖 View Documentation](./docs/str_to_list.md) |\n| **timelines** | Create Timelines | Generate timeline configurations for video editing | [📖 View Documentation](./docs/timelines.md) |\n| **audio_timelines** | Audio Timelines | Calculate timelines based on audio durations | [📖 View Documentation](./docs/audio_timelines.md) |\n| **audio_infos** | Audio Information | Generate audio information from URLs and timelines | [📖 View Documentation](./docs/audio_infos.md) |\n| **imgs_infos** | Image Information | Generate image information from URLs and timelines | [📖 View Documentation](./docs/imgs_infos.md) |\n| **caption_infos** | Caption Information | Generate caption information from text and timelines | [📖 View Documentation](./docs/caption_infos.md) |\n| **effect_infos** | Effect Information | Generate effect information from names and timelines | [📖 View Documentation](./docs/effect_infos.md) |\n| **keyframes_infos** | Keyframe Information | Generate keyframe information from configurations | [📖 View Documentation](./docs/keyframes_infos.md) |\n| **video_infos** | Video Information | Generate video information from URLs and timelines | [📖 View Documentation](./docs/video_infos.md) |\n\n## API Usage Examples\n\n### Workflow Examples\n\nExplore real-world workflow examples to learn how to integrate CapCut Mate with automation platforms like Coze and n8n:\n\n👉 [View Workflow Examples](https://jcaigc.cn/workflow)\n\n### Create Draft\n```bash\ncurl -X POST \"http://localhost:30000/openapi/capcut-mate/v1/create_draft\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\"width\": 1080, \"height\": 1920}'\n```\n\n### Add Videos\n`video_infos` is a **JSON string** (not a nested JSON array). Each item must include `video_url`, `start`, and `end` (microseconds on the timeline). See [add_videos](./docs/add_videos.md) for optional fields.\n\n```bash\ncurl -X POST \"http://localhost:30000/openapi/capcut-mate/v1/add_videos\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\n  \"draft_url\": \"http://localhost:30000/openapi/capcut-mate/v1/get_draft?draft_id=20251126212753cab03392\",\n  \"video_infos\": \"[{\\\"video_url\\\": \\\"https://example.com/video.mp4\\\", \\\"start\\\": 0, \\\"end\\\": 1000000}]\"\n}'\n```\n\n## API Documentation\n- Local Access: http://localhost:30000/docs\n- ReDoc Version: http://localhost:30000/redoc\n\n## Jianying Assistant Client\n\nThe Jianying Assistant client provides a convenient desktop interface. Here are the startup methods:\n\n### macOS Sandbox Permissions Guide\n\nWhen running on macOS, the application may request access permissions for specific folders. Please follow these steps:\n\n1. If permission prompts appear during the first run, allow the application to access the required folders\n2. For manual configuration, go to `System Preferences > Security & Privacy > Privacy > Folder Access`\n3. Ensure the CapCut Mate application is added to the allowed list\n\nFor more details, please refer to the [macOS Sandbox Permissions Configuration Guide](./docs/macos_sandbox_setup.md).\n\n1. Install Dependencies\n\n```bash\n# Switch npm mirror source - for Windows\nset ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/\n\n# Switch yarn mirror source - for Linux or macOS\nexport ELECTRON_MIRROR=\"https://npmmirror.com/mirrors/electron/\"\n\n# Install dependencies\nnpm install --verbose\n```\n\n2. Start the Project\n\n```bash\nnpm run web:dev\nnpm start\n```\n\n## Contact\n\n| Type | Method | Description |\n|------|--------|-------------|\n| 📱 WeChat Group | <div align=\"center\"><img src=\"./assets/wechat-q.jpg\" width=\"200\" alt=\"Jianying Assistant\"></div> | Open Source Community Discussion Group |\n| 💬 WeChat | <div align=\"center\"><img src=\"./assets/wechat.jpg\" width=\"120\" alt=\"Technical Support WeChat\"></div> | Business Cooperation |\n| 📧 Email | taohongmin51@gmail.com | Technical Support |\n\n---"
  },
  {
    "path": "README.zh.md",
    "content": "# CapCut Mate API\n\n<div align=\"center\">\n\n### 🌐 语言切换\n\n[中文版](README.zh.md) | [English](README.md)\n\n</div>\n\n---\n\n## 项目简介\nCapCut Mate API 是一款完全**开源免费**、基于 FastAPI构建的剪映草稿自动化助手，支持**独立部署**。本项目专注于为大模型赋能基础视频编辑能力，提供开箱即用的视频剪辑 **Skills**，已将剪映核心功能全流程自动化。可直接对接大模型实现多样化智能视频剪辑，让普通用户也能快速制作出专业高级的视频作品。\n\n项目使用灵活：既可独立部署，也可**结合 Coze 或 n8n自动化工作流**，还能对接剪映实现**云渲染**，直接将草稿生成最终视频。\n\n## 项目相关资源\n- [⭐ 剪映小助手](https://github.com/Hommy-master/capcut-mate)\n- [🔌 剪映小助手-扣子插件](https://www.coze.cn/store/plugin/7576197869707722771)\n- [🔗 工作流案例](https://jcaigc.cn/workflow)\n\n⭐ 如果您觉得这个项目对您有点帮助，麻烦点个 Star 支持一下！您的支持是我持续维护和改进项目的最大动力 😊\n\n## 功能特点\n- 🎬 草稿管理：创建草稿、获取草稿、保存草稿\n- 🎥 素材添加：添加视频、音频、图片、贴纸、字幕、特效、遮罩等\n- 🔧 高级功能：关键帧控制、文字样式、动画效果等\n- 📤 视频导出：云端渲染生成最终视频\n- 🛡️ 数据验证：使用 Pydantic 进行请求数据验证\n- 📖 RESTful API：符合标准的 API 设计规范\n- 📚 自动文档：FastAPI 自动生成交互式 API 文档\n\n## 技术栈\n- Python 3.11+\n- FastAPI：高性能的 Web 框架\n- Pydantic：数据验证和模型定义\n- Passlib：密码加密（如果使用用户认证）\n- Uvicorn：ASGI 服务器\n- uv：Python 包管理器和项目管理工具\n\n## 快速开始\n\n### 前提条件\n- Python 3.11+\n- uv：Python 包管理器和项目管理工具\n\n安装方法:\n#### Windows\n```powershell\npowershell -ExecutionPolicy ByPass -c \"irm https://astral.sh/uv/install.ps1 | iex\"\n```\n\n#### Linux/macOS\n```bash\nsh -c \"$(curl -LsSf https://astral.sh/uv/install.sh)\"\n```\n\n### 安装步骤\n1. 克隆项目\n```bash\ngit clone git@github.com:Hommy-master/capcut-mate.git\ncd capcut-mate\n```\n\n2. 安装依赖\n```bash\n# 安装依赖\nuv sync\n\n# windows额外执行\nuv pip install -e .[windows]\n```\n\n3. 启动服务器\n```bash\nuv run main.py\n```\n\n4. 访问API文档\n启动后访问 http://localhost:30000/docs 查看自动生成的交互式API文档\n\n### Docker 部署\n\n#### 快速部署（推荐）\n\n📺 **视频教程**：[CapCut Mate 私有化部署完整教程](https://v.douyin.com/5p-o319uA5o/)\n\n```bash\ngit clone https://github.com/Hommy-master/capcut-mate.git\ncd capcut-mate\ndocker-compose pull && docker-compose up -d\n```\n\n部署完成后，访问 API 文档：http://localhost:30000/docs\n\n## 一键导入扣子插件\n\n1. 打开扣子平台：https://coze.cn/home\n\n   ![步骤1](./assets/coze1.png)\n\n2. 添加插件\n\n   ![步骤2](./assets/coze2.png)\n\n3. 导入插件\n\n   ![步骤3](./assets/coze3.png)\n\n4. 上传当前工程目录下的openapi.yaml文件\n\n   ![步骤4](./assets/coze4.png)\n\n5. 完成文件上传\n\n   ![步骤5](./assets/coze5.png)\n\n6. 替换logo完成\n\n   ![步骤6](./assets/coze6.png)\n\n7. 启用插件\n\n   ![步骤7](./assets/coze7.png)\n\n## API 接口文档\n\n以下是 CapCut Mate API 提供的核心接口，支持完整的视频创作工作流程：\n\n### 🏗️ 草稿管理\n| 接口 | 功能 | 描述 | 文档链接 |\n|------|------|------|----------|\n| **create_draft** | 创建草稿 | 创建新的剪映草稿项目，设置画布尺寸 | [📖 查看文档](./docs/create_draft.zh.md) |\n| **save_draft** | 保存草稿 | 保存当前草稿状态，确保编辑内容持久化 | [📖 查看文档](./docs/save_draft.zh.md) |\n| **get_draft** | 获取草稿 | 获取草稿文件列表和详细信息 | [📖 查看文档](./docs/get_draft.zh.md) |\n\n### 🎥 视频素材\n| 接口 | 功能 | 描述 | 文档链接 |\n|------|------|------|----------|\n| **add_videos** | 添加视频 | 批量添加视频素材，支持裁剪、缩放、特效 | [📖 查看文档](./docs/add_videos.zh.md) |\n| **add_images** | 添加图片 | 批量添加图片素材，支持动画和转场效果 | [📖 查看文档](./docs/add_images.zh.md) |\n| **add_sticker** | 添加贴纸 | 添加装饰贴纸，支持位置和大小调整 | [📖 查看文档](./docs/add_sticker.zh.md) |\n\n### 🎵 音频处理\n| 接口 | 功能 | 描述 | 文档链接 |\n|------|------|------|----------|\n| **add_audios** | 添加音频 | 批量添加音频素材，支持音量和淡入淡出 | [📖 查看文档](./docs/add_audios.zh.md) |\n| **get_audio_duration** | 获取音频时长 | 获取音频文件的精确时长信息 | [📖 查看文档](./docs/get_audio_duration.zh.md) |\n\n### 📝 文本字幕\n| 接口 | 功能 | 描述 | 文档链接 |\n|------|------|------|----------|\n| **add_captions** | 添加字幕 | 批量添加字幕，支持关键词高亮和样式设置 | [📖 查看文档](./docs/add_captions.zh.md) |\n| **add_text_style** | 文本样式 | 创建富文本样式，支持关键词颜色和字体 | [📖 查看文档](./docs/add_text_style.zh.md) |\n\n### ✨ 特效动画\n| 接口 | 功能 | 描述 | 文档链接 |\n|------|------|------|----------|\n| **add_effects** | 添加特效 | 添加视觉特效，如滤镜、边框、动态效果 | [📖 查看文档](./docs/add_effects.zh.md) |\n| **add_keyframes** | 关键帧动画 | 创建位置、缩放、旋转等属性动画 | [📖 查看文档](./docs/add_keyframes.zh.md) |\n| **add_masks** |遮罩效果 | 添加各种形状遮罩，控制画面可见区域 | [📖 查看文档](./docs/add_masks.zh.md) |\n\n### 🎨 动画资源\n| 接口 | 功能 | 描述 | 文档链接 |\n|------|------|------|----------|\n| **get_text_animations** | 文本动画 | 获取可用的文本入场、出场、循环动画 | [📖 查看文档](./docs/get_text_animations.zh.md) |\n| **get_image_animations** | 图片动画 | 获取可用的图片动画效果列表 | [📖 查看文档](./docs/get_image_animations.zh.md) |\n\n### 🎬 视频生成\n| 接口 | 功能 | 描述 | 文档链接 |\n|------|------|------|----------|\n| **gen_video** | 生成视频 | 提交视频渲染任务，异步处理 | [📖 查看文档](./docs/gen_video.zh.md) |\n| **gen_video_status** | 查询状态 | 查询视频生成任务的进度和状态 | [📖 查看文档](./docs/gen_video_status.zh.md) |\n\n### 🚀 快速工具\n| 接口 | 功能 | 描述 | 文档链接 |\n|------|------|------|----------|\n| **easy_create_material** |快速创建 | 一次性添加多种类型素材，简化创建流程 | [📖 查看文档](./docs/easy_create_material.zh.md) |\n\n### 🛠️工具类接口\n|接口 |功能 |描述 | 文档链接 |\n|------|------|------|----------|\n| **get_url** | 提取URL | 从输入内容中提取URL信息 | [📖 查看文档](./docs/get_url.zh.md) |\n| **search_sticker** |搜索贴纸 |根据关键词搜索贴纸素材 | [📖 查看文档](./docs/search_sticker.zh.md) |\n| **objs_to_str_list** | 对象转字符串列表 |将对象列表转换为字符串列表格式 | [📖 查看文档](./docs/objs_to_str_list.zh.md) |\n| **str_list_to_objs** | 字符串列表转对象 |将字符串列表转换为对象列表格式 | [📖 查看文档](./docs/str_list_to_objs.zh.md) |\n| **str_to_list** | 字符串转列表 |将字符串转换为列表格式 | [📖 查看文档](./docs/str_to_list.zh.md) |\n| **timelines** | 创建时间线 | 生成视频编辑所需的时间线配置 | [📖 查看文档](./docs/timelines.zh.md) |\n| **audio_timelines** |音频时间线 |根据音频时长计算时间线 | [📖 查看文档](./docs/audio_timelines.zh.md) |\n| **audio_infos** |音频信息 |根据URL和时间线生成音频信息 | [📖 查看文档](./docs/audio_infos.zh.md) |\n| **imgs_infos** | 图片信息 |根据URL和时间线生成图片信息 | [📖 查看文档](./docs/imgs_infos.zh.md) |\n| **caption_infos** | 字幕信息 |根据文本和时间线生成字幕信息 | [📖 查看文档](./docs/caption_infos.zh.md) |\n| **effect_infos** |特信息 | 根据名称和时间线生成特效信息 | [📖 查看文档](./docs/effect_infos.zh.md) |\n| **keyframes_infos** | 关键帧信息 | 根据配置生成关键帧信息 | [📖 查看文档](./docs/keyframes_infos.zh.md) |\n| **video_infos** |视信息信息 | 根据URL和时间线生成视频信息 | [📖 查看文档](./docs/video_infos.zh.md) |\n\n## API 使用示例\n\n### 工作流案例\n\n查看完整的真实工作流案例，了解如何将 CapCut Mate 接口与 Coze、n8n 等自动化平台结合使用：\n\n👉 [访问工作流案例](https://jcaigc.cn/workflow)\n\n### 创建草稿\n```bash\ncurl -X POST \"http://localhost:30000/openapi/capcut-mate/v1/create_draft\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\"width\": 1080, \"height\": 1920}'\n```\n\n### 添加视频\n`video_infos` 为 **JSON 字符串**（请求体里不能写成嵌套数组）。每条记录须包含 `video_url`、`start`、`end`（时间轴上的微秒）。可选字段见 [add_videos](./docs/add_videos.zh.md)。\n\n```bash\ncurl -X POST \"http://localhost:30000/openapi/capcut-mate/v1/add_videos\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\n  \"draft_url\": \"http://localhost:30000/openapi/capcut-mate/v1/get_draft?draft_id=20251126212753cab03392\",\n  \"video_infos\": \"[{\\\"video_url\\\": \\\"https://example.com/video.mp4\\\", \\\"start\\\": 0, \\\"end\\\": 1000000}]\"\n}'\n```\n\n## API 文档\n- 本地访问: http://localhost:30000/docs\n- ReDoc 版本: http://localhost:30000/redoc\n\n## 剪映小助手客户端\n\n剪映小助手客户端提供了桌面端的便捷操作界面，以下是启动方法：\n\n### macOS 沙箱权限说明\n\n在 macOS 上运行时，应用可能会请求访问特定文件夹的权限。请按照以下步骤操作：\n\n1. 如果首次运行时出现权限提示，请允许应用访问所需文件夹\n2. 如需手动配置，请前往 `系统偏好设置 > 安全性与隐私 > 隐私 > 文件夹访问`\n3. 确保 CapCut Mate 应用已被添加到允许列表中\n\n更多详细信息，请参阅 [macOS 沙箱权限配置指南](./docs/macos_sandbox_setup.md)。\n\n1. 安装依赖\n\n```bash\n# 切换npm镜像源 - 适用于windows\nset ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/\n\n# 切换yarn镜像源 - 适用于linux 或 mac\nexport ELECTRON_MIRROR=\"https://npmmirror.com/mirrors/electron/\"\n\n# 安装依赖\nnpm install --verbose\n```\n\n2. 启动项目\n\n```bash\nnpm run web:dev\nnpm start\n```\n\n## 联系方式\n\n| 类型 | 方式 | 说明 |\n|------|------|------|\n| 📱 微信群 | <div align=\"center\"><img src=\"./assets/wechat-q.jpg\" width=\"200\" alt=\"剪映小助手\"></div> | 开源社区问题交流群 |\n| 💬 微信 | <div align=\"center\"><img src=\"./assets/wechat.jpg\" width=\"120\" alt=\"技术支持微信\"></div> | 商业合作 |\n| 📧 邮箱 | taohongmin51@gmail.com | 技术支持 |\n\n---"
  },
  {
    "path": "config/huazi.json",
    "content": "[\n  {\n    \"id\": \"7539407429763796249\",\n    \"title\": \"红黄火焰综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351316503771368713\",\n    \"title\": \"综艺-黑暗斑驳红色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403923146862087424\",\n    \"title\": \"蓝白色立体综艺描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7527336771223407934\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7506878563723840783\",\n    \"title\": \"黄字橙光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351314020114124068\",\n    \"title\": \"综艺-我看看 太夸张了吧!!\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404884940837473590\",\n    \"title\": \"黑色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7272728092529986827\",\n    \"title\": \"音乐节-超粗描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160594825933262087\",\n    \"title\": \"潮酷橙底黄色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7212892794778668345\",\n    \"title\": \"美食-肉\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405155739943079178\",\n    \"title\": \"蓝白渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7477040473454939454\",\n    \"title\": \"橙黄色描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406159958045232435\",\n    \"title\": \"动感黄色发光故障风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404758577623289123\",\n    \"title\": \"渐变黄红色发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403930784630967604\",\n    \"title\": \"黄色渐变红描边发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371391474404986150\",\n    \"title\": \"火焰燃烧花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7508541988401368345\",\n    \"title\": \"618立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7545767280450227481\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404010442118515994\",\n    \"title\": \"渐变黄色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7546806821701504281\",\n    \"title\": \"金箔纹理字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406646972330953994\",\n    \"title\": \"蓝色质感渐变立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431415454515612963\",\n    \"title\": \"蓝字黄背景字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403728277036125449\",\n    \"title\": \"白色蓝边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404668885196131603\",\n    \"title\": \"黄色渐变描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7508204538659310872\",\n    \"title\": \"黄色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405520166701813018\",\n    \"title\": \"白色纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371423297289866505\",\n    \"title\": \"蓝色冰块立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7477792820707757336\",\n    \"title\": \"黄红色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7533685266033347902\",\n    \"title\": \"黄橙渐变立体秋日花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7548286146946616600\",\n    \"title\": \"红金立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430745422412549385\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406860981114015014\",\n    \"title\": \"蓝色渐变花光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405788077832080659\",\n    \"title\": \"黄色立体字（秋天）\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7450158325188070668\",\n    \"title\": \"裂缝纹理投影\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7441868112556739849\",\n    \"title\": \"元旦新年氛围金色闪粉发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7479056232117062937\",\n    \"title\": \"红黄描边立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406015916380605733\",\n    \"title\": \"金色发光镂空花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7311259207590776075\",\n    \"title\": \"运动教程-花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7478970969026022680\",\n    \"title\": \"综艺风红色渐变纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406221865171111208\",\n    \"title\": \"蓝色立体描边文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7447932873845247286\",\n    \"title\": \"25元旦-晕染红描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404700591949204799\",\n    \"title\": \"蓝色蜡笔纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403915995569474870\",\n    \"title\": \"粉笔拼贴花字（教师节）\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7523881114054970648\",\n    \"title\": \"黄色渐变粉蓝描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7480494571168795966\",\n    \"title\": \"蓝色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7350889130865265970\",\n    \"title\": \"轻复古\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127681027346058503\",\n    \"title\": \"综艺 红色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404140347892305202\",\n    \"title\": \"蓝白霓虹灯镂空效果发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404837954532789523\",\n    \"title\": \"黄色立体描边多彩花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406655431940033792\",\n    \"title\": \"黄字彩色多层投影文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7506824081531243801\",\n    \"title\": \"红色紫色渐变立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7347907413363789094\",\n    \"title\": \"黄色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7212896770370571557\",\n    \"title\": \"美食-发光白\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400711954731371786\",\n    \"title\": \"复古橙黄渐变醒目\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430861390933413130\",\n    \"title\": \"冬至立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7278242937488690493\",\n    \"title\": \"黑底白色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405521516131093795\",\n    \"title\": \"金边浮雕文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7467426470714051902\",\n    \"title\": \"橘黄色渐变温柔发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7496504150797274393\",\n    \"title\": \"蓝色闪粉星光闪闪发光划走\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7368866329337580851\",\n    \"title\": \"上下错落发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7362931435809901859\",\n    \"title\": \"蓝色立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7231501825311116577\",\n    \"title\": \"蓝字白边蓝光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7477883005953051928\",\n    \"title\": \"岩石花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7375227839542480191\",\n    \"title\": \"618-红紫渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7494576393569733913\",\n    \"title\": \"简约黄蓝方块综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7511243674546867518\",\n    \"title\": \"红色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7311259516392197439\",\n    \"title\": \"运动教程-花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404134454844788018\",\n    \"title\": \"3D蓝字黄边立体综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7485579082764225817\",\n    \"title\": \"黄色渐变纹理粉蓝立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7303813440127126836\",\n    \"title\": \"JP冬日-结霜字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405872381320842515\",\n    \"title\": \"红粉渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406170424935058726\",\n    \"title\": \"紫色阴森情绪发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7343614179732966691\",\n    \"title\": \"黄底字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7298566943722851594\",\n    \"title\": \"黄色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404440675225292083\",\n    \"title\": \"红黄渐变背景花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404352881861659931\",\n    \"title\": \"渐变黄字红边星光立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405221368561700148\",\n    \"title\": \"黄紫撞色复古立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404008412607958323\",\n    \"title\": \"霓虹灯花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7308367002253544741\",\n    \"title\": \"红色渐变白霜立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405906746461424930\",\n    \"title\": \"红色复古投影字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7488151895048211736\",\n    \"title\": \"像素化花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7492933140210666776\",\n    \"title\": \"蓝橙色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7360526293596671273\",\n    \"title\": \"拼贴多色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7546405848860511513\",\n    \"title\": \"黄蓝紫渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160599091750161671\",\n    \"title\": \"复古红色发光立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7434585603439742218\",\n    \"title\": \"综艺红黄立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351319129124506930\",\n    \"title\": \"综艺-巅峰 厉害!!真是太火爆了!!!2\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7525867881331215640\",\n    \"title\": \"黄红蓝边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406970077368618274\",\n    \"title\": \"复古黄色立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431490038736702760\",\n    \"title\": \"黄蓝立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7533790251915955518\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7408956728529751333\",\n    \"title\": \"黄色霓虹灯发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7532883085390548286\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7509743284898794777\",\n    \"title\": \"黄色马卡龙\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406334288930557218\",\n    \"title\": \"撞色描边立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405871504769961254\",\n    \"title\": \"游戏像素文字效果花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7475271686095506712\",\n    \"title\": \"粉色立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7330423055900069155\",\n    \"title\": \"霓虹灯花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7389147072064179506\",\n    \"title\": \"黄色红色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7539187400808123672\",\n    \"title\": \"红樱桃\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7474511004676803902\",\n    \"title\": \"粉紫描边立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7495665652816956697\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405070516706381092\",\n    \"title\": \"渐变黄色中秋圆底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430809868333780259\",\n    \"title\": \"复古背景字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7259922491185958203\",\n    \"title\": \"蓝紫色粗体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403962881252805903\",\n    \"title\": \"黄绿发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7366086107366182153\",\n    \"title\": \"粉蓝色渐变立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7525463353603640601\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7474605929825193240\",\n    \"title\": \"粉色描边白色字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7536671491740634392\",\n    \"title\": \"穿搭立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7264547410817387795\",\n    \"title\": \"好物美妆-黄白跳色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7411032759457631515\",\n    \"title\": \"绿色东南亚\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7520663448003415358\",\n    \"title\": \"蓝色纸纹纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406976068789210403\",\n    \"title\": \"红黄渐变发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7396798321739730226\",\n    \"title\": \"粉色星空花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404321887817452800\",\n    \"title\": \"粉色立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405501393248881960\",\n    \"title\": \"金属划痕暗黑立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7507145578984361241\",\n    \"title\": \"粉色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407078807309503744\",\n    \"title\": \"橘黄色立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7362054905256758591\",\n    \"title\": \"双色爱心花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7532428202199797016\",\n    \"title\": \"三花猫配色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7477511783801163032\",\n    \"title\": \"绿色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7293329973694172435\",\n    \"title\": \"高级幻彩花紫字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406650793631223075\",\n    \"title\": \"红绿撞色发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265723229216525620\",\n    \"title\": \"绿色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404290078723312931\",\n    \"title\": \"绿色渐变背景字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7527597707930799422\",\n    \"title\": \"蓝绿纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7376607395046231331\",\n    \"title\": \"粉色立体渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405087980685167922\",\n    \"title\": \"黄色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7478268728992419096\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7398456039634406666\",\n    \"title\": \"#花字招募令 彩虹花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404459246961577257\",\n    \"title\": \"少女粉星星花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404471553607421222\",\n    \"title\": \"未来科技感发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241759007952735491\",\n    \"title\": \"潮流紫色荧光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404263174230297882\",\n    \"title\": \"橙色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430667459683831079\",\n    \"title\": \"可爱花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7539752808367574297\",\n    \"title\": \"渐变综艺发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7293140122332122368\",\n    \"title\": \"橙色万圣花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406388990837886234\",\n    \"title\": \"棕色立体粗描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260043007997562149\",\n    \"title\": \"立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7481664682638560537\",\n    \"title\": \"酸性质感花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7492430244570303806\",\n    \"title\": \"绿色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404304312135896360\",\n    \"title\": \"赛博朋克风故障字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404522256929459494\",\n    \"title\": \"粉色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7475398432807521561\",\n    \"title\": \"粉橙立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7362833837627378944\",\n    \"title\": \"复古牛皮纸花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7306894668795612442\",\n    \"title\": \"黑色纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7349078136480386345\",\n    \"title\": \"圆环花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7509044952912055614\",\n    \"title\": \"薰衣草\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404757226583362854\",\n    \"title\": \"清新条纹投影纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406238235141213440\",\n    \"title\": \"马卡龙色渐变文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351431205692181786\",\n    \"title\": \"白字红光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7333249201419160868\",\n    \"title\": \"纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405049138867424523\",\n    \"title\": \"描边橙色黄色双色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7491540791689530686\",\n    \"title\": \"粉色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371110382393494793\",\n    \"title\": \"黄粉色立体渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7388017781117160745\",\n    \"title\": \"低饱和紫色渐变综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404083693003853096\",\n    \"title\": \"莫兰迪清新蓝色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405888865132711220\",\n    \"title\": \"节日花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7174401031399312670\",\n    \"title\": \"3D多层渐变红\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7389185223600114995\",\n    \"title\": \"红色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405856965332585764\",\n    \"title\": \"多色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7173927171881323789\",\n    \"title\": \"3D腮绿\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431429108791266611\",\n    \"title\": \"黄色渐变纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404772432323546422\",\n    \"title\": \"黄绿色立体纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371117571757641011\",\n    \"title\": \"白字橘色描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7378313478852906280\",\n    \"title\": \"蓝色纹理白描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7388024664980770060\",\n    \"title\": \"桃红色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404058441481866511\",\n    \"title\": \"潮酷粉黄撞色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7345391635267603753\",\n    \"title\": \"复古镂空花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405944611430092066\",\n    \"title\": \"粉黄渐变立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7392196588426382629\",\n    \"title\": \"绿橙花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406225575712443663\",\n    \"title\": \"中式背景框文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7366911458824752410\",\n    \"title\": \"彩色花边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7539491294188440857\",\n    \"title\": \"节日粉色渐变立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7476505479364201753\",\n    \"title\": \"黄绿综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405039371037986089\",\n    \"title\": \"抹茶绿多层描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407013513979251978\",\n    \"title\": \"粉紫色渐变立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7475276656626863385\",\n    \"title\": \"红粉色渐变立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7543043727103675673\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265614497119735040\",\n    \"title\": \"粉色亮晶晶花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7336859597287804169\",\n    \"title\": \"樱花粉 粉色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405924713400126747\",\n    \"title\": \"蓝绿立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7293778917603822848\",\n    \"title\": \"万圣紫色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7350157127207456037\",\n    \"title\": \"3D粉色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7542084187285703998\",\n    \"title\": \"粉蓝色渐变爱心底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7359406447718862131\",\n    \"title\": \"五一立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7409954407321783586\",\n    \"title\": \"粉色紫边立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7537970908221394238\",\n    \"title\": \"立体黄蓝纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403948957547760906\",\n    \"title\": \"3D粉色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7312845270671232294\",\n    \"title\": \"浅蓝黄渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7480506672746794264\",\n    \"title\": \"复古红色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431433243922107689\",\n    \"title\": \"绿色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7411406288350874917\",\n    \"title\": \"美妆纹理\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404294636656774451\",\n    \"title\": \"黄绿花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404705863442713910\",\n    \"title\": \"糖果色彩色渐变描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7298637894481169701\",\n    \"title\": \"粉色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7252284645998464288\",\n    \"title\": \"蓝色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7339054041458036006\",\n    \"title\": \"纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404307108625206563\",\n    \"title\": \"纹理复古深色字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404774919315197195\",\n    \"title\": \"红色描边黄色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404884426150235418\",\n    \"title\": \"白字黑边裂痕综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404394775664708901\",\n    \"title\": \"黄字红边立体粗描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405990788053683482\",\n    \"title\": \"国风水墨\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407352720815836443\",\n    \"title\": \"火焰立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405218557342059816\",\n    \"title\": \"红色描边纹理立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7495216846946274584\",\n    \"title\": \"蓝色渐变阴影立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405838293843070234\",\n    \"title\": \"红色立体纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7368685720325655817\",\n    \"title\": \"渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7360556929959087397\",\n    \"title\": \"纸质\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404520330502458674\",\n    \"title\": \"蓝白色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7547970729258519833\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7507097456283274520\",\n    \"title\": \"蓝色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404819849140063551\",\n    \"title\": \"黑白线条花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7482688482754694462\",\n    \"title\": \"愚人节立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406740764207713577\",\n    \"title\": \"中秋桂花花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7455608333563874585\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430822256806284594\",\n    \"title\": \"双十一红黄立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7459686003079630104\",\n    \"title\": \"金色渐变立体红边发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405031205877419305\",\n    \"title\": \"银色渐变描边发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7474543369054702910\",\n    \"title\": \"白色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405927551417306378\",\n    \"title\": \"蓝色渐变镂空描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405716848106310931\",\n    \"title\": \"蓝白立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371368226606943514\",\n    \"title\": \"白色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404877070158908698\",\n    \"title\": \"金红纸纹理发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241953374780804410\",\n    \"title\": \"橙白渐变花字 黑白描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405518341814668544\",\n    \"title\": \"云纹金箔字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7478934394141527358\",\n    \"title\": \"综艺风黄色渐变纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371410942061546803\",\n    \"title\": \"蓝红色立体综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7507460201549843736\",\n    \"title\": \"红金国风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404667171537767699\",\n    \"title\": \"黄色渐变描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7509041829556522265\",\n    \"title\": \"白纸纹理蓝阴影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406648659976260903\",\n    \"title\": \"国风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405933257776172314\",\n    \"title\": \"黑色拼贴方底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7360986749046213928\",\n    \"title\": \"描边字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7465177921276136766\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406200724171787574\",\n    \"title\": \"点金花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406693646592003366\",\n    \"title\": \"白字内发光蓝边字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371351770045484338\",\n    \"title\": \"米白厚底立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405529606859607347\",\n    \"title\": \"水墨红底白色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404709465209064745\",\n    \"title\": \"条纹纹理黄色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404872280662166834\",\n    \"title\": \"红色恐怖氛围纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7459675119116373272\",\n    \"title\": \"蓝色折纸\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7434560086166490418\",\n    \"title\": \"港风立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431445423283244297\",\n    \"title\": \"红色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404696990510042402\",\n    \"title\": \"黄色渐变立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7506829483878649150\",\n    \"title\": \"蓝莓奶酪\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7451570972550991166\",\n    \"title\": \"新年立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430745414313332006\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7447831886874938678\",\n    \"title\": \"25元旦-红花背景花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404523157400472869\",\n    \"title\": \"黑色金箔描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405537335850306853\",\n    \"title\": \"灰白水墨国风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405801186286259466\",\n    \"title\": \"科技感朋克发光立体标题花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405067510053211446\",\n    \"title\": \"田字格图案蜡笔纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406637506977877299\",\n    \"title\": \"黄红撞色立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405203982286720256\",\n    \"title\": \"中式背景文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7472013339640614206\",\n    \"title\": \"日综蓝白方框字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7436409520848522546\",\n    \"title\": \"综艺蓝黄立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405514240779357449\",\n    \"title\": \"水墨风白字黑边红墨点花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7507075178447359282\",\n    \"title\": \"创意立体黄色花字高级感主题文字封面标题字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7509055757908806937\",\n    \"title\": \"白色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406683118108806437\",\n    \"title\": \"黄字黑边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7411036229677878554\",\n    \"title\": \"大理石花纹字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404409329991879988\",\n    \"title\": \"中秋黄色字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7481983816001834265\",\n    \"title\": \"综艺感黄色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7548895672402185497\",\n    \"title\": \"月饼花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406980293233560859\",\n    \"title\": \"蓝色渐变微立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371372494336396570\",\n    \"title\": \"白字橘色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404700217553063209\",\n    \"title\": \"几何纹理黑色阴影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7411046109285485861\",\n    \"title\": \"悬疑剧字幕\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7479073211918044441\",\n    \"title\": \"蓝色纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7369127125569342731\",\n    \"title\": \"划重点花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7533453859830713662\",\n    \"title\": \"橙色底纹花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405034038135655719\",\n    \"title\": \"雪花图案渐变蓝色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7455983000291937586\",\n    \"title\": \"蓝色渐变描边简约风格花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7495033287438781758\",\n    \"title\": \"黄色渐变橘色阴影立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7296357486490144036\",\n    \"title\": \"双十一-立体紫色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7533293069123390744\",\n    \"title\": \"黄色贴纸描边字效\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7283715592316554555\",\n    \"title\": \"渐变蓝色阴影\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405536862133046565\",\n    \"title\": \"黑白水墨花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405517504128273676\",\n    \"title\": \"复古黄沙水彩纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7461550488073538841\",\n    \"title\": \"红色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431460080228257039\",\n    \"title\": \"潮酷背景字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404391553164135715\",\n    \"title\": \"撞色描边字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406690026009972004\",\n    \"title\": \"紫色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431012567369125161\",\n    \"title\": \"冬季渐变蓝色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405414031072169250\",\n    \"title\": \"红黄复古浮雕纹理字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404702615671508263\",\n    \"title\": \"3D渐变橘红色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404522414941424923\",\n    \"title\": \"粉蓝渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7511273485730237758\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7491617722359565630\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405795232748490025\",\n    \"title\": \"黑紫星空花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430642926293732658\",\n    \"title\": \"冷色调简单花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371420451526020389\",\n    \"title\": \"金色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404507481205984539\",\n    \"title\": \"红色金箔纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405570848041487666\",\n    \"title\": \"黄蓝撞色纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7365356770652376330\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406353145938382130\",\n    \"title\": \"渐变圆底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7444510136296541465\",\n    \"title\": \"白字蓝粉相间底色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7505458612001852697\",\n    \"title\": \"综艺风黄色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430855417703435529\",\n    \"title\": \"蓝色纸张质感立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407037141584203059\",\n    \"title\": \"彩色带图案花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7481302843849329982\",\n    \"title\": \"红蓝橙描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407464175347272998\",\n    \"title\": \"红色印章花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7493107948286250302\",\n    \"title\": \"五一立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371414308770647346\",\n    \"title\": \"淡黄色渐变发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405931282632412442\",\n    \"title\": \"白色方底拼贴花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7548337425781935422\",\n    \"title\": \"红金立体国风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405492993878281510\",\n    \"title\": \"暗黑金泼墨风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7545366362924043582\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7442261279013604644\",\n    \"title\": \"红色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7506868020917226777\",\n    \"title\": \"金色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405152529522101531\",\n    \"title\": \"橙色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7412523765768178944\",\n    \"title\": \"红色锈迹文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7398455661513674035\",\n    \"title\": \"紫色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7398454655505763593\",\n    \"title\": \"黄色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406687421921791282\",\n    \"title\": \"黑色渐变白蓝描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7506872589642665240\",\n    \"title\": \"端午61立体字效\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405120470477065507\",\n    \"title\": \"黄色立体文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431452163181792524\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7236984607575461154\",\n    \"title\": \"炫彩模糊花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7494656119529393470\",\n    \"title\": \"五四青年立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406389812925680933\",\n    \"title\": \"复古方底立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7467033569848839486\",\n    \"title\": \"喜庆花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7546585357555649816\",\n    \"title\": \"中秋黄白立体字效\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403927160563551528\",\n    \"title\": \"黄蓝色立体综艺描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405229843220106534\",\n    \"title\": \"白紫色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7372363920864005386\",\n    \"title\": \"金色渐变立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7547731905500794174\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7471910410766109977\",\n    \"title\": \"蓝色描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7505771535878098200\",\n    \"title\": \"黄色白色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406364344176414003\",\n    \"title\": \"渐变色白边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403728040653573387\",\n    \"title\": \"橘猫花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7409333268195101979\",\n    \"title\": \"综艺字立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7455529495043525950\",\n    \"title\": \"红橘新年花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7449034603760749839\",\n    \"title\": \"红包花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7231489008126266679\",\n    \"title\": \"花字 经典黄色加深蓝经典配色凸显文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7519880279205448984\",\n    \"title\": \"橙色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371415414817000754\",\n    \"title\": \"淡蓝色渐变发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406385391265156362\",\n    \"title\": \"紫色双层描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7455254263888104766\",\n    \"title\": \"新年红金花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7357027100324367627\",\n    \"title\": \"晕染蓝\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431440010152316169\",\n    \"title\": \"黑色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7360540744035142953\",\n    \"title\": \"拼贴绿\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404370982238014747\",\n    \"title\": \"橘黄色波点渐变发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403764204420730122\",\n    \"title\": \"红黄白多层渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7364604452323495204\",\n    \"title\": \"蓝色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404415905066782004\",\n    \"title\": \"黄绿高饱和多重描边字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400335293565455679\",\n    \"title\": \"粉色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430397468082228543\",\n    \"title\": \"简约雪纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7450496790354234674\",\n    \"title\": \"白字红边重影风格花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7385227292521418018\",\n    \"title\": \"蓝色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7366060581410901286\",\n    \"title\": \"粉蓝色渐变立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405831511003417871\",\n    \"title\": \"黄色奶酪字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406673678412418354\",\n    \"title\": \"彩虹色描边白字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406360821216988416\",\n    \"title\": \"橙黄色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430856547934211379\",\n    \"title\": \"蓝色纸张质感黄底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7533174868930645273\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7474476846223101209\",\n    \"title\": \"粉色爱心立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406335734044577035\",\n    \"title\": \"蓝色纹理立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7360960769703398695\",\n    \"title\": \"拼贴浅红\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7359358208286215464\",\n    \"title\": \"红色花字 \",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7347989608908606783\",\n    \"title\": \"故障字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7538998611628084542\",\n    \"title\": \"橙色秋叶立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7546423084874599705\",\n    \"title\": \"国庆黄红立体字效\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7548711671317974334\",\n    \"title\": \"黄红渐变纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7538711238725946649\",\n    \"title\": \"黄橙玻璃质感秋日花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406380674057358642\",\n    \"title\": \"复古黄色方底背景\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7539626317688425753\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7548813025013419289\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7540868241737141529\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7546349045032439102\",\n    \"title\": \"立体桔黄\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7538719944897236286\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7509793945480613144\",\n    \"title\": \"618黑边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7508042807811280190\",\n    \"title\": \"综艺风红色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7509930498681163032\",\n    \"title\": \"高考立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7545871911138577726\",\n    \"title\": \"糖炒栗子\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7540131523937357118\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7546127896943840536\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7546131418620071192\",\n    \"title\": \"斜纹花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7507853100984667416\",\n    \"title\": \"黄色渐变蓝色描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7527398816782454040\",\n    \"title\": \"三原色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7546032665510841662\",\n    \"title\": \"糖炒栗子\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7544777148205190425\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7511339634761420057\",\n    \"title\": \"黄色纹理蓝棕色阴影描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7533092158820142360\",\n    \"title\": \"橙色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7532701961364278553\",\n    \"title\": \"立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7535694140227456280\",\n    \"title\": \"毛绒字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7506898516468370750\",\n    \"title\": \"我的潮流指南\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7507101495339568446\",\n    \"title\": \"蓝莓奶酪\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7495312625169911065\",\n    \"title\": \"综艺风蓝色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7477620313522703678\",\n    \"title\": \"彩铅渐变黄色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7474582555853901080\",\n    \"title\": \"彩色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7480089681586130238\",\n    \"title\": \"膨胀感字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7492216396290542873\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7507526398710435097\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7482733632910675262\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7236599551984028939\",\n    \"title\": \"蓝紫色混合花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7481665617796369689\",\n    \"title\": \"蓝色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7477756249665342744\",\n    \"title\": \"彩铅渐变粉色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260020603044826427\",\n    \"title\": \"渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7506874577159572755\",\n    \"title\": \"绿色花字发光\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7350563191123938611\",\n    \"title\": \"可爱彩色涂鸦花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7508005459065097497\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7507082793592032536\",\n    \"title\": \"粉色闪闪芭比花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7469677410414382398\",\n    \"title\": \"粉色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7509757725908225304\",\n    \"title\": \"马卡龙\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7348369625215749388\",\n    \"title\": \"发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403964791372533027\",\n    \"title\": \"粉笔字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7508363172798270744\",\n    \"title\": \"蓝白\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7477149973520583961\",\n    \"title\": \"黄绿渐变立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7495692617561181502\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7494493486155042110\",\n    \"title\": \"多层描边彩色多巴胺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7492310644704841022\",\n    \"title\": \"蓝粉\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7507164704448679193\",\n    \"title\": \"节日绿色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7347171058488823066\",\n    \"title\": \"蓝绿色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405934415567736074\",\n    \"title\": \"粉色立体拼贴花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7492411773329476889\",\n    \"title\": \"彩色描边立体可爱花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7492716248091004222\",\n    \"title\": \"绿色立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7471905506001669401\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7479683834464898329\",\n    \"title\": \"春日综艺感渐变纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7478608447794187582\",\n    \"title\": \"绿紫黄紫立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7480097920361073945\",\n    \"title\": \"膨胀感字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403676308145802522\",\n    \"title\": \"立体综艺花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7405202500493610275\",\n    \"title\": \"白色纹理描边花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7441152469352090889\",\n    \"title\": \"复古淡黄花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7405564299122429219\",\n    \"title\": \"白色发光字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7403679510702378278\",\n    \"title\": \"黄色渐变立体白描边花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7403960732490157364\",\n    \"title\": \"白字红边立体字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7405107629137186082\",\n    \"title\": \"蓝色立体字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7410649194110733602\",\n    \"title\": \"美拉德立体文字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7404477237837270299\",\n    \"title\": \"绿色立体通用花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7405105991651544360\",\n    \"title\": \"绿色镂空透明文字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7405410790867586344\",\n    \"title\": \"绿色描边投影字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7405203773066415360\",\n    \"title\": \"绿色透明纹理花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7543157780769803582\",\n    \"title\": \"综艺火焰\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7347967906669415716\",\n    \"title\": \"系统故障字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7532041202787487038\",\n    \"title\": \"蓝色黄色渐变立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127670164996328740\",\n    \"title\": \"综艺 黄色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260340249581128996\",\n    \"title\": \"黑白黄色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405896759987227931\",\n    \"title\": \"红色火焰燃烧花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160595602236116232\",\n    \"title\": \"复古紫光蓝色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7494932494253608216\",\n    \"title\": \"综艺风蓝色描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7411046111760125211\",\n    \"title\": \"喷溅红立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7313160248175398154\",\n    \"title\": \"红黄渐变纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403899942944705819\",\n    \"title\": \"白字蓝框综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7205144150390443301\",\n    \"title\": \"美食-金色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406328633205312820\",\n    \"title\": \"红色火焰字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404690754590821632\",\n    \"title\": \"镂空发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405902936175381787\",\n    \"title\": \"蓝色纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7310113812168871177\",\n    \"title\": \"白色质感纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430781079058976026\",\n    \"title\": \"黄色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7448962185159609625\",\n    \"title\": \"综艺立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7494493305716378905\",\n    \"title\": \"五一复古立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7264501278175202572\",\n    \"title\": \"好物美妆-双层投影\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7350578203905232166\",\n    \"title\": \"白字绿底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406249723423640871\",\n    \"title\": \"渐变错位花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7474546033763224894\",\n    \"title\": \"彩色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406866881144966409\",\n    \"title\": \"像素格背景字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404777689518738728\",\n    \"title\": \"橙黄渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7342020000812731658\",\n    \"title\": \"彩色手绘线条花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7262979013637967119\",\n    \"title\": \"立体麻布花纹字体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406013385969569062\",\n    \"title\": \"红色渐变波点底纹立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7478945314318241086\",\n    \"title\": \"综艺风蓝色渐变纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404293089377930536\",\n    \"title\": \"高饱和彩虹字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404132140365008179\",\n    \"title\": \"3D蓝红色立体综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7272729157895769355\",\n    \"title\": \"音乐节-杂点黄字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7343806780583038247\",\n    \"title\": \"拼贴位移字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7347548073897364746\",\n    \"title\": \"彩色立体底框花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7495656020006669592\",\n    \"title\": \"综艺风蓝色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7230694221513035020\",\n    \"title\": \"黑字底红光\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405947244395924770\",\n    \"title\": \"海浪卡通立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7261598257762045219\",\n    \"title\": \"浪花紫\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405953030996184335\",\n    \"title\": \"裂纹立体文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406307881865301258\",\n    \"title\": \"漫画层叠花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403686755486010634\",\n    \"title\": \"节点营销直播主题立体字蓝色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7251715329162841347\",\n    \"title\": \"黑色立体投影紫色发光镭射纹理花字  艺术字体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405563025169632562\",\n    \"title\": \"复古白蓝色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430816571443940659\",\n    \"title\": \"爆款热卖\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403937403397885184\",\n    \"title\": \"蓝紫渐变多重投影字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404868077101255988\",\n    \"title\": \"综艺白色立体描边纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7547984081930161470\",\n    \"title\": \"红金渐变国风立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7409964157296020751\",\n    \"title\": \"立体字粉色背景\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7330165240576970021\",\n    \"title\": \"金色渐变红底立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431487397017226507\",\n    \"title\": \"热销字体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7343541738537061651\",\n    \"title\": \"位移字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7205148909730024762\",\n    \"title\": \"美食-立体描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404037981952068879\",\n    \"title\": \"格子背景双色字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7174051263578000678\",\n    \"title\": \"落日鸡尾酒\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7187622568717749565\",\n    \"title\": \"春节-半透明\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241429233287925044\",\n    \"title\": \"黑色综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405060175322795276\",\n    \"title\": \"白/黄方块图案质感花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7284906593399950647\",\n    \"title\": \"时尚黑蓝粉\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403911656587234597\",\n    \"title\": \"3D蓝色渐变综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241398402125253903\",\n    \"title\": \"白色蓝色描边红色荧光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371129776494365990\",\n    \"title\": \"白色仿3D立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406357450166635776\",\n    \"title\": \"蓝色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404701167156088116\",\n    \"title\": \"破碎裂开文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7270881305070423356\",\n    \"title\": \"黄边黑字立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405886722011172150\",\n    \"title\": \"立体星星花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405917295421263158\",\n    \"title\": \"多色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7481488244421741848\",\n    \"title\": \"立体方块花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7252151198805986572\",\n    \"title\": \"水墨纹花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7529442177953352985\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7368858909295136010\",\n    \"title\": \"白字蓝底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430724518248729919\",\n    \"title\": \"橙色纹理立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407014154613116210\",\n    \"title\": \"红黄绿复古花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404037530980453647\",\n    \"title\": \"橙黄色渐变立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404380953893735714\",\n    \"title\": \"潮酷薄膜纹理字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265614510084443444\",\n    \"title\": \"粉色贝壳光泽花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7348679900477279507\",\n    \"title\": \"四色蜡笔花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404828145255288075\",\n    \"title\": \"蓝色立体描边发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7510183639066627352\",\n    \"title\": \"限时抢购\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404883759012597030\",\n    \"title\": \"游戏综艺风蓝色波点渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7334687695660272947\",\n    \"title\": \"紫色梦幻   白字紫底红醒目花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7435551949266701580\",\n    \"title\": \"蓝色渐变综艺\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7289732660077874491\",\n    \"title\": \"黑色粉色阴影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7259399609452088637\",\n    \"title\": \"黑体蓝紫边发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405546666498985227\",\n    \"title\": \"粉笔涂鸦花字（教师节）\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430667612146666764\",\n    \"title\": \"可爱花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431814893415812362\",\n    \"title\": \"黑粉甜酷拼贴文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7506818824885390616\",\n    \"title\": \"彩色立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7328771445960592640\",\n    \"title\": \"浅棕色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7543482227871599896\",\n    \"title\": \"蓝红蜡笔质感纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7410369831503006988\",\n    \"title\": \"黄色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404072480870026534\",\n    \"title\": \"综艺风方块背景立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7252116303329217824\",\n    \"title\": \"彩色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7482027387266469145\",\n    \"title\": \"综艺感蓝色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406321401969364264\",\n    \"title\": \"彩色透明花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7369415539795529012\",\n    \"title\": \"橙色蓝色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406010573961317670\",\n    \"title\": \"黑字黄绿拼贴花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7504864758944927001\",\n    \"title\": \"蓝橙白立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7435272797611429172\",\n    \"title\": \"黄蓝撞色描边字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407015583444782375\",\n    \"title\": \"玫粉黑花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405183112906378522\",\n    \"title\": \"芭比粉背景白字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407047445240139071\",\n    \"title\": \"万圣节多色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406318872862674185\",\n    \"title\": \"复古风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7231502419723603239\",\n    \"title\": \"深红白边黄影立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431429796434890021\",\n    \"title\": \"APT花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7270171712136776997\",\n    \"title\": \"粉底黄边黑色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405789476561095986\",\n    \"title\": \"未来科技感立体厚重标题花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405944078992559411\",\n    \"title\": \"白字带描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7411583332707863835\",\n    \"title\": \"美妆方底\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7337839774079798566\",\n    \"title\": \"酒红风格   黄字酒红底色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406589254157061439\",\n    \"title\": \"多色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405065396648283455\",\n    \"title\": \"黄绿撕纸拼贴质感花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405186414284999971\",\n    \"title\": \"橙黄色立体霓虹花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7544660134732057881\",\n    \"title\": \"黄色渐变粉色花朵底纹立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7348639844198878515\",\n    \"title\": \"青团底纹花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7382058294157774107\",\n    \"title\": \"黄蓝渐变立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7252346023656394042\",\n    \"title\": \"紫色描边发光小字体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404290790391860530\",\n    \"title\": \"粉蓝色渐变黑边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406979682911931657\",\n    \"title\": \"红色渐变黄绿描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7411563961381817610\",\n    \"title\": \"美妆拼贴\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404883418774818086\",\n    \"title\": \"游戏综艺风黄红紫渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430759634757061926\",\n    \"title\": \"彩色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7543299507744967960\",\n    \"title\": \"蓝橙波点纹理玻璃质感立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406011366865161481\",\n    \"title\": \"蓝色纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404009350399937792\",\n    \"title\": \"放射背景字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406011150829194546\",\n    \"title\": \"白字黄绿拼贴花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7548102481977593113\",\n    \"title\": \"夏日蓝描边立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405537186436648201\",\n    \"title\": \"白色国风水墨花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405530102324415807\",\n    \"title\": \"金箔纹理阴影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405519026367122727\",\n    \"title\": \"书法墨迹白色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405512855434382611\",\n    \"title\": \"泼墨书法纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7475566213477977368\",\n    \"title\": \"红色斑驳\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7546579616576720152\",\n    \"title\": \"红色立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405499580399357210\",\n    \"title\": \"金色质感立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406643508242582825\",\n    \"title\": \"国风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405516433863511348\",\n    \"title\": \"黑白水墨字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7435884430620691739\",\n    \"title\": \"复古红色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406646658768882983\",\n    \"title\": \"国风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405497799036407090\",\n    \"title\": \"水墨风晕染花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405510219633036555\",\n    \"title\": \"白金花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7483351934074817817\",\n    \"title\": \"古风质感花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405504415408409865\",\n    \"title\": \"暗黑系红色火焰纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405500731253411108\",\n    \"title\": \"红金国风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405517111231073575\",\n    \"title\": \"点墨金银花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404078955344448777\",\n    \"title\": \"春节新年福字背景花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405512551879970067\",\n    \"title\": \"银色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405501851887586611\",\n    \"title\": \"红色暗黑花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406643758231571766\",\n    \"title\": \"国风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405506413524569363\",\n    \"title\": \"黑红渐变立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405527291209469196\",\n    \"title\": \"书法水痕阴影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405534702221790515\",\n    \"title\": \"水墨背景白色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405499186109533494\",\n    \"title\": \"国风金红花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7507132514088062233\",\n    \"title\": \"红金国风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405498270568418611\",\n    \"title\": \"黑白水墨花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405503477444644106\",\n    \"title\": \"暗黑红色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405513478645091636\",\n    \"title\": \"暗黑墨迹字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405879747340700937\",\n    \"title\": \"青绿色水墨风古典边框花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405514792724745484\",\n    \"title\": \"水墨书法纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405500890620120358\",\n    \"title\": \"黑灰色质感立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405494488019275059\",\n    \"title\": \"暗黑火焰红边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405528972135583030\",\n    \"title\": \"暗红色墨痕书法花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405504097429867815\",\n    \"title\": \"银色国风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405524745959034124\",\n    \"title\": \"书法墨环图案花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7405523665145613631\",\n    \"title\": \"金箔描边书法水墨花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127823728267791647\",\n    \"title\": \"综艺金色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160598356237012261\",\n    \"title\": \"潮酷发光立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160595759375666446\",\n    \"title\": \"潮酷金色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7269602984844102947\",\n    \"title\": \"光芒万丈\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160596923781598472\",\n    \"title\": \"综艺立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7205150731035266341\",\n    \"title\": \"美食-渐变小字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406007163417529638\",\n    \"title\": \"金色渐变立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127655008715296031\",\n    \"title\": \"粉色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403924857282432271\",\n    \"title\": \"粉色发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7346895765458947366\",\n    \"title\": \"蓝色发光\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7179606734166592825\",\n    \"title\": \"元旦透明燥点花字-2022元旦\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406005354070379802\",\n    \"title\": \"红色渐变黄色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7408957503892884774\",\n    \"title\": \"蓝色霓虹灯发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404896582182767908\",\n    \"title\": \"黄色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7459717947620363582\",\n    \"title\": \"金色渐变立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404751791503576339\",\n    \"title\": \"蓝色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7174330567222185253\",\n    \"title\": \"圣诞红白条\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127839722893774087\",\n    \"title\": \"粉色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160597532043644174\",\n    \"title\": \"潮酷白色发光立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160596088011951373\",\n    \"title\": \"综艺立体渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7273017604837625151\",\n    \"title\": \"黄色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7346916622247955763\",\n    \"title\": \"发光\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7179634097906519356\",\n    \"title\": \"闪光的新年花字-2022元旦\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265622933702184232\",\n    \"title\": \"红色渐变描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7362142403416952115\",\n    \"title\": \"粉色发光\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7322482076958149914\",\n    \"title\": \"霓虹灯黄红发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7179628047832730941\",\n    \"title\": \"洒金粉花字-2022元旦\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7179616970399124795\",\n    \"title\": \"元旦透明飘雪花字-2022元旦\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7281951975275597114\",\n    \"title\": \"浅蓝色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405197593808096527\",\n    \"title\": \"红色内发光文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7240995033393007931\",\n    \"title\": \"克莱因蓝发光字体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403941808302066979\",\n    \"title\": \"红黄配色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7128327279804976397\",\n    \"title\": \"红色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241397134128352551\",\n    \"title\": \"黄色橙色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404014524900199706\",\n    \"title\": \"霓虹灯发光红黄花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7312709252928277812\",\n    \"title\": \"薄荷冰花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241480073759575357\",\n    \"title\": \"荧光绿炫酷字体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260439366953110825\",\n    \"title\": \"渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7245610210386136357\",\n    \"title\": \"烟雾纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7243255465822506255\",\n    \"title\": \"红配蓝发光炫酷字体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160595918226525453\",\n    \"title\": \"潮酷发光立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406289529096719625\",\n    \"title\": \"电商节日直播贴片标题立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7336848964819504434\",\n    \"title\": \"渐变 蓝紫色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241432857447583028\",\n    \"title\": \"蓝色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241389070943866164\",\n    \"title\": \"黄色字荧光描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265621281838533923\",\n    \"title\": \"粉色渐变描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7322679348106906918\",\n    \"title\": \"圆环发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265622422022262051\",\n    \"title\": \"绿色渐变描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7390410514976804122\",\n    \"title\": \"白紫立体发光\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7266447274115419449\",\n    \"title\": \"甜粉\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7408956912089206067\",\n    \"title\": \"红色霓虹灯发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7266696486363106616\",\n    \"title\": \"金色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404503527617301770\",\n    \"title\": \"空心白色描边发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351422706086169866\",\n    \"title\": \"白字蓝光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404047060221037851\",\n    \"title\": \"亮黄字橙色描边发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7434806614781168947\",\n    \"title\": \"冬季发光\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7231824394559982886\",\n    \"title\": \"黄的红边花字重叠\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405056348200684827\",\n    \"title\": \"渐变彩虹色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7322881735522290995\",\n    \"title\": \"霓虹灯发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7391283375606156585\",\n    \"title\": \"绿色纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7322678574719339802\",\n    \"title\": \"红色霓虹灯发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7266724384205786427\",\n    \"title\": \"星空\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7212896736849841467\",\n    \"title\": \"美食-中间渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7259709733790125366\",\n    \"title\": \"夏日的亮丽 \",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7274035971207744824\",\n    \"title\": \"纯黑底色，荧光绿和黑色描边 立体 发光 花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241392284686683395\",\n    \"title\": \"黄色蓝色发发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241477841567649080\",\n    \"title\": \"梦幻蓝紫色简约渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241410291521670400\",\n    \"title\": \"红色荧光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7390315130128452890\",\n    \"title\": \"彩色发光立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404001083665812771\",\n    \"title\": \"黄色渐变发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"6926827744189779207\",\n    \"title\": \"发光灯箱感红色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7322422789355392265\",\n    \"title\": \"霓虹灯发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7231468045976292645\",\n    \"title\": \"黑色红边柔光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404385123975613706\",\n    \"title\": \"粉色渐变温柔发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241393396575735040\",\n    \"title\": \"渐变紫色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7243262147210267944\",\n    \"title\": \"红配绿发光拼色字体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7273831317136035133\",\n    \"title\": \"黑底荧光绿描边 发光 花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7322380988430994715\",\n    \"title\": \"霓虹灯发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403932533995425039\",\n    \"title\": \"绿字蓝白描边荧光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7494822504427539737\",\n    \"title\": \"粉色渐变双层立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7411034104415685939\",\n    \"title\": \"东南亚渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241398727125011746\",\n    \"title\": \"蓝色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404089520070593843\",\n    \"title\": \"黄红色霓虹灯镂空发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403922592194710834\",\n    \"title\": \"粉色渐变圆圈\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7248870704752397579\",\n    \"title\": \"紫色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7361004787967495462\",\n    \"title\": \"粉色发光\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260373127249595687\",\n    \"title\": \"纯色黄色字体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403992509212314920\",\n    \"title\": \"紫色发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7496497861224516926\",\n    \"title\": \"粉色闪粉星光闪闪发光划走\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7270129109974469945\",\n    \"title\": \"绿底黑边黄色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7264481843301354813\",\n    \"title\": \"简约蓝\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241230847741791521\",\n    \"title\": \"花粉绿\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404070348263607603\",\n    \"title\": \"粉色发光立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406241968847670569\",\n    \"title\": \"绿色渐变立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7291429737774255412\",\n    \"title\": \"粉色糖果风格花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7355608527144062217\",\n    \"title\": \"紫色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7238624559178485031\",\n    \"title\": \"渐变发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405916937353465128\",\n    \"title\": \"荧光绿线条发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7270718850256211259\",\n    \"title\": \"渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7274771737999379749\",\n    \"title\": \"粉色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404388775264030003\",\n    \"title\": \"粉色闪粉白色描边发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405417769446968610\",\n    \"title\": \"紫红发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7248130865094561036\",\n    \"title\": \"彩色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241415162345852194\",\n    \"title\": \"绿色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7275250557386788156\",\n    \"title\": \"条纹黄色综艺发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404321217110396187\",\n    \"title\": \"梦幻紫星光双层立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7529808923725925657\",\n    \"title\": \"粉色闪闪\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405939554047233295\",\n    \"title\": \"荧光线条发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7327845943305358646\",\n    \"title\": \"机械装甲绿色科技感文字标题\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404100687820229922\",\n    \"title\": \"发光灯箱感绿色描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7259233733964811572\",\n    \"title\": \"白花纹发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7334225752663149850\",\n    \"title\": \"清新绿色 绿色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7334229773402606886\",\n    \"title\": \"浅绿色 绿色花字底发光\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7249749880611015988\",\n    \"title\": \"夏日青春派对\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406201706456960256\",\n    \"title\": \"紫色发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404708538926353700\",\n    \"title\": \"白色描边芭比粉发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7232089500518862140\",\n    \"title\": \"花字-雪花彩粉渐变立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405875861712342307\",\n    \"title\": \"赛博朋克纹理发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7281283804235402533\",\n    \"title\": \"浅梦幻少女色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404330497574309129\",\n    \"title\": \"彩色镭射渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7245923862574009635\",\n    \"title\": \"紫色发光立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404021791427005723\",\n    \"title\": \"薄荷绿花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241393660334574848\",\n    \"title\": \"青色 红色 荧光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351303614104636699\",\n    \"title\": \"绿色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241904291722693944\",\n    \"title\": \"紫宝石\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241388504381541666\",\n    \"title\": \"粉橙色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260122300564000012\",\n    \"title\": \"格子纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7297906734755073319\",\n    \"title\": \"复古格子清新蓝花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7231501962041117955\",\n    \"title\": \"深绿色黑边紫光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7291157036098735401\",\n    \"title\": \"紫色粉边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"6896138122774514951\",\n    \"title\": \"清新蓝色发光花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127615338035924238\",\n    \"title\": \"潮酷 白色橙边\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7166445713029729568\",\n    \"title\": \"简约白色发光立体花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896141886055107854\",\n    \"title\": \"超酷发光镂空花字、潮人必备\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896141886055091470\",\n    \"title\": \"潮酷蓝色发光镂空花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127654126997048607\",\n    \"title\": \"综艺 橙色\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896138122774531335\",\n    \"title\": \"清新粉色发光灯箱感花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896141886055058702\",\n    \"title\": \"炫彩发光跳色花字，\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127817897061125413\",\n    \"title\": \"潮酷 橙色\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6926796566346960141\",\n    \"title\": \"潮酷黄色霓虹灯花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6926825801258126599\",\n    \"title\": \"红色镂空发光花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6926827744189795591\",\n    \"title\": \"潮酷蓝色霓虹灯发光花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7187616139642522936\",\n    \"title\": \"潮酷黄底白色发光立体花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6927159112887176459\",\n    \"title\": \"蓝色镂空发光花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127819154018602277\",\n    \"title\": \"潮酷 白色粉边\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6926825801258159367\",\n    \"title\": \"暗黑潮酷黑色花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896143968241798408\",\n    \"title\": \"超酷黄色发光花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127680616283295006\",\n    \"title\": \"小清新 白色\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7405565480678739200\",\n    \"title\": \"黄色发光字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896141886055075086\",\n    \"title\": \"炫彩发光花字，跳字变色\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896144021568179469\",\n    \"title\": \"发光灯箱感绿色花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6926825801384021256\",\n    \"title\": \"潮酷黄色发光花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127827287826779428\",\n    \"title\": \"复古 红色\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7404088879780826406\",\n    \"title\": \"赛博朋克未来科技感立体发光花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6927160254996253967\",\n    \"title\": \"红色潮酷外发光花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6927160144421866752\",\n    \"title\": \"红色朦胧港风复古花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127675252410289445\",\n    \"title\": \"Y2k粉色立体灯箱发光花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896143968241782024\",\n    \"title\": \"潮酷粉色发光镂空花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7197333872466611513\",\n    \"title\": \"梦幻粉色发光立体花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127669605199351048\",\n    \"title\": \"潮酷发光青色\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7403926640260123944\",\n    \"title\": \"黄橙渐变黑红描边立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430703360409554212\",\n    \"title\": \"蓝色纹理立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407014765907774747\",\n    \"title\": \"黄色渐变红边发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160596855456320776\",\n    \"title\": \"潮酷发光立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7317088712154696969\",\n    \"title\": \"立体金属字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7244940532298829090\",\n    \"title\": \"黑金色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7281947750139219257\",\n    \"title\": \"黑灰色花字【严肃】\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7212896770370587941\",\n    \"title\": \"美食-黄网格\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7388020661312146751\",\n    \"title\": \"金属灰渐变立体白边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260358084772547903\",\n    \"title\": \"一窝时光标题花字字体设计美食海报大气简约醒目小龙虾\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405125461438762267\",\n    \"title\": \"蓝色渐变3D立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7274581371975142710\",\n    \"title\": \"立体效果\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7212897121249283383\",\n    \"title\": \"美食-金色网格\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160599091750145287\",\n    \"title\": \"土酷蓝色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7220003213171281192\",\n    \"title\": \"蓝色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265625223381273891\",\n    \"title\": \"黄色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7493083674158796094\",\n    \"title\": \"黄色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7369091570345282866\",\n    \"title\": \"黄白涂鸦花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7224762483448237345\",\n    \"title\": \"黑灰渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7369985913310448911\",\n    \"title\": \"彩色渐变描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7439987370033728807\",\n    \"title\": \"黄色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405889740081237285\",\n    \"title\": \"橘黄色渐变波点底纹立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431533312738348314\",\n    \"title\": \"大雪渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7268912246900772135\",\n    \"title\": \"黑白配\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7252679635027168567\",\n    \"title\": \"美食-黄白跳色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7511237110914125080\",\n    \"title\": \"蓝色渐变立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7212885712495070519\",\n    \"title\": \"美食-弹幕\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7264536942832848165\",\n    \"title\": \"蓝色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265622781008629032\",\n    \"title\": \"橘色渐变描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405056217225104681\",\n    \"title\": \"黄橙色渐变描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7328610126296796468\",\n    \"title\": \"金色渐变 金灿灿花字 富贵\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7491562659268119870\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7205151372805754167\",\n    \"title\": \"暗黑红黑渐立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404684532756073791\",\n    \"title\": \"粉色渐变红色底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7313119295792352539\",\n    \"title\": \"黄色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160601969629891847\",\n    \"title\": \"综艺立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7233363221497842977\",\n    \"title\": \"扁平化请新白蓝\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7187770975822433594\",\n    \"title\": \"春节-兔彩头-银色立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404899700970753321\",\n    \"title\": \"蓝色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7530918113899105561\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265298421341277452\",\n    \"title\": \"七夕-粉白渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7324218891222240522\",\n    \"title\": \"金色红底春节喜庆花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431462520835099955\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7324255228310654235\",\n    \"title\": \"金色渐变红底立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431549062475762959\",\n    \"title\": \"黄红渐变黑边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7205154202757172541\",\n    \"title\": \"美食-红黄渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7212896808798801213\",\n    \"title\": \"美食-划痕渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7330967545240964404\",\n    \"title\": \"蓝色渐变白色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7384325883584056617\",\n    \"title\": \"渐变蓝色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7391023993802804521\",\n    \"title\": \"红色描边双色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404880919582018854\",\n    \"title\": \"橙色渐变波点双层立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7312840128949505307\",\n    \"title\": \"浅蓝粉渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7399918916232826123\",\n    \"title\": \"紫色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7248118492111703357\",\n    \"title\": \"简约蓝色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405583007098195237\",\n    \"title\": \"黄蓝撞色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7369988046277594383\",\n    \"title\": \"彩色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7410717398510128424\",\n    \"title\": \"黄橘渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405253473299696931\",\n    \"title\": \"红色渐变透明花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7298358091664362793\",\n    \"title\": \"雪花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7205147811573271864\",\n    \"title\": \"美食-辣\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7493079330654899480\",\n    \"title\": \"黄白色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7369460089767480614\",\n    \"title\": \"彩色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406294702212877619\",\n    \"title\": \"白字霓虹灯渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7263267444020596005\",\n    \"title\": \"冬日寒冷发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405953290271198491\",\n    \"title\": \"彩色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406253347746876706\",\n    \"title\": \"黄绿渐变发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7383803879730842931\",\n    \"title\": \"黄色渐变描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7236638821901733175\",\n    \"title\": \"简约渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7505100141288901950\",\n    \"title\": \"黄色渐变橙蓝色描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127664822887402759\",\n    \"title\": \"白绿紫渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7391445684953681192\",\n    \"title\": \"蓝绿渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7376115629230673204\",\n    \"title\": \"紫色立体渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430709931411623204\",\n    \"title\": \"蓝色纹理发光立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265636111211449634\",\n    \"title\": \"黄色渐变双色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7285696655989411133\",\n    \"title\": \"蓝色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404026606869613864\",\n    \"title\": \"黄绿花纹立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404369195875487016\",\n    \"title\": \"星空梦幻炫彩立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7527575726220987672\",\n    \"title\": \"紫色 立体 渐变 花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241433848943365436\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404026005389708595\",\n    \"title\": \"蓝字彩虹渐变描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406640534036532490\",\n    \"title\": \"国风粉色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405867875317173516\",\n    \"title\": \"多色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371124565839301925\",\n    \"title\": \"蓝色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405949704904658203\",\n    \"title\": \"渐变白色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7366899343451852058\",\n    \"title\": \"黄色手绘蜡笔质感花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404710833344892196\",\n    \"title\": \"3D渐变绿色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7497111940762995993\",\n    \"title\": \"简约双层描边蓝色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430992115376704819\",\n    \"title\": \"五色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"6896143862222327047\",\n    \"title\": \"炫彩星空花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7482318463755734334\",\n    \"title\": \"美妆立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7481306716752219417\",\n    \"title\": \"忧郁蓝\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407010177842482459\",\n    \"title\": \"黑底纹粉渐变描边发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406359623545933093\",\n    \"title\": \"粉色渐变镂空描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7391015553818692927\",\n    \"title\": \"金色渐变描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404038278057332005\",\n    \"title\": \"白字花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7249649958297783589\",\n    \"title\": \"暗色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7296106361153293618\",\n    \"title\": \"双十一-彩色立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241433473796394255\",\n    \"title\": \"天蓝色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406232498734157090\",\n    \"title\": \"红色渐变立体文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404129182244031782\",\n    \"title\": \"粉色梦幻立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405578926489160998\",\n    \"title\": \"粉色渐变发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7369459252290718986\",\n    \"title\": \"彩色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7495776303799618878\",\n    \"title\": \"黄色渐变粉色阴影立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7388019320686693686\",\n    \"title\": \"低饱和蓝色渐变立体白边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7315437477425155368\",\n    \"title\": \"绿色渐变蓝紫色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7475023258228788505\",\n    \"title\": \"粉色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405837403782384906\",\n    \"title\": \"红色燃烧花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7460547039252909337\",\n    \"title\": \"春节喜庆金字红边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405244303586397476\",\n    \"title\": \"斜线纹理黑白漫画感花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7509039282737302808\",\n    \"title\": \"白纸纹理蓝边拼贴花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7545325777781280024\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7538694611150130457\",\n    \"title\": \"粉笔质感纸张花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405846768010661157\",\n    \"title\": \"黄色立体纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7488161196357487934\",\n    \"title\": \"像素化花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406014922078965001\",\n    \"title\": \"白色纸质纹理立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7492626374239243545\",\n    \"title\": \"黄红立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7482734426015730968\",\n    \"title\": \"像素化花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7480452404811615512\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405140394662530354\",\n    \"title\": \"金属质感硬朗立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407272554445999411\",\n    \"title\": \"冰雪大世界立体雪花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7449585330547625228\",\n    \"title\": \"不织布新年红\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404377624690101544\",\n    \"title\": \"复古纸张纹理字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7541849024001740056\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7482761022504275262\",\n    \"title\": \"像素化游戏花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405126783332404517\",\n    \"title\": \"未来科技感赛博斜体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406192655488519433\",\n    \"title\": \"复古格纹立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405853759911333172\",\n    \"title\": \"清爽冰块纹理字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7435107467366878503\",\n    \"title\": \"绿叶绿色纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7451442109753675070\",\n    \"title\": \"港风图案纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405824092479196431\",\n    \"title\": \"冰块立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405857800208928037\",\n    \"title\": \"蓝色星空花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405855842072808755\",\n    \"title\": \"红色纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7483893116274117950\",\n    \"title\": \"复古红轴\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7481535145284160792\",\n    \"title\": \"红黄质感立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405843250960993586\",\n    \"title\": \"蓝紫色发光纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7532883438072778008\",\n    \"title\": \"牛奶花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405870250916384015\",\n    \"title\": \"木纹雕刻立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7486311409861528894\",\n    \"title\": \"像素化花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405550386234281235\",\n    \"title\": \"粉笔黑板花字（教师节）\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7330983004631878964\",\n    \"title\": \"梦幻爱心纹理底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405693659536051492\",\n    \"title\": \"流光立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371332005948083494\",\n    \"title\": \"蓝色渐变DIY纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407265065272937778\",\n    \"title\": \"冬日冰花\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406984542742924582\",\n    \"title\": \"红色黑条纹字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406190866626366770\",\n    \"title\": \"蓝色天空纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404383053906267392\",\n    \"title\": \"荧光紫渐变字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405523650423639308\",\n    \"title\": \"红色洒墨花字（书法古风）\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405919974411242791\",\n    \"title\": \"蓝色渐变立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7306473747953863975\",\n    \"title\": \"圣诞-四色纹理\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7506817303296675123\",\n    \"title\": \"渐变纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7486231125992623385\",\n    \"title\": \"游戏像素化花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7471979945447836952\",\n    \"title\": \"花石榴\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405866412570348836\",\n    \"title\": \"紫色纹理描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404145370399329587\",\n    \"title\": \"蓝色毛毡绒毛立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430717597039054143\",\n    \"title\": \"紫色纹理立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405201103903624463\",\n    \"title\": \"粉笔蓝白色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7546407203654159678\",\n    \"title\": \"绿粉圈圈纹理综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405573811107663155\",\n    \"title\": \"红色棋盘格纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7477911542575516952\",\n    \"title\": \"方块游戏花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406205168200568115\",\n    \"title\": \"彩色纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405201692775451904\",\n    \"title\": \"绿色粉笔描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406173713428745509\",\n    \"title\": \"3D蓝粉色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405864219809287433\",\n    \"title\": \"红砖纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405917544126647602\",\n    \"title\": \"蓝黄拼色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7481938079507418430\",\n    \"title\": \"红色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405856104946748723\",\n    \"title\": \"光影立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404891005968747802\",\n    \"title\": \"镭射荧光酸性纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405104737386892584\",\n    \"title\": \"潮酷镭射立体文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7480467236327820606\",\n    \"title\": \"绿色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7482727212375035160\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405130183306415397\",\n    \"title\": \"芭比闪粉星光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405647754199895305\",\n    \"title\": \"黄绿格纹立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7442563568295218441\",\n    \"title\": \"青草绿纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405919944526892315\",\n    \"title\": \"粉蓝格纹立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405860859177717032\",\n    \"title\": \"双色纹理立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405844279479913766\",\n    \"title\": \"绿色波点纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405245402917735691\",\n    \"title\": \"粉色纹理多层阴影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7542359139469626649\",\n    \"title\": \"粉橙色条纹纹理立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405645973613022515\",\n    \"title\": \"粉黄纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406387389809069321\",\n    \"title\": \"粉色格纹立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404875825729850659\",\n    \"title\": \"黄色纹理描边发光花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7410762405778705715\",\n    \"title\": \"毛笔质感\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7321972094949018921\",\n    \"title\": \"春节-立体红白\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7457575657376238910\",\n    \"title\": \"春节火焰\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404876992962759999\",\n    \"title\": \"红色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404314496833015077\",\n    \"title\": \"红色渐变裂痕综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7401445200071003404\",\n    \"title\": \"红色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405812611427749158\",\n    \"title\": \"白色纹理红色字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403692022239956274\",\n    \"title\": \"白字红蓝描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7270171000652696893\",\n    \"title\": \"红色黑边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7328997429544488244\",\n    \"title\": \"重阴影红白渐变黑描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7294156228794535207\",\n    \"title\": \"万圣-血滴字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7462945508533931288\",\n    \"title\": \"开工立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404769759432084748\",\n    \"title\": \"红色白色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403672172897553715\",\n    \"title\": \"红纹理立体白描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7329003799433973027\",\n    \"title\": \"多层红色渐变描边黑色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7294182924587502889\",\n    \"title\": \"万圣-红木板字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7489037914584681790\",\n    \"title\": \"像素化花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7294992987908541715\",\n    \"title\": \"双11-红白\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7399184087103196428\",\n    \"title\": \"大红色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406678794901130534\",\n    \"title\": \"白字带红划白黑描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407014800204549413\",\n    \"title\": \"金箔字喜庆圆底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127646385628908807\",\n    \"title\": \"暗红花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7166470216396885280\",\n    \"title\": \"友友红色渐变图案立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7252964174744096003\",\n    \"title\": \"红黑渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127624093628697864\",\n    \"title\": \"综艺 红色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404416840476265780\",\n    \"title\": \"红色复古文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7348241821694233867\",\n    \"title\": \"镂空印章花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404888947479825715\",\n    \"title\": \"红底雪花纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7447922811793853732\",\n    \"title\": \"25元旦-福圈背景花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7245603807105699106\",\n    \"title\": \"红色光斑纹理立体深红影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7388867127597403428\",\n    \"title\": \"怀旧红\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7233578306912767271\",\n    \"title\": \"立体效果花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7460441811627035929\",\n    \"title\": \"复古红蓝\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7296357051788168467\",\n    \"title\": \"双十一-霓虹立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405143396869770534\",\n    \"title\": \"暗黑橙色渐变描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7462291141325688088\",\n    \"title\": \"黄红新年花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404082176163106099\",\n    \"title\": \"春节喜庆金粉红边黑色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7457924478878928152\",\n    \"title\": \"红色立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400944971932536099\",\n    \"title\": \"红色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7309137807929281831\",\n    \"title\": \"元旦-红白\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404681840377875766\",\n    \"title\": \"金色描边红色纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400213633055198503\",\n    \"title\": \"红色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404068280916397362\",\n    \"title\": \"综艺红蓝撞色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404893190593072393\",\n    \"title\": \"红色细闪黑色投影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127822719047011621\",\n    \"title\": \"白红渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7322728803560754482\",\n    \"title\": \"年味-红字金边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404036215848144179\",\n    \"title\": \"红色渐变黑边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7334612804831431987\",\n    \"title\": \"橙色热情简洁 橙色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7494900604641365310\",\n    \"title\": \"星星立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7266696776747486523\",\n    \"title\": \"老电影\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160597344935890206\",\n    \"title\": \"复古红色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405737574372756772\",\n    \"title\": \"红白立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7310234093625691404\",\n    \"title\": \"毛衣花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7187739440347958589\",\n    \"title\": \"春节-奇怪兔-红底白花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404028453063888155\",\n    \"title\": \"黑红渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7296352415060626699\",\n    \"title\": \"双十一-霓虹立体黄\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7335713356629822730\",\n    \"title\": \"红色蓝白边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404769483220405531\",\n    \"title\": \"红色渐变裂痕花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7300919700102401316\",\n    \"title\": \"社媒-网格红白子\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7390391149338348800\",\n    \"title\": \"红色 花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406174570966781221\",\n    \"title\": \"3D红色渐变星光立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371379435443948809\",\n    \"title\": \"红色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7319136118539078922\",\n    \"title\": \"港风复古蓝字红底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7313169456081947931\",\n    \"title\": \"红黄渐变纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7181327362708098359\",\n    \"title\": \"简约黄底橙色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404035148204739867\",\n    \"title\": \"红色渐变立体波点底纹花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430675317255179574\",\n    \"title\": \"红色立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403928233030241587\",\n    \"title\": \"春节对联质感花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7349746427217710377\",\n    \"title\": \"射线红色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7365464569642323252\",\n    \"title\": \"儿童节花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7493087421102411033\",\n    \"title\": \"红色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404782201583324466\",\n    \"title\": \"红色内投影白边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7273017574063901991\",\n    \"title\": \"红色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7399922623116840231\",\n    \"title\": \"粉色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405025997860490506\",\n    \"title\": \"红字双层描边纸张纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7312747055447854390\",\n    \"title\": \"元旦-红黄质感\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7319408651859397926\",\n    \"title\": \"港风复古红底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127669886762945805\",\n    \"title\": \"红黄立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7410765061796416768\",\n    \"title\": \"红黄立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404521144532929819\",\n    \"title\": \"白字红边渐变立体加厚花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430448068283206950\",\n    \"title\": \"红色填充白色描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7459730150943395134\",\n    \"title\": \"粉金新年花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7305806489069833491\",\n    \"title\": \"圣诞-纹理红\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7187743354308873529\",\n    \"title\": \"春节-奇怪兔-白底红花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371354957989055782\",\n    \"title\": \"米色橘色描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404112581427858703\",\n    \"title\": \"红色复古立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404796157727083814\",\n    \"title\": \"元旦红色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405243169991855423\",\n    \"title\": \"橙色描边立体综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7402051434893593919\",\n    \"title\": \"红色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405204082987683123\",\n    \"title\": \"红底雪花纹理黑边立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405947349379452211\",\n    \"title\": \"渐变黑荧光绿花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7321977363233803574\",\n    \"title\": \"春节-立体红\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7320257181046082870\",\n    \"title\": \"春节-花窗底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7329740101192387878\",\n    \"title\": \"招财猫花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7273028546514193675\",\n    \"title\": \"23带货-红白花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7312419048623541545\",\n    \"title\": \"圣诞-雪花红色字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406644388358540544\",\n    \"title\": \"复古红绿撞色立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7332292224668994867\",\n    \"title\": \"122\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7187615351868280121\",\n    \"title\": \"春节-隐藏\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406863699895389449\",\n    \"title\": \"红色绿色发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7245154816765234488\",\n    \"title\": \"渐变黄色阴影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7397798364848393481\",\n    \"title\": \"东北大花修改版\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7483443907032911166\",\n    \"title\": \"红色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7402043271733628172\",\n    \"title\": \"粉色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7460455706701892889\",\n    \"title\": \"简约描边红色纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7328403746214464819\",\n    \"title\": \"红色渐变立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407340226189757733\",\n    \"title\": \"互动立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7328988831762484480\",\n    \"title\": \"重阴影金色金属渐变纹理伪三维花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7277814401518800147\",\n    \"title\": \"黄面红底黑边双重花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160596855686991140\",\n    \"title\": \"潮酷发光立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7328988266768764194\",\n    \"title\": \"阴影金色金属纹理立体伪三维花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7402109946025790747\",\n    \"title\": \"火焰燃烧花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160601605233052959\",\n    \"title\": \"复古橙色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260019709662219576\",\n    \"title\": \"黄色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7166483277631540492\",\n    \"title\": \"复古橙色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7465587976928660760\",\n    \"title\": \"金色纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160603032248405285\",\n    \"title\": \"复古橙色渐变发光立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7398576754434067723\",\n    \"title\": \"黄色黑底古典中国风风格花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7343599630678019362\",\n    \"title\": \"黄色底字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7445226210377927977\",\n    \"title\": \"面包黄渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7460434187036691737\",\n    \"title\": \"渐变星星花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7181467986249796920\",\n    \"title\": \"金镂空花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7273052950707145996\",\n    \"title\": \"黄色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7401444618681847103\",\n    \"title\": \"黄色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7322735036669758729\",\n    \"title\": \"年味-金箔字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7187743885479791932\",\n    \"title\": \"春节-奇怪兔-黄针织花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403927207162203402\",\n    \"title\": \"3D黄色渐变立体综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7203613972434685242\",\n    \"title\": \"清新黄色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7245162195829460263\",\n    \"title\": \"淡黄色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431549056674991375\",\n    \"title\": \"黄字黑边红底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351315241428471090\",\n    \"title\": \"综艺-宇宙一番\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127667703048965389\",\n    \"title\": \"黄粉立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406743750933810471\",\n    \"title\": \"中秋灯笼星星花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7328737068006378787\",\n    \"title\": \"黄色渐变纹理描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7495311379738397976\",\n    \"title\": \"黄绸缎\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407412458370944294\",\n    \"title\": \"浪漫中秋渐变 \",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7448948322427047230\",\n    \"title\": \"黄色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7349752453350395155\",\n    \"title\": \"渐变金色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404135722242067722\",\n    \"title\": \"3D综艺风蓝黄渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260815156861619493\",\n    \"title\": \"芭比黄色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160597556869795102\",\n    \"title\": \"综艺立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7311260697751457063\",\n    \"title\": \"黄色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7324728355134147876\",\n    \"title\": \"描边四色花字-黄\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7309138668319444287\",\n    \"title\": \"元旦-黄红\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7399157478648253732\",\n    \"title\": \"纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7263114818876476729\",\n    \"title\": \"橙子\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405945244237303091\",\n    \"title\": \"格纹复古立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406205299100536074\",\n    \"title\": \"粉黄撞色星星装饰花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7460131684537601331\",\n    \"title\": \"金黄色渐变多色复合描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7325388931430763812\",\n    \"title\": \"邮票字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371660746725330217\",\n    \"title\": \"黄色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405224102115527936\",\n    \"title\": \"黄色渐变波点纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7244522111643946275\",\n    \"title\": \"红背景用浅黄色无边无影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160597869638978824\",\n    \"title\": \"简约花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7409320679838846234\",\n    \"title\": \"综艺字星星\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7480466283088235801\",\n    \"title\": \"黄色立体质感花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7402069935075151123\",\n    \"title\": \"黄色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7307096095828528395\",\n    \"title\": \"描边新年花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7328738345616510242\",\n    \"title\": \"浅黄色渐变发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7187774415130643769\",\n    \"title\": \"金属金色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265639510296300852\",\n    \"title\": \"黄白字体重复花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405023729782164747\",\n    \"title\": \"黄色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371124431713832201\",\n    \"title\": \"黄色渐变立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7434103306181528882\",\n    \"title\": \"可爱风立体描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7264858160744221971\",\n    \"title\": \"好物美妆黄白渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406269205164592396\",\n    \"title\": \"金花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406979588020047104\",\n    \"title\": \"黄色发光透明字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7294994395907018025\",\n    \"title\": \"双11-黄色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7389657424883387699\",\n    \"title\": \"白色立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7340552492331142454\",\n    \"title\": \"黄边橙底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404825166351469860\",\n    \"title\": \"黄色线条花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405239905443482919\",\n    \"title\": \"黄色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405078751823809801\",\n    \"title\": \"黄色立体发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7349078549061504275\",\n    \"title\": \"渐变白色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407448816653258036\",\n    \"title\": \"黄色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127675251604966669\",\n    \"title\": \"黄蓝立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406349356347002138\",\n    \"title\": \"黄色镂空描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7328608627542002998\",\n    \"title\": \"奶酪花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400210254580944169\",\n    \"title\": \"橙色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7275153233226616124\",\n    \"title\": \"纯黑底色 黄色黑色描边 立体 花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7380754518914518287\",\n    \"title\": \"黄色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7283170032912256310\",\n    \"title\": \"国庆旅行-手绘黄\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404023782316313890\",\n    \"title\": \"黄底纸张撕边字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404881915871825186\",\n    \"title\": \"黄色波点描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7329011018632269108\",\n    \"title\": \"红色渐变伪三维多层描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405879107424111910\",\n    \"title\": \"黄色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7345385438401580307\",\n    \"title\": \"复古阴影描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7270426004617825593\",\n    \"title\": \"黄色黑白描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7402075098393365823\",\n    \"title\": \"黄色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265643261631417635\",\n    \"title\": \"黄白纯色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7264502894546767116\",\n    \"title\": \"好物美妆-双层投影\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7251576577530531110\",\n    \"title\": \"白底橙描黄字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7311260579992227091\",\n    \"title\": \"运动教程-花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7212892034623950141\",\n    \"title\": \"美食-白网格\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7387594122032385321\",\n    \"title\": \"描边白蓝字体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127676763148143885\",\n    \"title\": \"黑白描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351313732443671827\",\n    \"title\": \"综艺-黑暗斑驳白色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160601239800040712\",\n    \"title\": \"简约透明渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7272727186036116755\",\n    \"title\": \"音乐节-杂点白字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7114534269543828766\",\n    \"title\": \"黑白 动漫 波普 美漫 复古\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351311491821276452\",\n    \"title\": \"韩国综艺-紧张的瞬间\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7252680796429897021\",\n    \"title\": \"美食-白色躁点\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7345748543577099547\",\n    \"title\": \"黑色手绘质感花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7325238973809298742\",\n    \"title\": \"黑色白边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7343223006396828968\",\n    \"title\": \"纸张背景字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371395905561365770\",\n    \"title\": \"白色DIY纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7166468321125207299\",\n    \"title\": \"复古黑色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7369126670915226899\",\n    \"title\": \"立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7166477143159868710\",\n    \"title\": \"复古白色图案立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7337938878139010355\",\n    \"title\": \"纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7181453824148753702\",\n    \"title\": \"撒银粉花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7166490848820038945\",\n    \"title\": \"暗黑白边黑色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7181336409813372197\",\n    \"title\": \"透明渐变-白\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7311952196956917033\",\n    \"title\": \"运动教程-纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160595742489382151\",\n    \"title\": \"潮酷灰色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7273018315025550628\",\n    \"title\": \"黑白花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7343809832324975891\",\n    \"title\": \"纸张背景字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7194356393271446843\",\n    \"title\": \"元宵-黑字发光\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260344475921190207\",\n    \"title\": \"黑白复古红色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7313563919245643008\",\n    \"title\": \"拼贴白纸底纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7313511240523959604\",\n    \"title\": \"拼贴底黑白纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7343584149648772352\",\n    \"title\": \"撕边纸张背景字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241426840395549985\",\n    \"title\": \"白色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7173539578815483149\",\n    \"title\": \"3D白字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7435890198455536923\",\n    \"title\": \"复古花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7343449320475151627\",\n    \"title\": \"描边纸纹花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7343160086795242788\",\n    \"title\": \"纸张背景字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7349124649973730599\",\n    \"title\": \"黑白花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160602457658117384\",\n    \"title\": \"运动-潮流运动-黑色纸纹\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7310103573377846538\",\n    \"title\": \"黑色纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400199119807008036\",\n    \"title\": \"黑色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7285632742400740645\",\n    \"title\": \"斑马纹字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7266689977793269048\",\n    \"title\": \"黑份星空体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7294186899491654951\",\n    \"title\": \"万圣-白木板字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265615157953334562\",\n    \"title\": \"白色毛绒豹纹花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7365355573036059913\",\n    \"title\": \"潮酷花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7200668850155801893\",\n    \"title\": \"潮流运动-纸纹描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"6927160144421784832\",\n    \"title\": \"简约黑色描边立体花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896137990788091143\",\n    \"title\": \"简约白色黑边花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896143808942066952\",\n    \"title\": \"灰色金属质感花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7166467215410187552\",\n    \"title\": \"简约黑字白边花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7166472183814950183\",\n    \"title\": \"简约白色花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127681015732096270\",\n    \"title\": \"综艺黑白立体花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127668616656506149\",\n    \"title\": \"232\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7166473306248465703\",\n    \"title\": \"网感-黑字白边外发光花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896137661153676552\",\n    \"title\": \"简约黑白镂空花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896137924853648648\",\n    \"title\": \"简约黑白花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896137727012637959\",\n    \"title\": \"白色裂纹花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127830659275459871\",\n    \"title\": \"综艺 白色\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127540233750596871\",\n    \"title\": \"综艺 白色 裂纹\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7166476751420329248\",\n    \"title\": \"简约白色镂空花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127830631601474824\",\n    \"title\": \"绿边黑底白色花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896144074487696654\",\n    \"title\": \"简约白色镂空花字，排版适用\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896138188792843527\",\n    \"title\": \"金属感渐变灰色花字，日本综艺\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7021075312532393247\",\n    \"title\": \"综艺 白色黑边\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7181337352327941431\",\n    \"title\": \" 投影红底白色花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896138254819577102\",\n    \"title\": \"白色镂空感简约花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896138254819560718\",\n    \"title\": \"简约黑灰色拖影花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896144074487729422\",\n    \"title\": \"简约黑白色花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6926796566347025677\",\n    \"title\": \"简约黑白花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127823728070741278\",\n    \"title\": \"小清新 白色 \",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127669342325542158\",\n    \"title\": \"简约透明白色花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7166475342436224267\",\n    \"title\": \"暗黑白色渐变发光花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7166474083817884966\",\n    \"title\": \"简约白色立体花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127674303260265764\",\n    \"title\": \"潮酷 白色 \",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127676414962224421\",\n    \"title\": \"白底橙色波点花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896137727012654343\",\n    \"title\": \"简约黑白几何立体花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7304198748958199076\",\n    \"title\": \"丝印纹理花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896144234013854990\",\n    \"title\": \"半透明灰色立体花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896137793022545159\",\n    \"title\": \"白色大理石纹理立体花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6927160139363388684\",\n    \"title\": \"潮酷星空立体花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7194356906171927866\",\n    \"title\": \"潮酷黑色绿边发光立体花字 \",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127594686541286687\",\n    \"title\": \"综艺 黑色\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7304122881682853161\",\n    \"title\": \"黑丝印蓝阴影字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7200660554552331575\",\n    \"title\": \"潮流运动2-黑色纹理\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7405917902894927114\",\n    \"title\": \"深蓝白色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265628111796964643\",\n    \"title\": \"蓝色渐变描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7236980379452787968\",\n    \"title\": \"蓝色渐变文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431507293306506533\",\n    \"title\": \"蓝白色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405874090348711218\",\n    \"title\": \"3D蓝色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127828208690482463\",\n    \"title\": \"蓝白花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7478297038023871769\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7297087768889494847\",\n    \"title\": \"蓝色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404757920535055679\",\n    \"title\": \"蓝色渐变星星花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7390775733812989199\",\n    \"title\": \"蓝色 花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404828637326757172\",\n    \"title\": \"蓝色立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7284086330060033334\",\n    \"title\": \"蓝色白边立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7234332653498027325\",\n    \"title\": \"蓝色星空填充花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7339051729943661851\",\n    \"title\": \"蓝色花字 \",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404341814565539110\",\n    \"title\": \"蓝色渐变立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403983551021993243\",\n    \"title\": \"蓝色描边字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7315430777976655139\",\n    \"title\": \"伪三维多层描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7274827617654656308\",\n    \"title\": \"蓝色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7424738578648894732\",\n    \"title\": \"蓝色渐变动漫风格花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7252223990217837862\",\n    \"title\": \"蓝色雪花花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7511286098283351320\",\n    \"title\": \"蓝色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7298723012642229523\",\n    \"title\": \"冬天花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7317914423186820391\",\n    \"title\": \"知识-花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404710098255269139\",\n    \"title\": \"双层描边白蓝双色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7306901916288666906\",\n    \"title\": \"蓝色质感纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7274824941151800610\",\n    \"title\": \"复古蓝色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7283010376986299663\",\n    \"title\": \"深蓝色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7300921005386566931\",\n    \"title\": \"白蓝色粗描边立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400713144886119730\",\n    \"title\": \"冷酷蓝色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7291342429117107471\",\n    \"title\": \"蓝色霓虹灯\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7287492960478973238\",\n    \"title\": \"蓝色立体 白字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7317913619340070207\",\n    \"title\": \"知识-花字2\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7378305489609706752\",\n    \"title\": \"蓝色白描边字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7302303263188159779\",\n    \"title\": \"冬日-发光蓝\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7245601258441133369\",\n    \"title\": \"冰爽蓝色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404004705740786996\",\n    \"title\": \"蓝色投影字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7360972639780850978\",\n    \"title\": \"背景字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7273026280830946572\",\n    \"title\": \"黑蓝花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404089887411965199\",\n    \"title\": \"蓝黑渐变综艺描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404876048438938895\",\n    \"title\": \"蓝黑双描边冰块冰雪万花筒花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7300920494520356108\",\n    \"title\": \"蓝边白花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7259925979139722553\",\n    \"title\": \"蓝白描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400998328315448627\",\n    \"title\": \"蓝色科技花字带阴影\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400211255723642151\",\n    \"title\": \"蓝色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400215751618989331\",\n    \"title\": \"蓝色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7245935944744946944\",\n    \"title\": \"韩式综艺\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265626134212054324\",\n    \"title\": \"蓝色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7363764911773699340\",\n    \"title\": \"闪烁蓝\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7343225910864153896\",\n    \"title\": \"蓝底拼贴字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406384565951941914\",\n    \"title\": \"蓝色双层描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7300919051906321727\",\n    \"title\": \"蓝色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7401436090340576563\",\n    \"title\": \"蓝色梦幻立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7267373226962095415\",\n    \"title\": \"清新简化单色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7399182466470169919\",\n    \"title\": \"蓝色小清新花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7379206506035662117\",\n    \"title\": \"白字蓝底拼贴花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7448931302520278296\",\n    \"title\": \"蓝色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241417086294166836\",\n    \"title\": \"蓝色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7460439436510301464\",\n    \"title\": \"简约描边纸纹理蓝色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400200671015783716\",\n    \"title\": \"蓝色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430995853440994570\",\n    \"title\": \"白色纸张质感立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7434900706798161203\",\n    \"title\": \"蓝白描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7252220565577026828\",\n    \"title\": \"深蓝色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260765036711251261\",\n    \"title\": \"浅色格子布纹花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431505103326137615\",\n    \"title\": \"白蓝纹理字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7366638884362390803\",\n    \"title\": \"蓝白花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405953919085595930\",\n    \"title\": \"浅蓝内阴影白色描边字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404362111041735974\",\n    \"title\": \"蓝色冰块效果立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7247317471550623009\",\n    \"title\": \"白色描边字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7471593256606895385\",\n    \"title\": \"蓝黄综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7526161513816739097\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7329779937915702537\",\n    \"title\": \"白色蓝紫渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7497604377235049790\",\n    \"title\": \"冰冰凉\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7525043694467255614\",\n    \"title\": \"蓝色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7450314918068243739\",\n    \"title\": \"白字多层次描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7248079950924893451\",\n    \"title\": \"蓝色立体拆痕花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404526221230443785\",\n    \"title\": \"蓝白色冬季冰雪花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405801528612769060\",\n    \"title\": \"游戏立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7245076686734167329\",\n    \"title\": \"赛博花样字体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430824690727275802\",\n    \"title\": \"白色纸张质感立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404076575030922505\",\n    \"title\": \"白色石材质感立体蓝阴影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400212292211641663\",\n    \"title\": \"蓝色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7256676293956128055\",\n    \"title\": \"多巴胺蓝色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7510996426575449368\",\n    \"title\": \"白色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7377956281291672842\",\n    \"title\": \"蓝色描边投影立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7346455592367623443\",\n    \"title\": \"蓝色阴影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7511159840157453592\",\n    \"title\": \"蓝色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7331609291226402102\",\n    \"title\": \"蓝色阴影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405224199884737827\",\n    \"title\": \"蓝色渐变波点纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7314956298682928384\",\n    \"title\": \"像素风游戏风纹理花字蓝色伪三维\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404762475582786852\",\n    \"title\": \"浅蓝色纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7291337904947776802\",\n    \"title\": \"蓝色渐变卡通花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430797889141509416\",\n    \"title\": \"复古蓝色字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404381121615613210\",\n    \"title\": \"白字蓝边粗描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400214111411293451\",\n    \"title\": \"蓝色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7402114255383760166\",\n    \"title\": \"卡通条纹渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7480096931411266840\",\n    \"title\": \"立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430854925019565321\",\n    \"title\": \"冬至圆底\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7252216909721029899\",\n    \"title\": \"蓝色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405238192510602546\",\n    \"title\": \"蓝色渐变方底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7527223959767764248\",\n    \"title\": \"互动引导立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7332635756839718179\",\n    \"title\": \"特殊纹理粉色渐变花字白色描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403931785077329167\",\n    \"title\": \"粉色黑投影立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7268272864770460991\",\n    \"title\": \"时尚亮粉色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7389651692385570075\",\n    \"title\": \"白色立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7399162410034105636\",\n    \"title\": \"粉色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7506871646129573182\",\n    \"title\": \"端午61立体字效\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265147554952711465\",\n    \"title\": \"七夕-粉色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7350942991793622335\",\n    \"title\": \"描边阴影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7526125596955659545\",\n    \"title\": \"美妆立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7263028102610144575\",\n    \"title\": \"粉色描边白色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7350941310355868991\",\n    \"title\": \"粉色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7399826245703175487\",\n    \"title\": \"粉色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371412248163568905\",\n    \"title\": \"粉蓝色多层立体综艺风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7471642975651564862\",\n    \"title\": \"粉黄描边立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160605820927872292\",\n    \"title\": \"复古发光立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7496412960647286078\",\n    \"title\": \"母亲节立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405576947159387443\",\n    \"title\": \"粉色渐变立体爱心背景花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7273263711744232741\",\n    \"title\": \"粉色系花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7471951122425515288\",\n    \"title\": \"小清新粉绿渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7401443574719483155\",\n    \"title\": \"粉色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7476028091077430552\",\n    \"title\": \"粉色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405950908644723977\",\n    \"title\": \"发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7401438526962666788\",\n    \"title\": \"粉色发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265599528579943714\",\n    \"title\": \"粉色草莓熊花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351316363849354534\",\n    \"title\": \"综艺-超期待\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7278850102503001403\",\n    \"title\": \"鼠鼻红 黑描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7474566247460441368\",\n    \"title\": \"粉白描边立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404367331842936115\",\n    \"title\": \"蓝粉色渐变多层立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7337322283540696347\",\n    \"title\": \"玫红色  玫红色黑边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127666013495102750\",\n    \"title\": \"粉绿花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7469667482442222910\",\n    \"title\": \"粉色立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7362783053573262629\",\n    \"title\": \"红边立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"6896144127935761672\",\n    \"title\": \"可爱渐变粉色立体花字，少女漫画\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403924486346509606\",\n    \"title\": \"红色发光\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7355780050513382668\",\n    \"title\": \"黑粉撞色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7257044199663602998\",\n    \"title\": \"立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7348036600766483751\",\n    \"title\": \"立体樱花花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7252103474719051020\",\n    \"title\": \"红色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241808652640865595\",\n    \"title\": \"玻璃质感\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403773847754902810\",\n    \"title\": \"粉紫色渐变发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7442237073668508978\",\n    \"title\": \"清新粉色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7494574052934241560\",\n    \"title\": \"粉黄立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404309195387882786\",\n    \"title\": \"粉色渐隐字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7198021796891757882\",\n    \"title\": \"梦幻粉色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7252148714372943136\",\n    \"title\": \"蓝紫色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7447461222691261731\",\n    \"title\": \"圣诞落雪-粉\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7259354579664375077\",\n    \"title\": \"芭比花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7532077639864208665\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7283431566179585343\",\n    \"title\": \"国庆旅行-粉\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371338640280161545\",\n    \"title\": \"粉色渐变仿3d立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7197315212834377016\",\n    \"title\": \"文艺粉色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7363797275652443455\",\n    \"title\": \"闪烁浅粉\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127678663583157517\",\n    \"title\": \"粉粉描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7434113204139117850\",\n    \"title\": \"立体粉色描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7483781507337817406\",\n    \"title\": \"透明果冻粉\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7278851099656768805\",\n    \"title\": \"合欢红 黑白描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406010312467434779\",\n    \"title\": \"紫粉色星光发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7347229028467608869\",\n    \"title\": \"仿3d粉色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7517639254835612937\",\n    \"title\": \"红白色炫彩花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7187770600503512381\",\n    \"title\": \"春节-兔彩头-粉色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7362836205475548470\",\n    \"title\": \"磨砂\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404359079063244067\",\n    \"title\": \"清新粉色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404870544413281536\",\n    \"title\": \"粉白描边立体节日花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7343590343138446604\",\n    \"title\": \"花朵形状花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405224954368642319\",\n    \"title\": \"粉色渐变波点纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7270134110692085029\",\n    \"title\": \"紫底橙边渐变色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7535298048642108697\",\n    \"title\": \"粉蓝弥散渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7362188947243404596\",\n    \"title\": \"粉色花字 \",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7312854311854148890\",\n    \"title\": \"黄粉渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7362367983555005733\",\n    \"title\": \"粉色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7366060800315788570\",\n    \"title\": \"粉色渐变发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404520184062430491\",\n    \"title\": \"粉白色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406172056645078299\",\n    \"title\": \"黑粉甜酷渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7362058534923554111\",\n    \"title\": \"粉色水彩花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260824497358409020\",\n    \"title\": \"芭比白色描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7244717011618532640\",\n    \"title\": \"纯色系花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260778139385695549\",\n    \"title\": \"镭射粉边厚投影\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403951797972339979\",\n    \"title\": \"立体渐变花字（综艺）\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241938590169713923\",\n    \"title\": \"白色综艺感花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7114574351407533342\",\n    \"title\": \"粉色 立体 白色 蒸汽波 像素风\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7284091009229704487\",\n    \"title\": \"粉色黑边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7324622240555765046\",\n    \"title\": \"粉色蜡笔花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7481670126689946942\",\n    \"title\": \"粉色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404035812284779827\",\n    \"title\": \"粉色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406638428864924954\",\n    \"title\": \"粉色渐变发光\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405198458337889586\",\n    \"title\": \"白芭比花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7505772084703022361\",\n    \"title\": \"粉蓝闪闪花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7537151663212268825\",\n    \"title\": \"立体紫粉\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7283169557890501924\",\n    \"title\": \"国庆旅行-手绘粉白\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7337558715559611686\",\n    \"title\": \"粉色立体节日女神节\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7263270863359724856\",\n    \"title\": \"高级美式配色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403763886584777984\",\n    \"title\": \"可爱粉黄渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371118955500555571\",\n    \"title\": \"白粉色仿3D立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7470023899539967257\",\n    \"title\": \"粉紫色气球花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404876152554278154\",\n    \"title\": \"黄粉圆底心星点缀花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7311627613137620278\",\n    \"title\": \"黑色描边深粉色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7541231272509574424\",\n    \"title\": \"蛋糕卷\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400688551689555210\",\n    \"title\": \"渐变粉色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7263379569594436900\",\n    \"title\": \"芭比粉\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7296704810148007219\",\n    \"title\": \"粉蓝彩色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7361330845342371113\",\n    \"title\": \"涂鸦字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7459711214587776318\",\n    \"title\": \"粉色闪闪花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7402071915386408203\",\n    \"title\": \"紫色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403721451993304370\",\n    \"title\": \"甜酷芭比粉色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7402123078743919923\",\n    \"title\": \"粉色千层浪漫花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7328249466295733544\",\n    \"title\": \"爱心背景字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406377074849566003\",\n    \"title\": \"粉色紫色渐变立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260816673165364541\",\n    \"title\": \"芭比黄色描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403767866266324261\",\n    \"title\": \"粉紫色多层渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403755765573471500\",\n    \"title\": \"粉色y2k风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7408393528163716404\",\n    \"title\": \"红字黄边立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400336012813159699\",\n    \"title\": \"紫色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260309891452013883\",\n    \"title\": \"粉红色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7284083822910655756\",\n    \"title\": \"粉色黄边红底立体字体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265636585973009704\",\n    \"title\": \"粉色渐变双色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405756302271483155\",\n    \"title\": \"粉色樱花花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7546485148498431256\",\n    \"title\": \"粉绿纹理综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7345309219098201370\",\n    \"title\": \"春日辣妹\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7523240490314173721\",\n    \"title\": \"粉蓝色立体字效\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404713728219925801\",\n    \"title\": \"粉黑色描边甜酷花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405254623050599732\",\n    \"title\": \"粉色渐变透明花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404706418848271670\",\n    \"title\": \"多层描边粉紫色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7522895833600380222\",\n    \"title\": \"糖果\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7266702065966107959\",\n    \"title\": \"粉色少女\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7340848509379251468\",\n    \"title\": \"皇冠字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7251733111518579979\",\n    \"title\": \"粉紫色花字 \",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7297042051802172698\",\n    \"title\": \"纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405086290414144777\",\n    \"title\": \"粉色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7328707180419386676\",\n    \"title\": \"粉色渐变发光花字 多层描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405929528134077734\",\n    \"title\": \"橘色渐变镂空描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404493990520802598\",\n    \"title\": \"亮绿色拼接花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403996884856999194\",\n    \"title\": \"绿色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7268270899432852799\",\n    \"title\": \"亮绿色综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160596905548942622\",\n    \"title\": \"运动-潮流运动-渐变描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7473670543162641689\",\n    \"title\": \"白色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7278133287623707965\",\n    \"title\": \"生鲜 绿色 花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7371122063710391561\",\n    \"title\": \"青色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7187772431149305143\",\n    \"title\": \"复古绿色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7475754844909882649\",\n    \"title\": \"绿色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404747598109609228\",\n    \"title\": \"绿色蓝色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406966103861169408\",\n    \"title\": \"黄绿渐变立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7298613319999540507\",\n    \"title\": \"浅绿渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7294165467973897526\",\n    \"title\": \"绿巨人花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7348241222261050663\",\n    \"title\": \"渐变青色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7281934860015406391\",\n    \"title\": \"黑加绿花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265646083169193231\",\n    \"title\": \"白绿色字体重复花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7388017961174404415\",\n    \"title\": \"潮酷简约渐变绿色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7283056755100208443\",\n    \"title\": \"草绿色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404080787638799651\",\n    \"title\": \"高饱和撞色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7473821452597316926\",\n    \"title\": \"运动立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7291929593328504100\",\n    \"title\": \"综艺活泼亮色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7472017607768673598\",\n    \"title\": \"绿色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7398445914676874505\",\n    \"title\": \"tiffany波纹面\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7473921287983795481\",\n    \"title\": \"黄色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400209808361622825\",\n    \"title\": \"清新绿色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7334624542985391411\",\n    \"title\": \"绿色质感花字   绿色金属质感反光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7239898171730595110\",\n    \"title\": \"绿色阴影描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7367570395483983143\",\n    \"title\": \"绿色纹理\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7344963566241336639\",\n    \"title\": \"薄荷绿拼贴花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7346463952278244618\",\n    \"title\": \"港风\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404093067151658274\",\n    \"title\": \"简约绿色镂空花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260286417681599784\",\n    \"title\": \"绿色黑边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7137931766576205093\",\n    \"title\": \"花字-金属立体绿\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7259935584053972284\",\n    \"title\": \"绿色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7372039427452865819\",\n    \"title\": \"白字蓝绿渐变描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7298573318259477770\",\n    \"title\": \"浅绿渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405127816867597605\",\n    \"title\": \"绿色清新条纹渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7298614541112397083\",\n    \"title\": \"绿色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7367605728321801509\",\n    \"title\": \"浅绿色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7252153542847319307\",\n    \"title\": \"渐变绿色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404768610100497700\",\n    \"title\": \"黄绿色纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407443209355332864\",\n    \"title\": \"绿色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7327621248937151785\",\n    \"title\": \"黑板绿色复古简单极简风格标题\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7236568168368491814\",\n    \"title\": \"简约渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7174293913962827016\",\n    \"title\": \"圣诞青字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7310093916974419210\",\n    \"title\": \"黑色纹理立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7298617654846295305\",\n    \"title\": \"浅绿渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7411774424355065088\",\n    \"title\": \"黄绿描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7114570857992703269\",\n    \"title\": \"立体 白色 蒸汽波 像素风 黄绿色黄色绿色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7345749275839597874\",\n    \"title\": \"绿色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7347215675548634406\",\n    \"title\": \"港风 \",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7254739710776593724\",\n    \"title\": \"综艺绿色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7342427659030383883\",\n    \"title\": \"描边纸纹花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7397647341706104090\",\n    \"title\": \"绿色紫色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7366841667820752140\",\n    \"title\": \"绿色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431507395127282954\",\n    \"title\": \"绿色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406004095309450546\",\n    \"title\": \"绿色条纹渐变发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7274503640545627404\",\n    \"title\": \"绿色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7361014988858789120\",\n    \"title\": \"绿色描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405962322373578024\",\n    \"title\": \"蓝绿色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7368761827230092595\",\n    \"title\": \"清新花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430467479744335142\",\n    \"title\": \"双十一黄绿立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7344956185780456743\",\n    \"title\": \"绿色渐变阴影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405561923728690458\",\n    \"title\": \"复古绿色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404854087830867234\",\n    \"title\": \"绿色渐变立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405128752167963914\",\n    \"title\": \"蓝绿色运动风渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7283122934682504460\",\n    \"title\": \"国庆旅行-手绘字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7273732632578493755\",\n    \"title\": \"蓝绿色纹理渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7431502293394099506\",\n    \"title\": \"白色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7348234501983636799\",\n    \"title\": \"青色纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7474572068676357401\",\n    \"title\": \"粉绿色渐变多层立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7312852084502564146\",\n    \"title\": \"黄蓝渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406256498252188968\",\n    \"title\": \"三色渐变发光字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7305827683798224191\",\n    \"title\": \"圣诞-复古绿点\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7360585289733098771\",\n    \"title\": \"绿色剪纸纹理\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7203615859544182053\",\n    \"title\": \"亲子-绿色饼干立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7293142782896590114\",\n    \"title\": \"绿色紫色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7347236230674844937\",\n    \"title\": \"仿3d水波纹薄荷\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7298600104972307722\",\n    \"title\": \"浅绿渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7272324394641280319\",\n    \"title\": \"好物推荐-眼前一黑\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430436359287868682\",\n    \"title\": \"绿字描边绿草茵茵经典风格花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7348238901154221323\",\n    \"title\": \"青团花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7266049922468695353\",\n    \"title\": \"清新配色哈密瓜色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7349548116372180260\",\n    \"title\": \"青绿色渐变白描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430785639781567753\",\n    \"title\": \"蓝黄渐变绿色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7369021564211318028\",\n    \"title\": \"青色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7389681541141597478\",\n    \"title\": \"绿色国风\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7357047867233602855\",\n    \"title\": \"晕染绿\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351694267858865462\",\n    \"title\": \"格子蓝绿\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7348986730529262899\",\n    \"title\": \"绿色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404139316554779914\",\n    \"title\": \"绿色纸张拼贴背景综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7280818803355700499\",\n    \"title\": \"复古花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7346213993691794699\",\n    \"title\": \"立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7344606077083864357\",\n    \"title\": \"花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7272741033979546943\",\n    \"title\": \"音乐-杂点绿色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7403935407680834851\",\n    \"title\": \"绿色荧光细黑描边字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351681114013994252\",\n    \"title\": \"格子绿\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7160596892773027079\",\n    \"title\": \"运动-潮流运动-绿蓝色纸纹\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7239892464302034214\",\n    \"title\": \"绿白渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7298617928423902502\",\n    \"title\": \"浅绿渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7312358171530595623\",\n    \"title\": \"圣诞-圣诞快乐\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7360990469402283298\",\n    \"title\": \"双色描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351302410180005157\",\n    \"title\": \"绿色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406991694668795163\",\n    \"title\": \"绿色渐变黑边字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7523990414601260350\",\n    \"title\": \"小荷漫漫\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406685269446905125\",\n    \"title\": \"白字绿边带格纹\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7312853585660857637\",\n    \"title\": \"紫绿渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406011060521667866\",\n    \"title\": \"绿色水晶立体渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404043957887372571\",\n    \"title\": \"港风复古墨绿圆边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7334619118340951322\",\n    \"title\": \"清新豆绿色  白字绿底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7366841083415874835\",\n    \"title\": \"绿色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7348239399705972009\",\n    \"title\": \"青色纹理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7281933472610929981\",\n    \"title\": \"草绿色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241410366796811555\",\n    \"title\": \"绿色粉描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7330397394950966568\",\n    \"title\": \"绿色背景圈花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405130126477757722\",\n    \"title\": \"白绿多层渐变投影花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7279301469516434747\",\n    \"title\": \"绿色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7312427317089848617\",\n    \"title\": \"圣诞-圣诞色渐变\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7330567349382286644\",\n    \"title\": \"黄绿色渐变圆形纹理底白色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7279304624253701434\",\n    \"title\": \"绿色同系花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7343445448100810025\",\n    \"title\": \"纸纹花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7298262240036146458\",\n    \"title\": \"绿色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7343820951823355170\",\n    \"title\": \"伪三维拼贴纹理薄荷绿花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7367375630180076850\",\n    \"title\": \"绿色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7345386966076165412\",\n    \"title\": \"复古圆底花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404137941632552202\",\n    \"title\": \"蓝绿色渐变多层投影立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7243593806409436474\",\n    \"title\": \"小清新绿色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7260765133243288887\",\n    \"title\": \"格子布纹花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404510647829957914\",\n    \"title\": \"绿色渐变白边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7346195217466363148\",\n    \"title\": \"毛毡薄荷绿花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7224819211233676556\",\n    \"title\": \"古朴青\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7280421022845668669\",\n    \"title\": \"绿色时尚\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7370971660947705099\",\n    \"title\": \"青色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7359509585222208778\",\n    \"title\": \"绿色手绘涂鸦花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404713810730241319\",\n    \"title\": \"绿色渐变立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406323483690470696\",\n    \"title\": \"绿色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7282316784424865078\",\n    \"title\": \"浅绿色白边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351685926277352723\",\n    \"title\": \"黄绿格\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7298573839447903498\",\n    \"title\": \"浅绿渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7304160131338571044\",\n    \"title\": \"麻将花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405636378769313065\",\n    \"title\": \"绿色描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7244834053323492611\",\n    \"title\": \"综艺花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7231522690144685315\",\n    \"title\": \"清风土黄花边可爱花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404777605955734793\",\n    \"title\": \"复古质感肌理花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7245959768349691195\",\n    \"title\": \"韩综艺术\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7338390981055761704\",\n    \"title\": \"清新点亮朦胧立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405124477803171124\",\n    \"title\": \"紫色立体文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7347627316031311115\",\n    \"title\": \"赛博朋克故障字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265622486312652047\",\n    \"title\": \"紫色渐变描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7407080664236870964\",\n    \"title\": \"紫色多重描边字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406236406151925007\",\n    \"title\": \"紫色渐变立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241956897010552124\",\n    \"title\": \"蓝紫渐变花字 黑白描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430766119671139595\",\n    \"title\": \"紫色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7507256223939530009\",\n    \"title\": \"618紫色渐变立体字效\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7236965265383230760\",\n    \"title\": \"紫色彩虹字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7402066866572741927\",\n    \"title\": \"紫色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405948653761744137\",\n    \"title\": \"赛博故障风荧光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7349028882974018835\",\n    \"title\": \"故障风花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406657094851562792\",\n    \"title\": \"紫色立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7475389169183837502\",\n    \"title\": \"橙紫立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7389866725287709979\",\n    \"title\": \"紫色蓝边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7424524996350905612\",\n    \"title\": \"紫红色描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7352837737730592015\",\n    \"title\": \"紫色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7312852437327547658\",\n    \"title\": \"蓝紫渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265657776012004648\",\n    \"title\": \"蓝粉纯色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7388023559047761191\",\n    \"title\": \"综艺潮流淡紫色渐变白边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7312836005227302195\",\n    \"title\": \"粉紫渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404055341010390324\",\n    \"title\": \"紫色渐变投影字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430666396389969164\",\n    \"title\": \"紫色立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405053909191904566\",\n    \"title\": \"蓝紫色渐变描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265615178446720256\",\n    \"title\": \"紫色闪烁花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405043787539549452\",\n    \"title\": \"白色立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7241714501995875639\",\n    \"title\": \"星空\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7231020400791129400\",\n    \"title\": \"星空\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405191566295420199\",\n    \"title\": \"白色描边立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7243961568067603744\",\n    \"title\": \"渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404673172978650431\",\n    \"title\": \"紫色渐变立体描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7278520644478782775\",\n    \"title\": \"颜色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406011763457576201\",\n    \"title\": \"紫色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7481958256655486233\",\n    \"title\": \"紫玫瑰\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7249741698094468412\",\n    \"title\": \"多彩文字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7274825472574262528\",\n    \"title\": \"黄紫色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406974135018048820\",\n    \"title\": \"紫红渐变透明字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127673746902502670\",\n    \"title\": \"紫绿立体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7252144476603403524\",\n    \"title\": \"蓝紫色黑边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405967249992879410\",\n    \"title\": \"发光粉赛博故障风立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351302252562337062\",\n    \"title\": \"科技花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7267344857406967096\",\n    \"title\": \"星空之恋\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265636153896750336\",\n    \"title\": \"紫色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7127822319824735519\",\n    \"title\": \"紫绿描边\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7404469048517414153\",\n    \"title\": \"万圣节主题色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7399634464659279131\",\n    \"title\": \"星空花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7281948081925475644\",\n    \"title\": \"浅紫色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7406649743616740642\",\n    \"title\": \"紫色立体字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265635918487293219\",\n    \"title\": \"紫色渐变双色描边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7244842014347545889\",\n    \"title\": \"紫色立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7434403828629245223\",\n    \"title\": \"简约双层描边渐变紫色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7424527557699079487\",\n    \"title\": \"紫色骷髅立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7351056144141487375\",\n    \"title\": \"紫色花字音符纹理\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265645422692109568\",\n    \"title\": \"紫粉纯色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7279303499140107581\",\n    \"title\": \"紫色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7231341549659917625\",\n    \"title\": \"蓝紫渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7259998381869763851\",\n    \"title\": \"纯色紫色\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7268274152124075299\",\n    \"title\": \"简约紫色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7296422791732071717\",\n    \"title\": \"粉色渐变立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7405210233917787446\",\n    \"title\": \"紫色描边立体发光花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7289731248933850429\",\n    \"title\": \"渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7231466623775903032\",\n    \"title\": \"粉紫渐变黑边边花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7231026233994235173\",\n    \"title\": \"粉色渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7289731761637002551\",\n    \"title\": \"渐变花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7283154062273465612\",\n    \"title\": \"国庆旅行-手绘紫\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7312021669739007232\",\n    \"title\": \"紫色格子花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7254765522745675046\",\n    \"title\": \"可爱莫兰迪粉紫花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7400682062262406426\",\n    \"title\": \"白色斑点透明字体\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7430746445961022759\",\n    \"title\": \"紫色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7231693783568551208\",\n    \"title\": \"浅紫星空花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7265651955123359011\",\n    \"title\": \"粉紫纯色花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7231341416465714490\",\n    \"title\": \"紫色格子立体花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7231001538473233723\",\n    \"title\": \"圆点浅紫花字\",\n    \"is_vip\": true\n  },\n  {\n    \"id\": \"7020634468826238244\",\n    \"title\": \"潮酷 黑色紫光\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6927160254996172047\",\n    \"title\": \"可爱紫色立体花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6926825801383939336\",\n    \"title\": \"清新白色蓝色描边花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896144127935696136\",\n    \"title\": \"紫色渐变立体花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896137661153643784\",\n    \"title\": \"梦幻渐变紫边白色发光花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6926827744189828359\",\n    \"title\": \"潮酷紫色闪闪花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896143915192306958\",\n    \"title\": \"清新紫色立体字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"7127655008715279647\",\n    \"title\": \"蓝紫渐变花字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896144180993625357\",\n    \"title\": \"紫色投影立体字\",\n    \"is_vip\": false\n  },\n  {\n    \"id\": \"6896137727012506887\",\n    \"title\": \"清新粉紫色立体花字\",\n    \"is_vip\": false\n  }\n]"
  },
  {
    "path": "config.py",
    "content": "# 项目常量定义\nimport os\n\n\n# 项目根目录\nPROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))\n\n# 保存剪映草稿的目录\nDRAFT_DIR = os.path.join(PROJECT_ROOT, \"output\", \"draft\")\n\n# 日志目录\nLOG_DIR = os.path.join(PROJECT_ROOT, \"logs\")\n\n# 临时文件目录\nTEMP_DIR = os.path.join(PROJECT_ROOT, \"temp\")\n\n# 视频生成任务完成结果（SQLite 持久化）\nVIDEO_GEN_TASK_DB_PATH = os.path.join(PROJECT_ROOT, \"db\", \"video_gen_tasks.sqlite3\")\n\n# 视频生成任务：生成视频在 COS 上的可访问保留天数（预签名下载 URL 有效期，环境变量覆盖）\nVIDEO_GEN_RETENTION_DAYS = max(1, int(os.getenv(\"VIDEO_GEN_RETENTION_DAYS\", \"7\")))\n\n# 剪映草稿的下载路径\nDRAFT_URL = os.getenv(\"DRAFT_URL\", \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft\")\n\n# 将容器内的文件路径转成一个下载路径，执行替换操作，即将/app/ -> https://capcut-mate.jcaigc.cn/\nDOWNLOAD_URL = os.getenv(\"DOWNLOAD_URL\", \"https://capcut-mate.jcaigc.cn/\")\n\n# 草稿提示URL\nTIP_URL = os.getenv(\"TIP_URL\", \"https://docs.jcaigc.cn/\")\n\n# 贴纸配置文件路径\nSTICKER_CONFIG_PATH = os.path.join(os.path.dirname(__file__), \"config\", \"sticker.json\")\n\n# 花字配置文件路径\nHUAZI_CONFIG_PATH = os.path.join(os.path.dirname(__file__), \"config\", \"huazi.json\")\n\n# 模板目录路径\nTEMPLATE_DIR = os.path.join(os.path.dirname(__file__), \"template\")\n\n# 剪映草稿保存路径（下载剪映草稿保存位置）-- 云渲染必需配置\n#DRAFT_SAVE_PATH = \"C:/Users/Administrator/AppData/Local/JianyingPro/User Data/Projects/com.lveditor.draft\"\nDRAFT_SAVE_PATH = \"C:/Users/1/AppData/Local/JianyingPro/User Data/Projects/com.lveditor.draft\"\n\n# 腾讯云对象存储配置（优先）\nCOS_SECRET_ID = os.getenv(\"COS_SECRET_ID\", \"\")\nCOS_SECRET_KEY = os.getenv(\"COS_SECRET_KEY\", \"\")\nCOS_BUCKET_NAME = os.getenv(\"COS_BUCKET_NAME\", \"\")\nCOS_REGION = os.getenv(\"COS_REGION\", \"\")\n\n# 阿里云对象存储配置（COS 未配置时作为兜底）\nOSS_ACCESS_KEY_ID = os.getenv(\"OSS_ACCESS_KEY_ID\", \"\")\nOSS_ACCESS_KEY_SECRET = os.getenv(\"OSS_ACCESS_KEY_SECRET\", \"\")\nOSS_BUCKET_NAME = os.getenv(\"OSS_BUCKET_NAME\", \"\")\nOSS_ENDPOINT = os.getenv(\"OSS_ENDPOINT\", \"\")\n\n# APIKEY启用配置-默认启用 -- 云渲染必需配置（环境变量 true / false，大小写不敏感）\nENABLE_APIKEY = os.getenv(\"ENABLE_APIKEY\", \"true\").strip().lower() == \"true\"\n\n# 文件下载大小限制（字节），默认200MB\nDOWNLOAD_FILE_SIZE_LIMIT = int(os.getenv(\"DOWNLOAD_FILE_SIZE_LIMIT\", str(200 * 1024 * 1024)))\n"
  },
  {
    "path": "desktop-client/.gitignore",
    "content": "/node_modules\n/dist\n/ui\n/logs\napp-config.json\ndownload-log.json\n/.vscode\n.DS_Store\n.env\n.env.local\n.env.*.local\n/coverage\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n.vscode-test\n.idea\n*.sublime-workspace\n*.sublime-project\n*.log\n"
  },
  {
    "path": "desktop-client/.npmrc",
    "content": "ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/\nELECTRON_BUILDER_BINARIES_MIRROR=https://npmmirror.com/mirrors/electron-builder-binaries/\n"
  },
  {
    "path": "desktop-client/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 gogoshine\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.\n"
  },
  {
    "path": "desktop-client/assets/entitlements.mac.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n  <dict>\n    <!-- Enable app sandbox -->\n    <key>com.apple.security.app-sandbox</key>\n    <true/>\n    \n    <!-- File access permissions -->\n    <key>com.apple.security.files.user-selected.read-write</key>\n    <true/>\n    \n    <!-- Access to user's Downloads folder -->\n    <key>com.apple.security.files.downloads.read-write</key>\n    <true/>\n    \n    <!-- Access to user's Documents folder -->\n    <key>com.apple.security.files.documents.read-write</key>\n    <true/>\n    \n    <!-- Access to user's Pictures folder -->\n    <key>com.apple.security.files.pictures.read-write</key>\n    <true/>\n    \n    <!-- Access to user's Music folder -->\n    <key>com.apple.security.files.music.read-write</key>\n    <true/>\n    \n    <!-- Access to user's Movies folder -->\n    <key>com.apple.security.files.movies.read-write</key>\n    <true/>\n    \n    <!-- Network access -->\n    <key>com.apple.security.network.client</key>\n    <true/>\n    \n    <!-- Hardware access for media files -->\n    <key>com.apple.security.device.audio-input</key>\n    <false/>\n    <key>com.apple.security.device.camera</key>\n    <false/>\n  </dict>\n</plist>"
  },
  {
    "path": "desktop-client/main.js",
    "content": "const { app, BrowserWindow, dialog, shell } = require('electron');\nconst path = require('path');\nconst logger = require('./nodeapi/logger');\n\n// 引入IPC处理程序模块\nconst { setupIpcHandlers } = require('./nodeapi/ipcHandlers');\n\nlet mainWindow;\nlet ipcHandlersInitialized = false;\n\nfunction createWindow() {\n  // 避免重复创建窗口\n  if (mainWindow) {\n    mainWindow.show();\n    return mainWindow;\n  }\n\n  // 根据平台选择合适的图标格式\n  let iconPath;\n  if (process.platform === 'darwin') {\n    iconPath = path.join(__dirname, './assets/icons/logo.icns');\n  } else if (process.platform === 'win32') {\n    iconPath = path.join(__dirname, './assets/icons/logo.ico');\n  } else {\n    iconPath = path.join(__dirname, './assets/icons/logo.png');\n  }\n\n  mainWindow = new BrowserWindow({\n    width: 1366,\n    height: 868,\n    icon: iconPath,\n    show: false, // 创建窗口但先隐藏，等页面加载完成后再显示\n    webPreferences: {\n      nodeIntegration: false, // 禁用 Node.js 集成（出于安全考虑，强烈推荐）\n      contextIsolation: true, // 启用上下文隔离（Electron 12 后默认 true，推荐开启）\n      preload: path.join(__dirname, 'preload.js'), // 指定预加载脚本的绝对路径\n      // webSecurity: false, // 禁用web安全策略（可选，根据需求调整）\n      disableBlinkFeatures: 'OutOfBlinkCors', // 禁用某些Blink特性以提高性能\n      hardwareAcceleration: true // 启用硬件加速\n    }\n  });\n\n  // 在 macOS 上设置 Dock 图标\n  if (process.platform === 'darwin') {\n    app.dock.setIcon(path.join(__dirname, './assets/icons/logo.png'));\n  }\n\n  // 判断是否为开发模式\n  const isDev = process.env.NODE_ENV === 'development' || !app.isPackaged;\n  \n  // 加载React应用\n  if (isDev) {\n    // 开发模式下加载本地web服务\n    mainWindow.loadURL('http://localhost:9000');\n    // 开发模式下打开开发者工具\n    mainWindow.webContents.openDevTools();\n  } else {\n    // 生产模式下加载构建后的文件\n    mainWindow.loadFile(path.join(__dirname, 'ui', 'index.html'));\n  }\n\n  // 当页面加载完成后显示窗口\n  mainWindow.webContents.on('ready-to-show', () => {\n    mainWindow.show();\n  });\n\n  // 只初始化一次IPC处理程序\n  if (!ipcHandlersInitialized) {\n    setupIpcHandlers(mainWindow);\n    ipcHandlersInitialized = true;\n  }\n\n  mainWindow.on('closed', function () {\n    mainWindow = null;\n  });\n\n  return mainWindow;\n}\n\n// 处理未捕获的异常，特别是与文件权限相关的错误\nprocess.on('uncaughtException', (error) => {\n  logger.error('未捕获的异常:', error);\n  \n  // 在 macOS 沙箱环境下，某些权限错误可能在这里捕获\n  if (process.platform === 'darwin' && error.message && \n      (error.message.includes('Operation not permitted') || error.message.includes('EPERM'))) {\n    dialog.showMessageBoxSync({\n      type: 'error',\n      title: '权限错误',\n      message: '应用缺少必要的文件访问权限，请检查系统偏好设置中的隐私与安全性设置。',\n      detail: '请在 系统偏好设置 > 安全性与隐私 > 隐私 > 文件夹访问 中允许本应用访问相关文件夹。',\n      buttons: ['确定']\n    });\n  }\n});\n\n// 判断是否为需要外跳系统浏览器的外部链接\nfunction isExternalUrl(url) {\n  return url && (url.startsWith('http://') || url.startsWith('https://'));\n}\n\n// 全局拦截所有 webContents 的新窗口打开行为\napp.on('web-contents-created', (event, contents) => {\n  contents.setWindowOpenHandler(({ url }) => {\n    if (isExternalUrl(url)) {\n      shell.openExternal(url);\n      return { action: 'deny' };\n    }\n    return { action: 'allow' };\n  });\n});\n\n// 兜底：任何新窗口被创建时直接销毁并甩到系统浏览器\napp.on('browser-window-created', (event, window) => {\n  // 用 getAllWindows 判断：如果当前只有这一个窗口，说明是主窗口，放过\n  if (BrowserWindow.getAllWindows().length === 1) return;\n  // 检测不是外部链接则放过\n  const url = window.webContents.getURL();\n  if (!isExternalUrl(url)) return;\n\n  window.webContents.once('did-finish-load', () => {\n    shell.openExternal(url);\n    window.destroy();\n  });\n});\n\n// 当Electron完成初始化并准备创建浏览器窗口时调用此方法\napp.whenReady().then(() => {\n  createWindow();\n});\n\n// 当所有窗口都关闭时退出应用\napp.on('window-all-closed', () => {\n  // 在macOS上，应用及其菜单栏通常保持活动状态，直到用户使用Cmd + Q明确退出\n  if (process.platform !== 'darwin') {\n    app.quit();\n  }\n});\n\napp.on('activate', () => {\n  // 在macOS上，当单击dock图标时，如果没有任何窗口打开则创建一个，\n  // 否则显示已存在的窗口\n  if (BrowserWindow.getAllWindows().length === 0) {\n    createWindow();\n  } else {\n    // 如果已有窗口，确保它被显示和聚焦\n    if (mainWindow) {\n      if (mainWindow.isMinimized()) mainWindow.restore();\n      mainWindow.focus();\n    }\n  }\n});"
  },
  {
    "path": "desktop-client/nodeapi/download.js",
    "content": "const path = require(\"path\");\nconst axios = require(\"axios\");\nconst { app, dialog, shell } = require(\"electron\");\nconst { createWriteStream } = require(\"fs\");\nconst fs = require(\"fs\").promises; // 使用 fs.promises 进行异步文件操作\nconst logger = require(\"./logger\");\nconst { detectJianyingDraftRoot } = require(\"./draftPathDetect\");\nconst { v4: uuidv4 } = require('uuid');\n\nconst RECORD_MAX = 500;\n\nconst LOG_MAX = 2000;\n\nconst axiosConfig = {\n  method: \"GET\",\n  timeout: 30000, // 30秒超时\n  headers: {\n    // 添加常见的浏览器User-Agent\n    \"User-Agent\":\n      \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36\",\n  },\n};\n\nfunction isHttpUrl(value) {\n  if (!value || typeof value !== \"string\") return false;\n  try {\n    const parsed = new URL(value);\n    return parsed.protocol === \"http:\" || parsed.protocol === \"https:\";\n  } catch {\n    return false;\n  }\n}\n\nfunction inferMaterialSubDir(materialType, material) {\n  if (materialType === \"audios\") return \"audios\";\n  if (materialType === \"videos\") {\n    return material?.type === \"photo\" ? \"images\" : \"videos\";\n  }\n  return \"misc\";\n}\n\nfunction getFileExtFromUrl(url, fallbackExt = \".bin\") {\n  try {\n    const pathname = new URL(url).pathname || \"\";\n    const ext = path.extname(pathname);\n    return ext || fallbackExt;\n  } catch {\n    return fallbackExt;\n  }\n}\n\nfunction sanitizeFilename(value) {\n  if (!value || typeof value !== \"string\") return \"\";\n  return value.replace(/[\\\\/:*?\"<>|]/g, \"_\").trim();\n}\n\nasync function downloadRemoteMaterialFile(fileUrl, localPath) {\n  const response = await axios({\n    ...axiosConfig,\n    url: fileUrl,\n    responseType: \"stream\",\n  });\n  if (response.status !== 200) {\n    throw new Error(`[error] [material] request failed, status code: ${response.status}`);\n  }\n  await fs.mkdir(path.dirname(localPath), { recursive: true });\n  const writer = response.data.pipe(createWriteStream(localPath, { flags: \"w\", mode: 0o666 }));\n  await new Promise((resolve, reject) => {\n    writer.on(\"close\", resolve);\n    writer.on(\"error\", (err) => {\n      fs.unlink(localPath).catch(() => { });\n      reject(err);\n    });\n    response.data.on(\"error\", (err) => {\n      writer.destroy();\n      fs.unlink(localPath).catch(() => { });\n      reject(err);\n    });\n  });\n}\n\n/**\n * Windows 上“权限异常”多与只读属性有关；Node 对文件的 fs.chmod(0o666) 会清除只读位。\n * 下载完成后统一处理，避免 copyFile / 外部软件间歇性带上只读导致剪映无法改写素材。\n */\nasync function ensureWindowsDraftFilesWritable(rootDir) {\n  if (process.platform !== \"win32\" || !rootDir) return;\n  const stack = [rootDir];\n  while (stack.length) {\n    const current = stack.pop();\n    let entries;\n    try {\n      entries = await fs.readdir(current, { withFileTypes: true });\n    } catch {\n      continue;\n    }\n    for (const ent of entries) {\n      const full = path.join(current, ent.name);\n      if (ent.isSymbolicLink()) continue;\n      try {\n        if (ent.isDirectory()) {\n          stack.push(full);\n        } else if (ent.isFile()) {\n          await fs.chmod(full, 0o666);\n        }\n      } catch (e) {\n        logger.warn(`[perm] 无法调整文件权限（已跳过）: ${full} — ${e.message}`);\n      }\n    }\n  }\n}\n\nconst MAX_DOWNLOAD_ATTEMPTS = 6;\n\n/** 拉取 get_draft：首次请求 + 2 次重试（共 3 次），自开始起硬截止 3000ms 内必须结束 */\nconst GET_DRAFT_FETCH_MAX_ATTEMPTS = 3;\nconst GET_DRAFT_FETCH_DEADLINE_MS = 3000;\nconst GET_DRAFT_FETCH_PER_ATTEMPT_MAX_MS = 800;\nconst GET_DRAFT_FETCH_BACKOFF_MS = [120, 200];\n\nfunction isRetryableGetDraftError(error) {\n  if (!error) return false;\n  if (error.response) {\n    const status = error.response.status;\n    return status === 408 || status === 429 || status >= 500;\n  }\n  const code = error.code;\n  if (code === \"ENOTFOUND\" || code === \"ECONNREFUSED\") return false;\n  return true;\n}\n\nasync function requestGetDraftOnce(remoteUrl, timeoutMs) {\n  return axios({\n    ...axiosConfig,\n    url: remoteUrl,\n    responseType: \"json\",\n    timeout: timeoutMs,\n  });\n}\n\nasync function fetchGetDraftWithRetry(remoteUrl) {\n  const deadline = Date.now() + GET_DRAFT_FETCH_DEADLINE_MS;\n  const timeLeftMs = () => deadline - Date.now();\n  let lastError = null;\n\n  for (let attempt = 1; attempt <= GET_DRAFT_FETCH_MAX_ATTEMPTS; attempt++) {\n    if (timeLeftMs() <= 0) break;\n\n    if (attempt > 1) {\n      const planned = GET_DRAFT_FETCH_BACKOFF_MS[attempt - 2] ?? 100;\n      const wait = Math.min(planned, Math.max(0, timeLeftMs() - 1));\n      if (wait > 0) {\n        await new Promise((resolve) => setTimeout(resolve, wait));\n      }\n      if (timeLeftMs() <= 0) break;\n    }\n\n    const timeout = Math.min(\n      GET_DRAFT_FETCH_PER_ATTEMPT_MAX_MS,\n      Math.max(1, timeLeftMs())\n    );\n\n    try {\n      return await requestGetDraftOnce(remoteUrl, timeout);\n    } catch (error) {\n      lastError = error;\n      const willRetry =\n        attempt < GET_DRAFT_FETCH_MAX_ATTEMPTS &&\n        timeLeftMs() > 0 &&\n        isRetryableGetDraftError(error);\n      if (willRetry) {\n        logger.warn(\n          `[warn] get draft url attempt ${attempt}/${GET_DRAFT_FETCH_MAX_ATTEMPTS} failed: ${error.message}`\n        );\n        continue;\n      }\n      throw error;\n    }\n  }\n\n  throw lastError;\n}\n\nasync function retryDownloadTask(task, options = {}) {\n  const {\n    maxAttempts = MAX_DOWNLOAD_ATTEMPTS,\n    retryDelayMs = 1000,\n    onAttempt = null,\n    onRetry = null,\n    onExhausted = null,\n  } = options;\n\n  let lastError = null;\n  for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n    try {\n      if (typeof onAttempt === \"function\") {\n        await onAttempt(attempt, maxAttempts);\n      }\n      return await task(attempt, maxAttempts);\n    } catch (error) {\n      lastError = error;\n      const hasNextAttempt = attempt < maxAttempts;\n      if (hasNextAttempt) {\n        if (typeof onRetry === \"function\") {\n          await onRetry(error, attempt, maxAttempts);\n        }\n        if (retryDelayMs > 0) {\n          await new Promise((resolve) => setTimeout(resolve, retryDelayMs));\n        }\n        continue;\n      }\n      if (typeof onExhausted === \"function\") {\n        await onExhausted(error, attempt, maxAttempts);\n      }\n      throw error;\n    }\n  }\n\n  throw lastError || new Error(\"retryDownloadTask failed without explicit error\");\n}\n\nasync function localizeRemoteMaterialPaths(materials, draftRootDir, parentWindow, sharedCache = null) {\n  if (!materials || typeof materials !== \"object\") return;\n  const supportedTypes = [\"videos\", \"audios\"];\n  const cache = sharedCache instanceof Map ? sharedCache : new Map();\n\n  for (const materialType of supportedTypes) {\n    const list = materials[materialType];\n    if (!Array.isArray(list)) continue;\n    for (let i = 0; i < list.length; i++) {\n      const item = list[i];\n      if (!item || typeof item !== \"object\") continue;\n      if (!isHttpUrl(item.path)) continue;\n\n      const subDir = inferMaterialSubDir(materialType, item);\n      const fallbackExt = materialType === \"audios\" ? \".mp3\" : \".mp4\";\n      const ext = getFileExtFromUrl(item.path, fallbackExt);\n      const baseName = sanitizeFilename(item.material_name || item.name || item.id || uuidv4());\n      const fileName = baseName.toLowerCase().endsWith(ext.toLowerCase())\n        ? baseName\n        : `${baseName}${ext}`;\n      const localPath = path.join(draftRootDir, \"assets\", subDir, fileName);\n\n      if (!cache.has(item.path)) {\n        try {\n          await retryDownloadTask(\n            async () => {\n              await downloadRemoteMaterialFile(item.path, localPath);\n            },\n            {\n              onAttempt: async (attempt) => {\n                const attemptMessage = attempt === 1\n                  ? `正在下载 URL 素材到本地：${fileName}`\n                  : `正在下载 URL 素材到本地：${fileName}（第${attempt - 1}次重试）`;\n                await appendDownloadLog(\n                  {\n                    level: \"loading\",\n                    message: attemptMessage,\n                  },\n                  parentWindow\n                );\n              },\n              onRetry: async (err, attempt) => {\n                logger.warn(\n                  `[warn] 下载URL素材失败，准备重试(${attempt}/${MAX_DOWNLOAD_ATTEMPTS}): ${item.path}`,\n                  err?.message || err\n                );\n              },\n              onExhausted: async () => {\n                await appendDownloadLog(\n                  {\n                    level: \"error\",\n                    message: `URL 素材下载失败（已重试${MAX_DOWNLOAD_ATTEMPTS - 1}次，共尝试${MAX_DOWNLOAD_ATTEMPTS}次）：${fileName}`,\n                  },\n                  parentWindow\n                );\n              },\n            }\n          );\n          cache.set(item.path, localPath);\n        } catch (err) {\n          // URL 素材失败不影响同一草稿内其他文件下载，保留原 URL 路径。\n          logger.error(`[error] 下载URL素材失败，已达到重试上限: ${item.path}`, err);\n          continue;\n        }\n      }\n      item.path = cache.get(item.path);\n    }\n  }\n}\n\nfunction getConfigPath() {\n  return path.join(app.getPath(\"userData\"), \"app-config.json\");\n}\n\nasync function readConfig() {\n  const configPath = getConfigPath();\n  logger.info(\"[log] Config path:\", configPath);\n  try {\n    const data = await fs.readFile(configPath, \"utf8\");\n    return JSON.parse(data) || {};\n  } catch (error) {\n    return {};\n  }\n}\n\nasync function writeConfig(config) {\n  const configPath = getConfigPath();\n  try {\n    await fs.writeFile(configPath, JSON.stringify(config, null, 2), \"utf8\");\n    return true;\n  } catch (error) {\n    logger.error(\"写入配置文件失败:\", error);\n    return false;\n  }\n}\n\n/**\n * 未配置草稿路径时，按平台规则自动探测并写入配置。\n */\nasync function ensureAutoDetectedDraftPathInConfig() {\n  let config = await readConfig();\n  if (config.targetDirectory) {\n    return config;\n  }\n  const detected = await detectJianyingDraftRoot();\n  if (detected) {\n    config.targetDirectory = detected;\n    await writeConfig(config);\n    logger.info(\"[draft-detect] 已自动识别剪映草稿目录:\", detected);\n  }\n  return config;\n}\n\nfunction getDownloadLogPath() {\n  return path.join(app.getPath(\"userData\"), \"download-log.json\");\n}\n\nasync function readDownloadLog() {\n  const logPath = getDownloadLogPath();\n  logger.info(\"[log] Log path:\", logPath);\n  try {\n    const data = await fs.readFile(logPath, \"utf8\");\n    return JSON.parse(data);\n  } catch (error) {\n    return [];\n  }\n}\n\n/**\n *\n * @param {*} entry {time: Date, level: 'error', message: '日志内容' }\n */\nasync function appendDownloadLog(entry, parentWindow) {\n  const logPath = getDownloadLogPath();\n  let logs = [];\n  try {\n    logs = await readDownloadLog();\n  } catch (error) {\n    // 如果文件不存在或无法读取，初始化为空数组\n    logs = [];\n  }\n\n  entry.time = new Date();\n  console.log(`appendDownloadLog: ${JSON.stringify(entry)}`);\n  await parentWindow.webContents.send(\"file-operation-log\", entry);\n  logs.push(entry);\n  if (logs.length > LOG_MAX) {\n    logs.shift();\n  }\n  try {\n    await fs.writeFile(logPath, JSON.stringify(logs, null, 2), \"utf8\");\n  } catch (writeErr) {\n    logger.error(\"写入日志文件失败:\", writeErr);\n  }\n}\n\nasync function clearDownloadLog() {\n  const logPath = getDownloadLogPath();\n  try {\n    await fs.writeFile(logPath, JSON.stringify([], null, 2), \"utf8\");\n    return true;\n  } catch (error) {\n    logger.error(\"清空日志文件失败:\", error);\n    return false;\n  }\n}\n\nfunction getHistoryRecordPath() {\n  return path.join(app.getPath(\"userData\"), \"history-record.json\");\n}\n\nasync function readHistoryRecord() {\n  const recordPath = getHistoryRecordPath();\n  console.info(\"[History] Record path:\", recordPath);\n  try {\n    const data = await fs.readFile(recordPath, \"utf8\");\n    return JSON.parse(data);\n  } catch (error) {\n    return [];\n  }\n}\n\n/**\n *\n * @param {*} entry {id: 'uuid', time: Date, draft_id: 'draft_id' draft_url: 'draft_url' }\n */\nasync function appendHistoryRecord(entry) {\n  const recordPath = getHistoryRecordPath();\n  let records = [];\n  try {\n    records = await readHistoryRecord();\n  } catch (error) {\n    // 如果文件不存在或无法读取，初始化为空数组\n    records = [];\n  }\n\n  console.log(`appendHistoryRecord: ${JSON.stringify(entry)}`);\n  records.push(entry);\n  if (records.length > RECORD_MAX) {\n    records.shift();\n  }\n  try {\n    await fs.writeFile(recordPath, JSON.stringify(records, null, 2), \"utf8\");\n  } catch (writeErr) {\n    console.error(\"写入草稿历史记录文件失败:\", writeErr);\n  }\n}\n\n// 更精确的错误处理\nfunction errorHandler(error = {}, url = \"\") {\n  if (error.code === \"ECONNREFUSED\") {\n    throw new Error(`[error] not connect to server: ${url}`);\n  } else if (error.code === \"ENOTFOUND\") {\n    throw new Error(`[error] domain not found: ${url}`);\n  } else if (error.response) {\n    // 服务器返回了错误状态码（如4xx, 5xx）\n    throw new Error(`[error] server error (${error.response.status}): ${url}`);\n  } else {\n    throw error; // 重新抛出其他未知错误\n  }\n}\n\nasync function getDraftUrls(remoteUrl, parentWindow) {\n  logger.info(\"[info] get draft url\");\n  try {\n    const response = await fetchGetDraftWithRetry(remoteUrl);\n\n    // 检查HTTP状态码\n    if (response.status !== 200) {\n      await appendDownloadLog(\n        { level: \"error\", message: `获取草稿地址信息失败` },\n        parentWindow\n      );\n      throw new Error(\n        `[error] [draft url] request failed, status code: ${response.status}`\n      );\n    }\n    logger.info(\"[success] get draft url\");\n    return response.data;\n  } catch (error) {\n    errorHandler(error, remoteUrl);\n  }\n}\n\nasync function updateDraftPath(parentWindow) {\n  const targetDir = await getTargetDirectory(parentWindow, true);\n  if (!targetDir) {\n    return { success: false, error: \"用户取消了目录选择\" };\n  }\n  try {\n    // 验证目录权限\n    try {\n      await fs.access(targetDir, fs.constants.R_OK | fs.constants.W_OK);\n    } catch (accessError) {\n      logger.error('所选目录无读写权限:', accessError);\n      // 尝试使用 dialog 显示错误消息\n      if (parentWindow) {\n        const { dialog } = require('electron');\n        await dialog.showMessageBox(parentWindow, {\n          type: 'error',\n          title: '权限不足',\n          message: '所选目录没有足够的读写权限，请选择其他目录。',\n          buttons: ['确定']\n        });\n      }\n      return { success: false, error: '所选目录没有足够的读写权限' };\n    }\n\n    const configPath = getConfigPath();\n    let config = {};\n\n    // 尝试读取现有配置\n    try {\n      const data = await fs.readFile(configPath, \"utf8\");\n      config = JSON.parse(data);\n    } catch (error) {\n      // 如果文件不存在，保持config为空对象\n    }\n\n    config.targetDirectory = targetDir;\n\n    // 写回配置文件\n    await fs.writeFile(configPath, JSON.stringify(config, null, 2), 'utf8');\n    logger.info('默认草稿路径已更新为:', targetDir);\n    return { success: true, targetDir };\n  } catch (error) {\n    logger.error('更新默认草稿路径失败:', error);\n    return { success: false, error: error.message };\n  }\n}\n\n// 提取出来的函数，可选参数parentWindow用于显示对话框时附加到对话框\nasync function getTargetDirectory(parentWindow = null, isUpdate = false) {\n  let config = await readConfig();\n  if (!isUpdate && config.targetDirectory) {\n    try {\n      await fs.access(config.targetDirectory, fs.constants.R_OK | fs.constants.W_OK);\n      return config.targetDirectory;\n    } catch (accessErr) {\n      logger.warn(\n        \"配置的目录已不存在或无访问权限，将清除并尝试自动识别或手动选择。\",\n        accessErr.message\n      );\n      delete config.targetDirectory;\n      await writeConfig(config);\n    }\n  }\n\n  if (!isUpdate) {\n    config = await ensureAutoDetectedDraftPathInConfig();\n    if (config.targetDirectory) {\n      try {\n        await fs.access(config.targetDirectory, fs.constants.R_OK | fs.constants.W_OK);\n        return config.targetDirectory;\n      } catch (e) {\n        logger.warn(\"自动识别的草稿目录不可读写，将打开目录选择:\", e.message);\n        delete config.targetDirectory;\n        await writeConfig(config);\n      }\n    }\n  }\n\n  const dialogOptions = {\n    properties: [\"openDirectory\", \"createDirectory\"], // 允许创建新目录\n    title: \"请选择目标目录\",\n    buttonLabel: \"选择此目录\",\n    defaultPath: isUpdate ? config.targetDirectory : undefined\n  };\n\n  // 如果有父窗口，则附加到父窗口\n  if (parentWindow) {\n    dialogOptions.window = parentWindow;\n  }\n\n  const result = await dialog.showOpenDialog(dialogOptions);\n\n  if (!result.canceled && result.filePaths.length > 0) {\n    const selectedDir = result.filePaths[0];\n    \n    // 再次验证目录权限\n    try {\n      await fs.access(selectedDir, fs.constants.R_OK | fs.constants.W_OK);\n    } catch (accessErr) {\n      logger.error('所选目录无读写权限:', accessErr);\n      if (parentWindow) {\n        const { dialog } = require('electron');\n        await dialog.showMessageBox(parentWindow, {\n          type: 'error',\n          title: '权限不足',\n          message: '所选目录没有足够的读写权限，请重新选择。',\n          buttons: ['确定']\n        });\n      }\n      return ''; // 返回空字符串表示失败\n    }\n    \n    config.targetDirectory = selectedDir;\n    await writeConfig(config);\n    return selectedDir;\n  } else {\n    return '';\n  }\n}\n\nfunction updateValue(current, finalKey, targetDir, oldVal, targetId) {\n  if (oldVal) {\n    // 找到ID在路径中的位置\n    const idIndex = oldVal.indexOf(targetId);\n    if (idIndex === -1) return;\n\n    // 提取ID及之后的部分作为将要下载的路径\n    const relativePath = oldVal.substring(idIndex).replaceAll(\"/\", path.sep); // 替换为系统路径分隔符\n    // targetDir 已包含 targetId 目录，所以relativePath中的targetId要去重\n    const newRelativePath = relativePath.replace(`${targetId}${path.sep}`, \"\");\n    const newValue = path.join(targetDir, newRelativePath);\n    current[finalKey] = newValue;\n\n    logger.info(`✅ newValue to:`, newValue);\n  }\n}\n\n// 递归遍历对象，更新所有名为path的属性\nfunction recursivelyUpdatePaths(obj, targetDir, targetId) {\n  // 处理数组\n  if (Array.isArray(obj)) {\n    obj.forEach((item) => {\n      recursivelyUpdatePaths(item, targetDir, targetId);\n    });\n    return;\n  }\n\n  // 处理对象\n  if (obj && typeof obj === \"object\") {\n    // 检查是否有path属性\n    if (obj.path && typeof obj.path === \"string\") {\n      updateValue(obj, \"path\", targetDir, obj.path, targetId);\n    }\n\n    // 递归处理所有属性\n    for (const key in obj) {\n      if (obj.hasOwnProperty(key)) {\n        recursivelyUpdatePaths(obj[key], targetDir, targetId);\n      }\n    }\n  }\n}\n\n// 带错误处理的JSON文件下载\nasync function downloadJsonFile(\n  { fileUrl, filePath, targetDir, targetId, materialDownloadCache },\n  parentWindow\n) {\n  // 1. 使用 Axios 下载 JSON 文件\n  try {\n    const response = await axios({\n      method: \"GET\",\n      url: fileUrl,\n      responseType: \"json\", // 直接告诉 Axios 解析 JSON\n    });\n\n    // 检查HTTP状态码\n    if (response.status !== 200) {\n      await appendDownloadLog(\n        { level: \"error\", message: `下载草稿内容文件失败` },\n        parentWindow\n      );\n      throw new Error(\n        `[error] [json] request failed, status code: ${response.status}`\n      );\n    }\n\n    // 2. 解析获取到的数据（Axios 会根据 responseType: 'json' 自动解析）\n    const jsonData = response.data;\n\n    // 3. 修改 JSON 数据中指定键的值\n    if (jsonData?.materials) {\n      logger.info(`[log] start modifyJsonValue: materials`);\n      recursivelyUpdatePaths(jsonData.materials, targetDir, targetId);\n      // 当素材 path 为 URL 时，下载到本地并回写为本地路径。\n      await localizeRemoteMaterialPaths(\n        jsonData.materials,\n        targetDir,\n        parentWindow,\n        materialDownloadCache\n      );\n    }\n\n    await appendDownloadLog(\n      {\n        level: \"loading\",\n        message: `正在将草稿内容文件写入本地草稿目录 ${targetDir}`,\n      },\n      parentWindow\n    );\n\n    // 4. 将修改后的 JSON 对象转换为格式化的字符串并写入本地文件\n    const jsonString = JSON.stringify(jsonData, null, 2); // 使用 2 个空格进行缩进，美化输出\n    await fs.writeFile(filePath, jsonString, { encoding: \"utf8\", mode: 0o666 });\n  } catch (error) {\n    logger.error(`下载JSON文件失败: ${fileUrl}`, error);\n    throw error;\n  }\n}\n\nasync function downloadNotJsonFile(\n  { fileUrl, filePath, targetDir },\n  parentWindow\n) {\n  try {\n    // 1. 使用 Axios 下载非 JSON 文件\n    const response = await axios({\n      ...axiosConfig,\n      url: fileUrl,\n      responseType: \"stream\", // 设置响应类型为 'stream' 以处理大文件\n    });\n\n    // 检查HTTP状态码\n    if (response.status !== 200) {\n      await appendDownloadLog(\n        { level: \"error\", message: `下载草稿内容文件失败` },\n        parentWindow\n      );\n      throw new Error(\n        `[error] [stream] request failed, status code: ${response.status}`\n      );\n    }\n\n    logger.info(`[log] start create writable stream: ${filePath}`);\n\n    await appendDownloadLog(\n      {\n        level: \"loading\",\n        message: `正在将草稿内容文件写入本地草稿目录 ${targetDir}`,\n      },\n      parentWindow\n    );\n\n    // 创建可写流\n    // 显式指定 flags 和 mode，避免 Windows 下文件句柄共享模式异常\n    const writer = response.data.pipe(createWriteStream(filePath, { flags: \"w\", mode: 0o666 }));\n\n    return new Promise((resolve, reject) => {\n      // 监听 close 而非 finish：finish 仅表示数据写完，close 才表示文件句柄已释放\n      // 在 Windows 上，句柄未释放时其他进程访问该文件会出现权限异常（EACCES）\n      writer.on(\"close\", resolve);\n      writer.on(\"error\", (err) => {\n        // 尝试删除可能不完整的文件\n        fs.unlink(filePath).catch(() => { });\n        reject(new Error(`[error] write file failed: ${err.message}`));\n      });\n      response.data.on(\"error\", (err) => {\n        reject(new Error(`[error] download stream error: ${err.message}`));\n      });\n    });\n  } catch (error) {\n    logger.error(`下载非JSON文件失败: ${fileUrl}`, error);\n    // 不使用errorHandler，直接抛出错误以便上层进行重试\n    throw error;\n  }\n}\n\n/**\n * 下载单个文件并保存到指定路径的辅助函数\n * @param {string} url 远程文件的URL\n * @param {string} filePath 要保存到的本地文件路径\n */\nasync function downloadSingleFile(config, parentWindow) {\n  const filePath = config.filePath;\n  const fileUrl = config.fileUrl;\n  const fileName = path.basename(filePath);\n\n  // 已知 draft_content.json 与 draft_info.json 内容一致时，直接复用，避免重复构建与重复下载 URL 素材。\n  if (fileName === \"draft_info.json\") {\n    const contentFilePath = path.join(path.dirname(filePath), \"draft_content.json\");\n    try {\n      await fs.access(contentFilePath, fs.constants.R_OK);\n      await fs.copyFile(contentFilePath, filePath);\n      logger.info(`[log] draft_info.json 直接复用 draft_content.json: ${filePath}`);\n      return;\n    } catch {\n      // draft_content.json 不存在时回退到原逻辑，保证兼容。\n    }\n  }\n\n  if (fileUrl.endsWith(\".json\")) {\n    logger.info(`[log] start download json file : ${filePath}`);\n    await downloadJsonFile(config, parentWindow);\n  } else {\n    logger.info(`[log] start download non-json file : ${filePath}`);\n    await downloadNotJsonFile(config, parentWindow);\n  }\n}\n\n/**\n * 触发目录扫描，激活剪映的目录发现机制\n * 原理：将草稿目录复制到临时目录，触发文件系统变更通知，让剪映无需重启即可感知到新草稿\n * - Windows：使用 robocopy（内置工具，返回码 0-7 均为成功）\n * - macOS：使用 rsync（触发 FSEvents 变更通知）\n * @param {string} targetDir 草稿目录路径\n */\nasync function triggerDirectoryScan(targetDir) {\n  if (!targetDir) return;\n\n  try {\n    await fs.access(targetDir);\n  } catch {\n    // 目录不存在则跳过\n    return;\n  }\n\n  const tmpDir = targetDir + \".tmp\";\n  const { execFile } = require(\"child_process\");\n  const platform = process.platform;\n\n  await new Promise((resolve) => {\n    if (platform === \"win32\") {\n      // Windows：使用 robocopy 触发 ReadDirectoryChangesW 通知\n      const args = [\n        targetDir,\n        tmpDir,\n        \"/E\",        // 递归复制所有子目录\n        \"/COPY:DAT\", // 复制数据、属性和时间戳（无需管理员权限）\n        \"/R:1\",      // 失败重试1次\n        \"/W:1\",      // 重试等待1秒\n        \"/NP\",       // 不显示进度百分比\n        \"/NJH\",      // 不显示作业头\n        \"/NJS\",      // 不显示作业摘要\n      ];\n      execFile(\"robocopy\", args, { windowsHide: true }, (err) => {\n        // robocopy 返回码 0-7 均表示成功或正常状态，8+ 才是错误\n        const code = err ? err.code : 0;\n        if (typeof code === \"number\" && code >= 8) {\n          logger.warn(`[scan] Windows 触发目录扫描失败，robocopy 返回码: ${code}`);\n        } else {\n          logger.info(`[scan] Windows 触发目录扫描完成，robocopy 返回码: ${code}`);\n        }\n        resolve();\n      });\n    } else if (platform === \"darwin\") {\n      // macOS：使用 rsync 触发 FSEvents 变更通知\n      // -a: 归档模式（递归+保留属性），触发目录写入事件\n      execFile(\"rsync\", [\"-a\", targetDir + \"/\", tmpDir], (err) => {\n        if (err) {\n          logger.warn(`[scan] macOS 触发目录扫描失败: ${err.message}`);\n        } else {\n          logger.info(`[scan] macOS 触发目录扫描完成`);\n        }\n        resolve();\n      });\n    } else {\n      logger.info(`[scan] 当前平台 ${platform} 不支持触发目录扫描，跳过`);\n      resolve();\n    }\n  });\n\n  // 清理临时目录\n  try {\n    await fs.rm(tmpDir, { recursive: true, force: true });\n  } catch (e) {\n    logger.warn(`[scan] 清理临时目录失败 ${tmpDir}: ${e.message}`);\n  }\n}\n\n// 打开目录\nasync function openDraftDirectory(dirPath) {\n  try {\n    const errorMsg = await shell.openPath(dirPath);\n    if (errorMsg) {\n      logger.error(`[error] Failed to open path: ${errorMsg}`);\n      return { success: false, error: errorMsg };\n    }\n    return { success: true };\n  } catch (error) {\n    logger.error(`[error] Error opening path: ${error}`);\n    return { success: false, error: error.message };\n  }\n}\n\n// 获取目标文件路径\n// 解析URL并创建必要的目录结构\nasync function getTargetFilePath(fileUrl, baseTargetDir, targetId) {\n  const urlObj = new URL(fileUrl);\n  let fullPath = urlObj.pathname;\n\n  // 找到ID在路径中的位置\n  const idIndex = fullPath.indexOf(targetId);\n  if (idIndex === -1) return null;\n\n  // 提取ID及之后的部分作为将要下载的路径\n  const relativePath = fullPath.substring(idIndex).replaceAll(\"/\", path.sep); // 替换为系统路径分隔符\n  const fullTargetPath = path.join(baseTargetDir, relativePath);\n  const targetDir = path.dirname(fullTargetPath);\n\n  logger.info(\"[log] fullTargetPath: \" + fullTargetPath);\n  logger.info(\"[log] targetDir: \" + targetDir);\n\n  // 确保目标目录存在\n  try {\n    await fs.mkdir(targetDir, { recursive: true }); // recursive: true 可以创建多级目录\n  } catch (mkdirError) {\n    logger.error(`创建目录失败: ${targetDir}`, mkdirError);\n    throw mkdirError;\n  }\n\n  return { fullTargetPath, targetDir };\n}\n\n// 带重试机制的单个文件下载\n// 实现单个文件最多下载6次（首轮+最多5次重试）\nasync function downloadFileWithRetry(config, parentWindow, fileIndex) {\n  // 获取文件名用于日志显示\n  const fileName = path.basename(config.filePath);\n  try {\n    await retryDownloadTask(\n      async () => {\n        await downloadSingleFile(config, parentWindow);\n      },\n      {\n        onAttempt: async (attempt, maxAttempts) => {\n          const attemptMessage = attempt === 1\n            ? `正在下载草稿内容文件: ${fileName} (第${fileIndex}个文件)`\n            : `正在下载草稿内容文件: ${fileName} (第${fileIndex}个文件)（第${attempt - 1}次重试）`;\n          await appendDownloadLog(\n            {\n              level: \"loading\",\n              message: attemptMessage,\n            },\n            parentWindow\n          );\n          logger.info(\n            `[log] start get file context : ${config.fileUrl}, attempt: ${attempt}/${maxAttempts}`\n          );\n        },\n        onRetry: async (error, attempt, maxAttempts) => {\n          logger.error(\n            `[error] download file ${config.fileUrl} failed (attempt ${attempt}/${maxAttempts}):`,\n            error\n          );\n        },\n        onExhausted: async (error, attempt, maxAttempts) => {\n          logger.error(\n            `[error] download file ${config.fileUrl} exhausted retries (attempt ${attempt}/${maxAttempts}):`,\n            error\n          );\n          await appendDownloadLog(\n            {\n              level: \"error\",\n              message: `第 ${fileIndex} 个草稿信息文件下载失败（已重试${maxAttempts - 1}次，共尝试${maxAttempts}次）`,\n            },\n            parentWindow\n          );\n        },\n      }\n    );\n\n    logger.info(`[log] file saved to : ${config.filePath}`);\n    await appendDownloadLog(\n      { level: \"success\", message: `第 ${fileIndex} 个草稿信息文件保存成功` },\n      parentWindow\n    );\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n// 批量下载文件主函数\nasync function downloadFiles(\n  { sourceUrl, remoteFileUrls, targetId, isOpenDir },\n  parentWindow\n) {\n  try {\n    let baseTargetDir = \"\";\n    // 然后获取目标目录，将主窗口作为父窗口传递\n    try {\n      baseTargetDir = await getTargetDirectory(parentWindow);\n    } catch (error) {\n      logger.error(\"[log] get target dir fail:\", error);\n      baseTargetDir = '';\n    }\n\n    if (!baseTargetDir) {\n      await appendDownloadLog(\n        { level: \"error\", message: `获取目录失败` },\n        parentWindow\n      );\n      return;\n    }\n\n    logger.info(\"[log] get target dir:\", baseTargetDir);\n\n    await appendDownloadLog(\n      { level: \"info\", message: `创建剪映草稿目录：${targetId}` },\n      parentWindow\n    );\n\n    let successCount = 0;\n    let failureCount = 0;\n    const materialDownloadCache = new Map();\n    \n    // 2. 遍历远程文件URL数组\n    for (let i = 0; i < remoteFileUrls.length; i++) {\n      const fileUrl = remoteFileUrls[i];\n      const fileIndex = i + 1; // 文件索引从1开始\n      \n      try {\n        // 获取目标文件路径\n        const targetPaths = await getTargetFilePath(fileUrl, baseTargetDir, targetId);\n        \n        if (!targetPaths) {\n          logger.error(`[error] 无法获取第 ${fileIndex} 个文件的目标路径: ${fileUrl}`);\n          await appendDownloadLog(\n            { level: \"error\", message: `第 ${fileIndex} 个草稿信息文件路径解析失败` },\n            parentWindow\n          );\n          failureCount++;\n          continue; // 跳过当前文件\n        }\n        \n        const { fullTargetPath, targetDir } = targetPaths;\n        \n        // 带重试机制的下载文件\n        const downloadSuccess = await downloadFileWithRetry(\n          { fileUrl, filePath: fullTargetPath, targetDir, targetId, materialDownloadCache },\n          parentWindow,\n          fileIndex\n        );\n        \n        if (downloadSuccess) {\n          successCount++;\n        } else {\n          failureCount++;\n        }\n      } catch (error) {\n        logger.error(`[error] 处理第 ${fileIndex} 个文件时发生错误:`, error);\n        await appendDownloadLog(\n          { level: \"error\", message: `第 ${fileIndex} 个草稿信息文件处理失败` },\n          parentWindow\n        );\n        failureCount++;\n      }\n    }\n    \n    // 输出最终统计结果\n    await appendDownloadLog(\n      {\n        level: \"all\",\n        message: `下载完成：共 ${remoteFileUrls.length} 个文件，成功 ${successCount} 个，失败 ${failureCount} 个`\n      },\n      parentWindow\n    );\n\n    // {id: 'uuid', time: Date, draft_id: 'draft_id', draft_url: 'draft_url' }\n    await appendHistoryRecord({\n      id: uuidv4(),\n      time: new Date(),\n      draft_id: targetId,\n      draft_url: sourceUrl,\n    });\n    const jointPath = path.join(baseTargetDir, targetId);\n    logger.info(`[finish] all download: ${jointPath}`);\n\n    await ensureWindowsDraftFilesWritable(jointPath);\n\n    // 触发剪映目录扫描，使剪映无需重启即可识别新草稿\n    await triggerDirectoryScan(jointPath);\n\n    if (isOpenDir) await openDraftDirectory(jointPath);\n    \n    return {\n      success: true,\n      message: `文件批量保存完成，保存至目录: ${jointPath}，成功 ${successCount} 个，失败 ${failureCount} 个`,\n    };\n  } catch (error) {\n    logger.error(`[error] 批量保存过程发生错误:`, error);\n\n    await appendDownloadLog(\n      {\n        level: \"error\",\n        message: `下载失败：批量保存 ${targetId} 中的剪映草稿过程发生错误！`,\n      },\n      parentWindow\n    );\n    return { success: false, message: `保存失败: ${error.message} ` };\n  }\n}\n\nasync function checkUrlAccessRight(url) {\n  try {\n    const response = await axios({\n      ...axiosConfig,\n      method: 'HEAD',\n      url: url,\n      timeout: 5000\n    });\n    logger.info(`URL Accessibility Check Result: ${url} - ${response.status}`);\n    return { accessible: response.status < 400 };\n  } catch (error) {\n    logger.error(`URL Accessibility Check Failed: ${url}`, error);\n    return { accessible: false, error: error.message };\n  }\n}\n\nmodule.exports = {\n  readDownloadLog,\n  clearDownloadLog,\n\n  updateDraftPath,\n\n  readConfig,\n  ensureAutoDetectedDraftPathInConfig,\n\n  getDraftUrls,\n\n  downloadFiles,\n\n  checkUrlAccessRight,\n\n  readHistoryRecord\n};\n"
  },
  {
    "path": "desktop-client/nodeapi/draftPathDetect.js",
    "content": "const path = require(\"path\");\nconst fs = require(\"fs\").promises;\nconst os = require(\"os\");\nconst logger = require(\"./logger\");\n\n/** Windows 下相对用户主目录的剪映草稿根路径后缀 */\nconst DRAFT_REL_WIN = path.join(\n  \"AppData\",\n  \"Local\",\n  \"JianyingPro\",\n  \"User Data\",\n  \"Projects\",\n  \"com.lveditor.draft\"\n);\n\n/**\n * 目录下存在 root_meta_info.json 或 .recycle_bin 子目录时，认为是剪映草稿根目录。\n */\nasync function isConfirmedJianyingDraftDir(dir) {\n  try {\n    await fs.access(dir, fs.constants.R_OK | fs.constants.W_OK);\n  } catch {\n    return false;\n  }\n  const metaPath = path.join(dir, \"root_meta_info.json\");\n  try {\n    const st = await fs.stat(metaPath);\n    if (st.isFile()) return true;\n  } catch {\n    // ignore\n  }\n  try {\n    const st = await fs.stat(path.join(dir, \".recycle_bin\"));\n    if (st.isDirectory()) return true;\n  } catch {\n    // ignore\n  }\n  return false;\n}\n\nasync function detectWindowsDraftPath() {\n  const usersDir = path.join(process.env.SystemDrive || \"C:\", \"Users\");\n  const ordered = [];\n  const seen = new Set();\n  const push = (p) => {\n    const norm = path.normalize(p);\n    if (seen.has(norm)) return;\n    seen.add(norm);\n    ordered.push(norm);\n  };\n\n  push(path.join(os.homedir(), DRAFT_REL_WIN));\n\n  try {\n    const names = await fs.readdir(usersDir);\n    for (const name of names) {\n      const userRoot = path.join(usersDir, name);\n      try {\n        const st = await fs.stat(userRoot);\n        if (!st.isDirectory()) continue;\n      } catch {\n        continue;\n      }\n      push(path.join(userRoot, DRAFT_REL_WIN));\n    }\n  } catch (e) {\n    logger.warn(\"[draft-detect] Windows Users 目录扫描失败:\", e.message);\n  }\n\n  for (const dir of ordered) {\n    if (await isConfirmedJianyingDraftDir(dir)) {\n      return dir;\n    }\n  }\n  return null;\n}\n\nasync function detectMacDraftPath() {\n  const home = os.homedir();\n  const candidates = [\n    path.join(home, \"Movies\", \"CapCut\", \"User Data\", \"Projects\", \"com.lveditor.draft\"),\n    path.join(home, \"Movies\", \"JianyingPro\", \"User Data\", \"Projects\", \"com.lveditor.draft\"),\n  ];\n  for (const dir of candidates) {\n    if (await isConfirmedJianyingDraftDir(dir)) return dir;\n  }\n  return null;\n}\n\n/**\n * 按平台自动探测剪映草稿根目录（com.lveditor.draft）。\n * @returns {Promise<string|null>}\n */\nasync function detectJianyingDraftRoot() {\n  if (process.platform === \"win32\") {\n    return detectWindowsDraftPath();\n  }\n  if (process.platform === \"darwin\") {\n    return detectMacDraftPath();\n  }\n  return null;\n}\n\nmodule.exports = {\n  detectJianyingDraftRoot,\n};\n"
  },
  {
    "path": "desktop-client/nodeapi/ipcHandlers.js",
    "content": "const { ipcMain, dialog, app } = require('electron');\n\n// 引入logger模块\nconst logger = require('./logger');\n\n// 引入axios\nconst axios = require('axios');\n\n// 引入download.js模块\nconst {\n  readDownloadLog,\n  clearDownloadLog,\n  getDraftUrls,\n  updateDraftPath,\n  downloadFiles,\n  ensureAutoDetectedDraftPathInConfig,\n  checkUrlAccessRight,\n  readHistoryRecord,\n} = require('./download');\n\nconsole.log(process.versions.electron);\nconsole.log(process.versions.chrome);\n\n// 接收mainWindow作为参数\nfunction setupIpcHandlers(mainWindow) {\n\n  ipcMain.handle('get-download-log', async (event) => {\n    return await readDownloadLog();\n  });\n\n  ipcMain.handle('clear-download-log', async (event) => {\n    return await clearDownloadLog();\n  });\n\n  ipcMain.handle('get-url-json-data', async (event, remoteUrl) => {\n    try {\n      return await getDraftUrls(remoteUrl, mainWindow);\n    } catch (error) {\n      logger.error(`[error] get draft url:`, error);\n      return {};\n    }\n  });\n\n  ipcMain.handle('save-file', async (event, config) => {\n    await downloadFiles(config, mainWindow);\n  });\n\n  ipcMain.handle('show-message-box', async (event, options) => {\n    return await dialog.showMessageBox(mainWindow, {\n      type: options.type || 'info',\n      title: options.title || '提示',\n      message: options.message || '',\n      buttons: ['确定'],\n      noLink: true, // 防止按钮以链接样式显示，这通常会使按钮更小更紧凑\n      normalizeAccessKeys: true // 标准化访问键，确保按钮文本格式一致\n    });\n  });\n\n  ipcMain.handle('get-config-data', async (event) => {\n    return await ensureAutoDetectedDraftPathInConfig();\n  });\n\n  // 设置默认草稿路径\n  ipcMain.handle('update-draft-path', async (event) => {\n    return await updateDraftPath(mainWindow);\n  });\n\n  // 在默认浏览器中打开URL\n  ipcMain.handle('open-external-url', async (event, url) => {\n    try {\n      const { shell } = require('electron');\n      await shell.openExternal(url);\n      logger.info(`已在默认浏览器中打开URL: ${url}`);\n      return { success: true };\n    } catch (error) {\n      logger.error(`打开URL失败: ${url}`, error);\n      return { success: false, error: error.message };\n    }\n  });\n  \n  // 检测URL是否可访问\n  ipcMain.handle('check-url-access', async (event, url) => {\n    return await checkUrlAccessRight(url);\n  });\n\n  ipcMain.handle('get-history-record', async (event) => {\n    return await readHistoryRecord();\n  });\n\n  ipcMain.handle('get-app-version', async () => {\n    return app.getVersion();\n  });\n}\n\nmodule.exports = { setupIpcHandlers };"
  },
  {
    "path": "desktop-client/nodeapi/logger.js",
    "content": "// logger.js\nconst log4js = require('log4js');\nconst path = require('path');\nconst { app } = require('electron');\n\nlog4js.configure({\n    appenders: {\n        // 定义一个按日期分割的日志文件追加器\n        dateFile: {\n            type: 'dateFile',\n            filename: path.join(app.getPath('userData'), 'logs', 'app.log'), // 日志文件路径\n            pattern: 'yyyy-MM-dd', // 按天分割\n            compress: false, // 是否压缩备份文件\n            keepFileExt: true, // 保持.log扩展名\n            numBackups: 7 // 保留最近7天的备份\n        },\n        // 同时输出到控制台\n        console: { type: 'console' }\n    },\n    categories: {\n        default: {\n            appenders: ['dateFile', 'console'],\n            level: 'info' // 默认日志级别\n        }\n    }\n});\n\nconst logger = log4js.getLogger();\nmodule.exports = logger;"
  },
  {
    "path": "desktop-client/package.json",
    "content": "{\n  \"name\": \"capcut-mate\",\n  \"version\": \"0.0.100\",\n  \"description\": \"剪映小助手，用于下载剪映草稿\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"start\": \"electron --enable-logging --v=1 .\",\n    \"web:dev\": \"npm --prefix web run dev\",\n    \"web:ci\": \"npm --prefix web ci\",\n    \"web:i\": \"npm --prefix web install\",\n    \"web:build\": \"npm --prefix web run build\",\n    \"build-win\": \"electron-packager . CapCut-Mate --platform=win32 --arch=x64 --out dist --overwrite --icon=assets/icons/logo.ico --ignore=.gitignore --ignore=.github --ignore=README.md --ignore=scripts --ignore=web\",\n    \"build-mac\": \"electron-packager . CapCut-Mate --platform=darwin --arch=arm64 --out dist --overwrite --icon=assets/icons/logo.icns --ignore=.gitignore --ignore=.github --ignore=README.md --ignore=scripts --ignore=web\",\n    \"build-mac-x64\": \"electron-packager . CapCut-Mate --platform=darwin --arch=x64 --out dist --overwrite --icon=assets/icons/logo.icns --ignore=.gitignore --ignore=.github --ignore=README.md --ignore=scripts --ignore=web\",\n    \"build-win-installer\": \"electron-builder --win nsis --x64 --config ./scripts/electron-builder.config.js --publish never\",\n    \"build-mac-installer\": \"electron-builder --mac --arm64 --config ./scripts/electron-builder.config.js --publish never\",\n    \"build-mac-x64-installer\": \"electron-builder --mac --x64 --config ./scripts/electron-builder.config.js --publish never\",\n    \"build-win-green\": \"electron-builder --win zip --x64 --config ./scripts/electron-builder-green.config.js --publish never\",\n    \"build-mac-green\": \"electron-builder --mac zip --arm64 --config ./scripts/electron-builder-green.config.js --publish never\",\n    \"build-mac-x64-green\": \"electron-builder --mac zip --x64 --config ./scripts/electron-builder-green.config.js --publish never\"\n  },\n  \"devDependencies\": {\n    \"@electron/packager\": \"^18.3.5\",\n    \"electron\": \"31.7.6\",\n    \"electron-builder\": \"^24.13.3\"\n  },\n  \"optionalDependencies\": {\n    \"dmg-license\": \"^1.0.11\"\n  },\n  \"author\": \"gogoshine\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"axios\": \"^1.11.0\",\n    \"log4js\": \"^6.9.1\",\n    \"uuid\": \"^8.3.2\"\n  }\n}\n"
  },
  {
    "path": "desktop-client/preload.js",
    "content": "const { contextBridge, ipcRenderer } = require('electron');\n\nconsole.log('Preload script is loaded!');\n\n// 通过 contextBridge 安全地将 API 暴露给渲染进程\ncontextBridge.exposeInMainWorld('electronAPI', {\n    // 保存文件\n    saveFile: (data) => ipcRenderer.invoke('save-file', data),\n\n    getUrlJsonData: (url) => ipcRenderer.invoke('get-url-json-data', url),\n\n    getDownloadLog: () => ipcRenderer.invoke('get-download-log'),\n\n    clearDownloadLog: () => ipcRenderer.invoke('clear-download-log'),\n\n    // 监听来自主进程的日志消息\n    onFileOperationLog: (callback) => {\n        ipcRenderer.on('file-operation-log', (event, logEntry) => {\n            // 调用渲染进程提供的回调函数，并传递日志数据\n            callback(logEntry);\n        });\n    },\n\n    // 清理监听器，避免内存泄漏\n    removeAllFileOperationLogListeners: () => {\n        ipcRenderer.removeAllListeners('file-operation-log');\n    },\n    \n    // 显示消息框\n    showMessageBox: (options) => ipcRenderer.invoke('show-message-box', options),\n    \n    // 清空默认草稿路径\n    clearDefaultDraftPath: () => ipcRenderer.invoke('clear-default-draft-path'),\n    \n    // 在默认浏览器中打开URL\n    openExternalUrl: (url) => ipcRenderer.invoke('open-external-url', url),\n    \n    // 获取草稿保存路径\n    getConfigData: () => ipcRenderer.invoke('get-config-data'),\n    \n    // 设置草稿保存路径\n    updateDraftPath: () => ipcRenderer.invoke('update-draft-path'),\n    \n    // 检测URL是否可访问\n    checkUrlAccess: (url) => ipcRenderer.invoke('check-url-access', url),\n    \n    getHistoryRecord: () => ipcRenderer.invoke('get-history-record'),\n\n    getAppVersion: () => ipcRenderer.invoke('get-app-version'),\n});"
  },
  {
    "path": "desktop-client/scripts/electron-builder-green.config.js",
    "content": "module.exports = {\n  appId: \"com.gogoshine.capcutmate\",\n  productName: \"CapCut-Mate\",\n  directories: {\n    output: \"dist\"\n  },\n  win: {\n    icon: \"assets/icons/logo.ico\",\n    artifactName: \"capcut-mate-windows-x64-green.zip\",\n  },\n  mac: {\n    icon: \"assets/icons/logo.icns\",\n    artifactName: \"capcut-mate-macos-\\${arch}-green.zip\",\n    hardenedRuntime: true,\n    gatekeeperAssess: false,\n    entitlements: \"assets/entitlements.mac.plist\",\n    entitlementsInherit: \"assets/entitlements.mac.plist\"\n  },\n  files: [\n    \"!node_modules/**/*\",\n    \"!web/node_modules/**/*\",\n    \"!web/src/**/*\",\n    \"!web/public/**/*\",\n    \"!scripts/**/*\",\n    \"!*.yml\",\n    \"!*.yaml\",\n    \"!*.lock\",\n    \"!README.md\",\n    \"!Dockerfile\",\n    \"!docker-compose.yaml\",\n    \"node_modules/**/*\",\n    \"ui/**/*\",\n    \"nodeapi/**/*\",\n    \"*.js\",\n    \"*.json\",\n    \"assets/**/*\"\n  ],\n  extraResources: [\n    {\n      from: \"assets/\",\n      to: \"assets/\"\n    }\n  ]\n};"
  },
  {
    "path": "desktop-client/scripts/electron-builder.config.js",
    "content": "/**\n * Electron Builder Configuration\n */\nmodule.exports = {\n  appId: \"com.gogoshine.capcut-mate\",\n  productName: \"剪映小助手\",\n  directories: {\n    output: \"dist\"\n  },\n  files: [\n    \"**/*\",\n    // \"!node_modules\",\n    \"!web\",\n    \"!dist\",\n    \"!electron-builder.config.js\",\n    \"!.gitignore\",\n    \"!.github\",\n    \"!README.md\",\n    \"!.vscode\",\n    \"!DS_Store\",\n  ],\n  win: {\n    icon: \"assets/icons/logo.ico\",\n    target: \"nsis\",\n    artifactName: \"capcut-mate-windows-x64-installer.exe\",\n    // 禁用代码签名\n    signingHashAlgorithms: []\n  },\n  nsis: {\n    oneClick: false,\n    allowToChangeInstallationDirectory: true,\n  },\n  mac: {\n    icon: \"assets/icons/logo.icns\",\n    target: [\n      {\n        target: \"dmg\",\n        arch: \"arm64\"\n      },\n      {\n        target: \"dmg\",\n        arch: \"x64\"\n      }\n    ],\n    artifactName: \"capcut-mate-macos-${arch}-installer.dmg\",\n    category: \"public.app-category.productivity\",\n    hardenedRuntime: true,\n    gatekeeperAssess: false,\n    entitlements: \"assets/entitlements.mac.plist\",\n    entitlementsInherit: \"assets/entitlements.mac.plist\"\n  },\n  dmg: {\n    background: null,\n    window: {\n      width: 540,\n      height: 380\n    },\n    contents: [\n      {\n        x: 130,\n        y: 150,\n        type: \"file\"\n      },\n      {\n        x: 410,\n        y: 150,\n        type: \"link\",\n        path: \"/Applications\"\n      }\n    ]\n  }\n};"
  },
  {
    "path": "desktop-client/scripts/update-version.js",
    "content": "/**\n * 更新 package.json 中的 version 字段为 GitHub tag 版本号\n */\nconst fs = require('fs');\nconst path = require('path');\n\n// 获取 GitHub tag 版本号\nconst githubRef = process.env.GITHUB_REF;\nconsole.log(`GITHUB_REF: ${githubRef}`);\n\nif (!githubRef || !githubRef.startsWith('refs/tags/')) {\n  console.log('不是 tag 触发的构建，跳过版本更新');\n  process.exit(0);\n}\n\n// 提取 tag 名称（去除 refs/tags/ 前缀）\nconst tagName = githubRef.replace('refs/tags/', '');\nconsole.log(`Tag 名称: ${tagName}`);\n\n// 检查 tag 是否符合语义化版本规范 (v1.2.3 或 1.2.3)\nconst versionMatch = tagName.match(/v?(\\d+\\.\\d+\\.\\d+)/);\nif (!versionMatch) {\n  console.error(`Tag 名称 \"${tagName}\" 不符合语义化版本规范 (例: v1.2.3 或 1.2.3)`);\n  process.exit(1);\n}\n\nconst version = versionMatch[1];\nconsole.log(`提取的版本号: ${version}`);\n\n// 读取 package.json 文件\nconst packageJsonPath = path.join(__dirname, '..', 'package.json');\nconst packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n\n// 更新版本号\nconst oldVersion = packageJson.version;\npackageJson.version = version;\n\n// 写回 package.json 文件\nfs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\\n');\n\nconsole.log(`成功更新版本号: ${oldVersion} -> ${version}`);"
  },
  {
    "path": "desktop-client/web/.gitignore",
    "content": "/node_modules\n/dist\n/ui\n/.vscode\n.DS_Store\n.env\n.env.local\n.env.*.local\n/coverage\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n.vscode-test\n.idea\n*.sublime-workspace\n*.sublime-project\n*.log\n"
  },
  {
    "path": "desktop-client/web/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n  <meta charset=\"UTF-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n  <title>剪映小助手</title>\n  <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css\" />\n</head>\n\n<body>\n  <div id=\"root\"></div>\n  <script type=\"module\" src=\"/src/index.jsx\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "desktop-client/web/package.json",
    "content": "{\n  \"name\": \"@sd/web\",\n  \"version\": \"0.0.100\",\n  \"description\": \"剪映小助手，用于下载剪映草稿\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"dev:electron\": \"cross-env NODE_ENV=development vite\",\n    \"build:electron\": \"cross-env NODE_ENV=production vite build\"\n  },\n  \"devDependencies\": {\n    \"@vitejs/plugin-react\": \"^5.1.1\",\n    \"cross-env\": \"^10.1.0\",\n    \"electron\": \"^39.2.5\",\n    \"electron-builder\": \"^26.0.12\",\n    \"less\": \"^4.6.4\",\n    \"vite\": \"^7.2.6\",\n    \"vite-plugin-electron\": \"^0.29.0\"\n  },\n  \"dependencies\": {\n    \"@types/react\": \"^19.2.7\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"axios\": \"^1.11.0\",\n    \"bootstrap\": \"^5.3.8\",\n    \"dayjs\": \"^1.11.19\",\n    \"react\": \"^19.2.0\",\n    \"react-bootstrap\": \"^2.10.10\",\n    \"react-bootstrap-icons\": \"^1.11.6\",\n    \"react-dom\": \"^19.2.0\",\n    \"react-router-dom\": \"^7.10.1\",\n    \"react-toastify\": \"^11.0.5\"\n  }\n}\n"
  },
  {
    "path": "desktop-client/web/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n  <meta charset=\"UTF-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n  <title>剪映小助手</title>\n  <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css\" />\n</head>\n\n<body>\n<div id=\"root\"></div>\n</body>\n\n</html>"
  },
  {
    "path": "desktop-client/web/src/App.jsx",
    "content": "// import {\n//   BrowserRouter as Router,\n//   Routes,\n//   Route,\n//   Navigate,\n// } from \"react-router-dom\";\n\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport \"react-toastify/dist/ReactToastify.css\";\n\nimport \"./styles/index.less\";\n\nimport { ToastContainer } from \"react-toastify\";\n\nimport TopHeader from \"./components/Header\";\nimport HistoryPage from \"./pages/History\";\nimport MainPage from \"./pages/Download\";\nimport ConfigCenter from \"./pages/ConfigCenter\";\nimport { useEffect, useState } from \"react\";\nimport { fetchAppVersion } from \"./utils/const\";\n\nfunction App() {\n  const [selectedTab, setSelectedTab] = useState(\"download\");\n  const [appVersion, setAppVersion] = useState(\"\");\n\n  useEffect(() => {\n    fetchAppVersion().then((version) => setAppVersion(version));\n  }, []);\n\n  const tabMap = {\n    download: <MainPage />,\n    history: <HistoryPage />,\n    config: <ConfigCenter />,\n  };\n  return (\n    <div className=\"app\">\n      {/* <Router> */}\n      <TopHeader onTabChange={setSelectedTab} selectedTab={selectedTab} />\n      <div className=\"main-content flex-1\">\n        {tabMap[selectedTab] || <MainPage />}\n        {/* <Routes>\n            <Route path=\"*\" element={<Navigate replace to=\"/\" />} />\n            <Route path=\"/\" element={<MainPage />} />\n            <Route path=\"/history\" element={<HistoryPage />} />\n            <Route path=\"/config\" element={<ConfigCenter />} />\n          </Routes> */}\n      </div>\n      <div className=\"app-footer\">当前版本号：v{appVersion}</div>\n      <ToastContainer style={{ top: \"55px\" }} />\n      {/* </Router> */}\n    </div>\n  );\n}\n\nexport default App;\n"
  },
  {
    "path": "desktop-client/web/src/components/DownloadButton.jsx",
    "content": "\nfunction DownloadButton({ onClick, isLoading, setIsLoading, textValue }) {\n  const handleClick = async () => {\n    setIsLoading(true);\n    try {\n      await onClick();\n    } finally {\n      setIsLoading(false);\n    }\n  };\n\n  return (\n    <section className=\"module\">\n      <button\n        className=\"btn btn-download\"\n        onClick={handleClick}\n        disabled={isLoading || !textValue}\n      >\n        <i\n          className={`fas ${isLoading ? \"fa-spinner fa-spin\" : \"fa-download\"}`}\n        ></i>\n        创建剪映草稿\n      </button>\n    </section>\n  );\n}\n\nexport default DownloadButton;\n"
  },
  {
    "path": "desktop-client/web/src/components/DownloadControls.jsx",
    "content": "function DownloadControls({ isOpen, onToggle, isLoading }) {\n  return (\n    <section className=\"module flex justify-between\">\n      <div className=\"switch-container\">\n        <label className=\"switch\">\n          <input \n            type=\"checkbox\"\n            checked={isOpen} \n            disabled={isLoading}\n            onChange={(e) => onToggle(e.target.checked)}\n          />\n          <span className=\"slider\"></span>\n        </label>\n        <span>下载后打开草稿路径文件</span>\n      </div>\n    </section>\n  );\n}\n\nexport default DownloadControls;\n"
  },
  {
    "path": "desktop-client/web/src/components/ExternalWebpage.jsx",
    "content": "import { useEffect, useRef, useState } from \"react\";\nimport { fetchAppVersion } from \"../utils/const\";\nimport electronService from \"../services/electronService\";\n\nconst externalUrl = \"https://jcaigc.cn/external-features\";\n\nfunction ExternalWebpage() {\n  const [iframeHeight, setIframeHeight] = useState(0);\n  const [isAccessible, setIsAccessible] = useState(null);\n  const [themeConfig, setThemeConfig] = useState(null);\n  const [appVersion, setAppVersion] = useState(\"\");\n  const iframeRef = useRef(null);\n\n  // 将主题配置同步到全局 CSS 变量\n  useEffect(() => {\n    if (themeConfig && typeof themeConfig === \"object\") {\n      Object.entries(themeConfig).forEach(([key, value]) => {\n        document.documentElement.style.setProperty(key, value);\n      });\n    }\n  }, [themeConfig]);\n\n  const checkAccessibility = async () => {\n    try {\n      // 使用Electron提供的API来检测URL是否可访问（绕过CORS限制）\n      const result = await electronService.checkUrlAccess(externalUrl);\n      setIsAccessible(result.accessible);\n    } catch (error) {\n      // 请求失败，表示不可访问\n      setIsAccessible(false);\n      console.error(\"无法访问外部网页:\", error);\n    }\n  };\n\n  useEffect(() => {\n    checkAccessibility();\n  }, []);\n\n  // 监听子页面发来的配置消息\n  useEffect(() => {\n    fetchAppVersion().then((version) => setAppVersion(version));\n    const handleMessage = (event) => {\n      // 安全校验：只接受来自指定域名的消息\n      if (event.origin !== new URL(externalUrl).origin) return;\n\n      if (event.data?.type === \"config\" && event.data?.payload) {\n        const { height, themeConfig: config } = event.data.payload;\n\n        const parsedHeight = +height;\n        if (parsedHeight && typeof parsedHeight === \"number\") {\n          setIframeHeight(parsedHeight);\n        }\n        if (config && typeof config === \"object\") {\n          setThemeConfig(config);\n        }\n      }\n    };\n\n    window.addEventListener(\"message\", handleMessage);\n    return () => window.removeEventListener(\"message\", handleMessage);\n  }, []);\n\n  // iframe 加载完成后，通知子页面父页面已就绪，并携带版本号\n  const handleIframeLoad = () => {\n    if (iframeRef.current?.contentWindow) {\n      iframeRef.current.contentWindow.postMessage(\n        { type: \"parentReady\", appVersion },\n        new URL(externalUrl).origin,\n      );\n    }\n  };\n\n  // ✅ 关键：当版本号异步获取完成后，再次发送消息通知子页面父页面已就绪，并携带版本号\n  useEffect(() => {\n    if (appVersion) {\n      handleIframeLoad();\n    }\n  }, [appVersion]);\n\n  return (\n    <section className=\"module\">\n      <div className=\"external-webpage-container\">\n        {isAccessible && (\n          <iframe\n            ref={iframeRef}\n            src={externalUrl}\n            title=\"External Webpage\"\n            className=\"external-webpage\"\n            width=\"100%\"\n            height={iframeHeight + \"px\"}\n            allowFullScreen\n            sandbox=\"allow-same-origin allow-scripts allow-popups allow-forms\"\n            onLoad={handleIframeLoad}\n          />\n        )}\n      </div>\n    </section>\n  );\n}\n\nexport default ExternalWebpage;\n"
  },
  {
    "path": "desktop-client/web/src/components/Header/index.jsx",
    "content": "import electronService from \"@/services/electronService\";\n\nimport \"./index.less\";\n\n// 顶部导航组件\nfunction TopHeader({ onTabChange, selectedTab }) {\n  const handleTabClick = (tab) => {\n    onTabChange(tab);\n  };\n  return (\n    <div className=\"top-header\">\n      <div className=\"top-nav\">\n        <div\n          className={`top-nav-item logo`}\n          onClick={() => handleTabClick(\"download\")}\n        >\n          剪映小助手(免费客户端)\n        </div>\n        <div className=\"top-nav-group\">\n          <div\n            className={`top-nav-item`}\n            onClick={() => {\n              handleTabClick(\"download\");\n              electronService.openExternalUrl(\"https://jcaigc.cn\");\n            }}\n          >\n            前往官网\n          </div>\n          <div\n            className={`top-nav-item ${selectedTab === \"history\" ? \"active\" : \"\"}`}\n            onClick={() => handleTabClick(\"history\")}\n          >\n            草稿历史\n          </div>\n          <div\n            className={`top-nav-item ${selectedTab === \"config\" ? \"active\" : \"\"}`}\n            onClick={() => handleTabClick(\"config\")}\n          >\n            配置中心\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\nexport default TopHeader;\n"
  },
  {
    "path": "desktop-client/web/src/components/Header/index.less",
    "content": ".top-header {\n    background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-dark) 100%);\n    color: #fff;\n    padding: 12px 16px;\n    text-align: right;\n    cursor: pointer;\n    width: 100%;\n    position: fixed;\n    z-index: 1;\n}\n\n.top-nav {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    flex-direction: row;\n    gap: 16px;\n}\n\n.top-nav-group {\n    display: flex;\n    justify-content: end;\n    align-items: center;\n    flex-direction: row;\n    gap: 16px;\n}\n.top-nav-item {\n    font-size: 16px;\n    color: rgba(255, 255, 255, .8);\n    transition: color 0.3s ease;\n    text-decoration: none  ;\n}\n\n.top-nav-item.logo {\n    font-size: 20px;\n}\n\n.top-nav-item:hover {\n    color: #fff;\n}\n\n.top-nav-item.active {\n    color: #fff;\n    border-bottom: 2px solid #fff;\n    padding-bottom: 2px;\n}"
  },
  {
    "path": "desktop-client/web/src/components/LogModule.jsx",
    "content": "import { formatToTime } from '../utils/date';\nimport { useEffect, useRef } from 'react';\n\nfunction LogModule({ logs, onClear }) {\n  const logIconMap = {\n      // info: \"fas fa-info-circle\",\n      // success: \"fas fa-check-circle\",\n      error: \"fas fa-times-circle\",\n      // loading: \"fas fa-spinner fa-spin\",\n      all: \"fas fa-check-circle\", // check-square\n  };\n  const logListRef = useRef(null);\n  // 当日志列表变化时，自动滚动到底部\n  useEffect(() => {\n    if (logListRef.current) {\n      logListRef.current.scrollTop = logListRef.current.scrollHeight;\n    }\n  }, [logs]);\n  \n  return (\n    <section className=\"module log-module\">\n      <h2 className=\"module-title\">\n        <span><i className=\"fas fa-list-alt\"></i> 下载日志</span>\n        <button className=\"btn btn-clear\" onClick={onClear}>\n          <i className=\"fas fa-trash\"></i> 清空日志\n        </button>\n      </h2>\n      {logs.length === 0 ? (\n        <div className=\"log-empty\">暂无日志记录</div>\n      ) : (\n        <ul className=\"log-list\" ref={logListRef}>\n          {logs.map((log, index) => (\n            <li key={index} className={`log-item ${log.level}`}>\n              <span className=\"log-time\">[{formatToTime(log.time)}]</span>\n              <i className={`log-icon show ${logIconMap[log.level] || 'hide'}`}></i>\n              <span className={`log-message`}>\n                {log.message}\n              </span>\n            </li>\n          ))}\n        </ul>\n      )}\n    </section>\n  );\n}\n\nexport default LogModule;\n"
  },
  {
    "path": "desktop-client/web/src/components/Tabs.jsx",
    "content": "import React, { useState } from 'react';\n\nfunction Tabs({ onTabChange, initialContent }) {\n  const templates = {\n    template1: {\n      title: \"案例一\",\n      content: \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=20251204214904ccb1af38\"\n    },\n    template2: {\n      title: \"案例二\",\n      content: \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025120421372636a27729\"\n    }\n  };\n\n  const [activeTab, setActiveTab] = useState('');\n\n  const handleTabClick = (templateId) => {\n    setActiveTab(templateId);\n    onTabChange(templates[templateId].content);\n  };\n\n  return (\n    <section className=\"module tabs-module\">\n      <span><i className=\"fas fa-folder-open\"></i> 案例草稿：</span>\n      <div className=\"tabs\">\n        {Object.entries(templates).map(([key, template]) => (\n          <button\n            key={key}\n            className={`tab-btn ${activeTab === key ? 'active' : ''}`}\n            onClick={() => handleTabClick(key)}\n            data-template={key}\n          >\n            {template.title}\n          </button>\n        ))}\n      </div>\n    </section>\n  );\n}\n\nexport default Tabs;\n"
  },
  {
    "path": "desktop-client/web/src/components/Textarea.jsx",
    "content": "import React, { useState, useEffect } from 'react';\n\nfunction Textarea({ value, onChange }) {\n  const [textareaHeight, setTextareaHeight] = useState('auto');\n\n  const handleInput = (e) => {\n    onChange(e.target.value);\n    adjustTextareaHeight(e.target);\n  };\n\n  const adjustTextareaHeight = (textarea) => {\n    textarea.style.height = 'auto';\n    const newHeight = Math.min(textarea.scrollHeight, 300); // 设置最大高度\n    setTextareaHeight(`${newHeight}px`);\n  };\n\n  useEffect(() => {\n    const textarea = document.querySelector('.auto-resize-textarea');\n    if (textarea) {\n      adjustTextareaHeight(textarea);\n    }\n  }, [value]);\n\n  return (\n    <section className=\"module\">\n      <div className=\"textarea-container\">\n        <textarea\n          className=\"auto-resize-textarea\"\n          placeholder={`请输入草稿地址，多个使用回车换行分隔例如：\n草稿地址1 \n草稿地址2 \n草稿地址3`}\n          value={value}\n          onChange={handleInput}\n          style={{ height: textareaHeight }}\n        ></textarea>\n      </div>\n    </section>\n  );\n}\n\nexport default Textarea;\n"
  },
  {
    "path": "desktop-client/web/src/index.jsx",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom/client';\n\nimport App from './App';\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>\n);\n"
  },
  {
    "path": "desktop-client/web/src/pages/ConfigCenter/index.jsx",
    "content": "import { useEffect, useState } from \"react\";\nimport electronService from \"../../services/electronService\";\n\nimport \"./index.less\";\nimport { toast } from \"react-toastify\";\n\nconst ConfigCenter = () => {\n  const [config, setConfig] = useState({ targetDirectory: \"\" });\n\n  const loadConfig = async () => {\n    try {\n      const configData = await electronService.getConfigData();\n      setConfig(configData || { targetDirectory: \"\" });\n    } catch (error) {\n      console.error(\"加载配置失败:\", error);\n    }\n  };\n\n  // 加载配置\n  useEffect(() => {\n    loadConfig();\n  }, []);\n\n  const handleSelectPath = async () => {\n    try {\n      const { success, targetDir, error } =\n        await electronService.updateDraftPath();\n      if (success) {\n        setConfig({ targetDirectory: targetDir });\n    //   } else if (error) {\n    //     toast.info(error);\n      }\n    } catch (error) {\n      toast.error(\"选择路径失败:\", error);\n    }\n  };\n\n  return (\n    <div className=\"set-page\">\n      <div className=\"container\">\n        <div className=\"card\">\n          <div className=\"card-body\">\n            <div className=\"section-title\">剪映路径设置</div>\n            {/* <div className=\"setting-item\"> */}\n            <div className=\"setting-path-input-group flex item-center\">\n              <label className=\"setting-path-label\">当前路径：</label>\n              <input\n                type=\"text\"\n                className=\"setting-draft-path-input\"\n                placeholder=\"请选择草稿保存路径\"\n                value={config.targetDirectory || \"\"}\n                readOnly\n                onClick={handleSelectPath}\n              />\n              <button className=\"btn btn-small\" onClick={handleSelectPath}>\n                选择...\n              </button>\n            </div>\n            <p className=\"settings-hint\">\n              设置剪映软件的草稿路径以导入草稿至剪映\n            </p>\n            {/* </div> */}\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default ConfigCenter;\n"
  },
  {
    "path": "desktop-client/web/src/pages/ConfigCenter/index.less",
    "content": "\n.setting-path-input-group {\n    gap: 10px;\n    margin-bottom: 5px;\n}\n.setting-path-label {\n    font-size: 14px;\n    width: 70px;\n}\n.settings-hint {\n    font-size: 12px;\n    color: #7f8c8d;\n    margin-left: 80px;\n}\n.setting-draft-path-input {\n    flex: 1;\n    padding: 10px;\n    border: 1px solid #ddd;\n    border-radius: 5px;\n    font-size: 14px;\n    cursor: pointer;\n}"
  },
  {
    "path": "desktop-client/web/src/pages/Download/index.jsx",
    "content": "import { useState, useEffect, useRef } from \"react\";\nimport { toast } from \"react-toastify\";\nimport electronService from \"../../services/electronService\";\nimport ExternalWebpage from \"../../components/ExternalWebpage\";\nimport Textarea from \"../../components/Textarea\";\nimport Tabs from \"../../components/Tabs\";\nimport DownloadControls from \"../../components/DownloadControls\";\nimport DownloadButton from \"../../components/DownloadButton\";\nimport LogModule from \"../../components/LogModule\";\n\nimport \"./index.less\";\n\nfunction MainPage() {\n  const [textareaValue, setTextareaValue] = useState(\"\");\n  const [isDownloadOpen, setIsDownloadOpen] = useState(true);\n  const [logs, setLogs] = useState([]);\n  const [isLoading, setIsLoading] = useState(false);\n\n  // 外层容器的ref，用于实现自动滚动\n  const downloadPageRef = useRef(null);\n\n  // 加载配置\n  useEffect(() => {\n    // 监听日志更新\n    electronService.onFileOperationLog((logEntry) => {\n      setLogs((prevLogs) => [...prevLogs, logEntry]);\n    });\n\n    return () => {\n      try {\n        electronService.removeAllFileOperationLogListeners();\n      } catch (error) {\n        console.error(\"取消订阅日志失败:\", error);\n      }\n    };\n  }, []);\n\n  // 当日志更新时，将外层容器滚动到底部\n  useEffect(() => {\n    if (downloadPageRef.current) {\n      downloadPageRef.current.scrollTop = downloadPageRef.current.scrollHeight;\n    }\n  }, [logs]);\n\n  const handleDownload = async () => {\n    const trimmedValue = textareaValue.trim();\n    if (!trimmedValue) {\n      toast.warn(\"请输入草稿地址，多个使用回车换行分隔\");\n      return;\n    }\n\n    const valArray = trimmedValue.split(\"\\n\").map((line) => line.trim());\n    for (const val of valArray) {\n      if (val) {\n        await saveFile(val);\n      }\n    }\n  };\n\n  const saveFile = async (value) => {\n    // 从URL中提取draft_id\n    const urlParams = new URLSearchParams(\n      value.includes(\"?\") ? value.split(\"?\")[1] : \"\"\n    );\n    const targetId = urlParams.get(\"draft_id\");\n\n    if (!targetId) {\n      toast.warn(`${value} 中缺少 draft_id 参数`);\n      return;\n    }\n\n    try {\n      const jsonData = await electronService.getUrlJsonData(value);\n      if (jsonData?.code !== 0 || !jsonData?.files) {\n        toast.error(\"获取文件列表失败，请确保您输入的地址可正常访问\");\n        return;\n      }\n\n      const matchedFiles = jsonData.files.filter((fileUrl) =>\n        fileUrl.includes(targetId)\n      );\n\n      if (matchedFiles.length === 0) {\n        toast.error(\"未找到包含 draft_id 的文件\");\n        return;\n      }\n\n      setLogs([]);\n\n      await electronService.saveFile({\n        sourceUrl: value,\n        remoteFileUrls: matchedFiles,\n        targetId,\n        isOpenDir: isDownloadOpen,\n      });\n      toast.success(`剪映草稿下载完成！请前往剪映查看`);\n    } catch (error) {\n      toast.error(\"保存文件失败\", error);\n    }\n  };\n\n  const handleClearLogs = () => setLogs([]);\n\n  return (\n    <div className=\"download-page\" ref={downloadPageRef}>\n      <div className=\"container\">\n        <ExternalWebpage />\n\n        <Textarea\n          value={textareaValue}\n          onChange={(val) => setTextareaValue(val)}\n        />\n\n        <Tabs\n          onTabChange={(content) => setTextareaValue(content)}\n          initialContent={textareaValue}\n        />\n\n        <DownloadControls\n          isOpen={isDownloadOpen}\n          isLoading={isLoading}\n          onToggle={setIsDownloadOpen}\n        />\n\n        <DownloadButton\n          onClick={handleDownload}\n          isLoading={isLoading}\n          setIsLoading={setIsLoading}\n          textValue={textareaValue}\n        />\n\n        <LogModule logs={logs} onClear={handleClearLogs} />\n      </div>\n    </div>\n  );\n}\n\nexport default MainPage;"
  },
  {
    "path": "desktop-client/web/src/pages/Download/index.less",
    "content": ".download-page {\n    height: 100%;\n    overflow-y: auto;\n}\n\n/* 外部网页样式 */\n.external-webpage-container {\n    position: relative;\n    border-radius: 8px;\n    overflow: hidden;\n}\n\n.external-webpage {\n    display: block;\n    transition: opacity 0.3s ease;\n}\n\n.external-webpage.loading {\n    opacity: 0.5;\n}\n\n.loading-overlay {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    background-color: rgba(255, 255, 255, 0.8);\n    z-index: 10;\n}\n\n.loading-spinner {\n    border: 4px solid #f3f3f3;\n    border-top: 4px solid #3498db;\n    border-radius: 50%;\n    width: 40px;\n    height: 40px;\n    animation: spin 1s linear infinite;\n    margin-bottom: 10px;\n}\n\n@keyframes spin {\n    0% {\n        transform: rotate(0deg);\n    }\n\n    100% {\n        transform: rotate(360deg);\n    }\n}\n\n/* 文本输入区域样式 */\n.textarea-container {\n    margin-bottom: 20px;\n    position: relative;\n}\n\n.auto-resize-textarea {\n    width: 100%;\n    min-height: 120px;\n    padding: 8px;\n    border: 1px solid #ddd;\n    border-radius: 8px;\n    resize: none;\n    font-size: 1rem;\n    line-height: 1.5;\n    transition: border-color 0.3s;\n    display: block;\n}\n\n.auto-resize-textarea:focus {\n    outline: none;\n    border-color: var(--secondary-color);\n    box-shadow: 0 0 0 2px rgba(var(--secondary-color-rgb), 0.2);\n}\n\n/* Tab样式 */\n.tabs-module {\n    display: flex;\n    align-items: center;\n}\n\n.tabs {\n    display: flex;\n    gap: 10px;\n    flex-wrap: wrap;\n}\n\n.tab-btn {\n    padding: 8px 20px;\n    background: #f8f9fa;\n    border: 1px solid #dee2e6;\n    border-radius: 32px;\n    cursor: pointer;\n    transition: all 0.3s;\n    font-weight: 500;\n}\n\n.tab-btn:hover {\n    background: #e9ecef;\n}\n\n.tab-btn.active {\n    background: var(--secondary-color);\n    color: white;\n    border-color: var(--secondary-color);\n}\n\n/* 开关样式 */\n.switch-container {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n}\n\n.switch {\n    position: relative;\n    display: inline-block;\n    width: 48px;\n    height: 24px;\n}\n\n.switch input {\n    opacity: 0;\n    width: 0;\n    height: 0;\n}\n\n.slider {\n    position: absolute;\n    cursor: pointer;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    background-color: #ccc;\n    transition: 0.4s;\n    border-radius: 34px;\n}\n\n.slider:before {\n    position: absolute;\n    content: \"\";\n    height: 16px;\n    width: 16px;\n    left: 4px;\n    bottom: 4px;\n    background-color: white;\n    transition: 0.4s;\n    border-radius: 50%;\n}\n\n.log-module {\n    border: 1px solid #ddd;\n    border-radius: 8px;\n    background-color: #fff;\n    overflow: hidden;\n}\n\n.log-module .module-title {\n    padding: 8px 12px;\n}\n\n.log-module .module-title {\n    background-color: #f8f8f8;\n    border-bottom: solid 1px #ddd;\n}\n\n.log-empty {\n    padding: 20px;\n    text-align: center;\n    color: #7f8c8d;\n    font-size: 1rem;\n}\n\n/* 日志列表样式 */\n.log-list {\n    list-style: none;\n    max-height: 300px;\n    overflow-y: auto;\n}\n\n.log-item {\n    padding: 8px 12px;\n    border-bottom: 1px solid #eee;\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    font-size: 1rem;\n}\n\n.log-time {\n    color: #7f8c8d;\n}\n\n.log-item .log-icon:not(.show) {\n    display: none;\n}\n\n.log-item .log-icon.loading,\n.log-item .log-icon.all {\n    display: inline-block;\n}\n\n\n.log-item.loading,\ni.log-icon {\n    color: var(--secondary-color);\n}\n\n.log-item.all,\n.log-item.success,\n.log-item.all i.log-icon,\n.log-item.success i.log-icon {\n    color: #0da73b;\n}\n\n.log-item.error,\ni.log-icon.error {\n    color: #e74c3c;\n}\n\n.log-message {\n    flex: 1;\n    word-break: break-word;\n    text-align: left;\n}\n\n.log-item:last-child {\n    border-bottom: none;\n}\n"
  },
  {
    "path": "desktop-client/web/src/pages/History/index.jsx",
    "content": "import { useState, useEffect, useMemo } from \"react\";\nimport { toast } from \"react-toastify\";\n\nimport {\n  ListGroup,\n  Pagination,\n  OverlayTrigger,\n  Tooltip,\n} from \"react-bootstrap\";\nimport {\n  CalendarCheckFill,\n  CollectionPlayFill,\n  ClockHistory,\n  Clipboard,\n} from \"react-bootstrap-icons\";\n\nimport electronService from \"../../services/electronService\";\nimport { formatToDateTime } from \"../../utils/date\";\n\nimport \"./index.less\";\n\n// 草稿历史记录页面组件\nfunction HistoryPage() {\n  // 状态管理\n  const [historyList, setHistoryList] = useState([]); // 历史记录列表\n  const [currentPage, setCurrentPage] = useState(1); // 当前页码\n  const [pageSize, setPageSize] = useState(10); // 每页记录数\n  const [totalCount, setTotalCount] = useState(0); // 总记录数\n  const [isLoading, setIsLoading] = useState(false); // 加载状态\n  const [paginationItems, setPaginationItems] = useState([]); // 分页项\n\n  // 加载历史记录数据\n  const loadHistoryData = async () => {\n    setCurrentPage(1);\n    setIsLoading(true);\n    try {\n      // 从electronService获取完整历史记录\n      let allHistory = await electronService.getHistoryRecord() || [];\n      // 按时间倒序排列，使最新的草稿在最前面\n      allHistory = allHistory.sort(\n        (a, b) => new Date(b.time) - new Date(a.time),\n      );\n      setHistoryList(allHistory);\n      setTotalCount(allHistory.length || 0);\n      setPaginationItems(getPaginatedData(1, allHistory));\n    } catch (error) {\n      toast.error(\"加载历史记录失败\");\n    } finally {\n      setIsLoading(false);\n    }\n  };\n\n  // 初始加载数据\n  useEffect(() => {\n    loadHistoryData();\n  }, []);\n\n  // 复制草稿地址到剪贴板\n  const copyDraftUrl = (url) => {\n    navigator.clipboard\n      .writeText(url)\n      .then(() => {\n        toast.success(\"草稿地址已复制到剪贴板\");\n      })\n      .catch(() => {\n        toast.error(\"复制失败，请手动复制\");\n      });\n  };\n\n  // 计算分页数据\n  const getPaginatedData = (\n    curPage = currentPage,\n    allHistory = historyList,\n  ) => {\n    const startIndex = (curPage - 1) * pageSize;\n    const endIndex = startIndex + pageSize;\n    return allHistory.slice(startIndex, endIndex);\n  };\n\n  // 计算总页数\n  const totalPages = useMemo(\n    () => Math.ceil(totalCount / pageSize),\n    [totalCount, pageSize],\n  );\n\n  // 处理页码变更\n  const handlePageChange = (page) => {\n    if (page >= 1 && page <= totalPages) {\n      setCurrentPage(page);\n      setPaginationItems(getPaginatedData(page));\n    }\n  };\n\n  const renderPaginationItems = () => {\n    const items = [];\n    const maxPagesToShow = 5;\n    const halfPagesToShow = Math.floor(maxPagesToShow / 2);\n\n    let startPage = Math.max(1, currentPage - halfPagesToShow);\n    let endPage = Math.min(totalPages, currentPage + halfPagesToShow);\n\n    if (currentPage <= halfPagesToShow) {\n      endPage = Math.min(totalPages, maxPagesToShow);\n    } else if (currentPage + halfPagesToShow >= totalPages) {\n      startPage = Math.max(1, totalPages - maxPagesToShow + 1);\n    }\n\n    if (startPage > 1) {\n      items.push(<Pagination.Ellipsis key=\"start-ellipsis\" />);\n    }\n\n    for (let page = startPage; page <= endPage; page++) {\n      items.push(\n        <Pagination.Item\n          key={page}\n          active={page === currentPage}\n          onClick={() => handlePageChange(page)}\n        >\n          {page}\n        </Pagination.Item>,\n      );\n    }\n\n    if (endPage < totalPages) {\n      items.push(<Pagination.Ellipsis key=\"end-ellipsis\" />);\n    }\n\n    return items;\n  };\n\n  const copyToClipboard = (text) => {\n    if (!text) return;\n\n    navigator.clipboard\n      .writeText(text)\n      .then(() => {\n        toast.success(\"已复制到剪贴板\");\n      })\n      .catch((err) => {\n        toast.error(\"复制失败: \" + err);\n      });\n  };\n\n  return (\n    <div className=\"history-page\">\n      <div className=\"container\">\n        {/* 历史记录列表 */}\n        <div className=\"history-list-container\">\n          <div className=\"d-flex justify-content-between align-items-center mb-3\">\n            <h3 className=\"history-list-title\">\n              <CollectionPlayFill className=\"me-2\" />\n              草稿历史记录\n            </h3>\n          </div>\n          <ListGroup>\n            {paginationItems.length > 0 ? (\n              paginationItems.map((item, index) => (\n                <ListGroup.Item\n                  key={index}\n                  style={{\n                    borderLeft: \"none\",\n                    borderRight: \"none\",\n                    borderTop:\n                      index === 0 ? \"none\" : \"1px solid rgba(0,0,0,.125)\",\n                    borderBottom:\n                      index === paginationItems.length - 1\n                        ? \"none\"\n                        : \"1px solid rgba(0,0,0,.125)\",\n                    padding: \"16px\",\n                    transition: \"all 0.3s ease\",\n                  }}\n                  className=\"hover-effect\"\n                >\n                  <div className=\"d-flex justify-content-between align-items-center mb-2\">\n                    <div style={{ fontSize: \"16px\", fontWeight: \"500\" }}>\n                      草稿 #{item.id}\n                    </div>\n                  </div>\n\n                  <div className=\"draft-detail\">\n                    <div className=\"row mt-3\">\n                      <div className=\"col-md-6 mb-2\">\n                        <div className=\"d-flex align-items-center\">\n                          <span\n                            style={{\n                              fontSize: \"14px\",\n                              color: \"#666\",\n                              width: \"80px\",\n                            }}\n                          >\n                            草稿ID:\n                          </span>\n                          <span\n                            style={{\n                              fontSize: \"14px\",\n                              color: \"#333\",\n                              fontFamily: \"monospace\",\n                            }}\n                          >\n                            {item.draft_id}\n                          </span>\n                        </div>\n                      </div>\n                      <div className=\"col-md-6 mb-2\">\n                        <div className=\"d-flex align-items-center\">\n                          <ClockHistory\n                            className=\"clock-history\"\n                          />\n                          <span style={{ fontSize: \"14px\", color: \"#666\" }}>\n                            解析时间:{\" \"}\n                          </span>\n                          <span\n                            style={{\n                              fontSize: \"14px\",\n                              color: \"#333\",\n                              fontWeight: \"500\",\n                              marginLeft: \"4px\",\n                            }}\n                          >\n                            {formatToDateTime(item.time)}\n                          </span>\n                        </div>\n                      </div>\n                    </div>\n\n                    <div className=\"row mt-1\">\n                      <div className=\"col-12 mb-2\">\n                        <OverlayTrigger\n                          placement=\"top\"\n                          overlay={\n                            <Tooltip>{item.draft_url || \"暂无地址\"}</Tooltip>\n                          }\n                        >\n                          <div className=\"d-flex align-items-center\">\n                            <span\n                              style={{\n                                fontSize: \"14px\",\n                                color: \"#666\",\n                                minWidth: \"80px\",\n                              }}\n                            >\n                              草稿地址:\n                            </span>\n                            <span\n                              style={{\n                                fontSize: \"14px\",\n                                color: item.draft_url ? \"#1890ff\" : \"#999\",\n                                overflow: \"hidden\",\n                                textOverflow: \"ellipsis\",\n                                whiteSpace: \"nowrap\",\n                                maxWidth: \"75%\",\n                              }}\n                            >\n                              {item.draft_url || \"暂无\"}\n                            </span>\n                            {item.draft_url && (\n                              <Clipboard\n                                className=\"ms-2\"\n                                style={{\n                                  color: \"#356bfd\",\n                                  cursor: \"pointer\",\n                                  fontSize: \"14px\",\n                                }}\n                                onClick={(e) => {\n                                  e.stopPropagation();\n                                  copyToClipboard(item.draft_url);\n                                }}\n                              />\n                            )}\n                          </div>\n                        </OverlayTrigger>\n                      </div>\n                    </div>\n                  </div>\n                </ListGroup.Item>\n              ))\n            ) : (\n              <ListGroup.Item className=\"text-center py-4\">\n                <div style={{ color: \"#666\" }}>暂无草稿记录</div>\n              </ListGroup.Item>\n            )}\n          </ListGroup>\n\n          {historyList.length > 0 && (\n            <div className=\"d-flex justify-content-between align-items-center mt-4\">\n              <div className=\"total-count d-flex align-items-center\">\n                <CalendarCheckFill\n                  className=\"me-2 clock-history\"\n                />\n                <span style={{ color: \"#666\" }}>总记录数: </span>\n                <span className=\"history-count\">\n                  {historyList.length}\n                </span>\n              </div>\n\n              <Pagination className=\"pagination\">\n                <Pagination.First\n                  onClick={() => handlePageChange(1)}\n                  disabled={currentPage === 1}\n                />\n                <Pagination.Prev\n                  onClick={() => handlePageChange(currentPage - 1)}\n                  disabled={currentPage === 1}\n                />\n                {renderPaginationItems()}\n                <Pagination.Next\n                  onClick={() => handlePageChange(currentPage + 1)}\n                  disabled={currentPage === totalPages}\n                />\n                <Pagination.Last\n                  onClick={() => handlePageChange(totalPages)}\n                  disabled={currentPage === totalPages}\n                />\n              </Pagination>\n            </div>\n          )}\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport default HistoryPage;\n"
  },
  {
    "path": "desktop-client/web/src/pages/History/index.less",
    "content": ".history-page {\n  padding: 20px 0;\n  height: 100%;\n  overflow-y: auto;\n}\n\n.history-page h2 {\n  margin-bottom: 20px;\n  font-size: 24px;\n  color: #333;\n  text-align: center;\n}\n\n.history-list-container {\n  background-color: #fff;\n  border-radius: 8px;\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n  padding: 20px;\n  margin-bottom: 20px;\n  .history-list-title {\n    color: var(--primary-color);\n    font-size: 22px;\n    font-weight: 600;\n    display: flex;\n    align-items: center;\n  }\n  .clock-history {\n    font-size: 14px;\n    color: var(--primary-color);\n    margin-right: 8px;\n  }\n}\n\n.loading,\n.empty-state {\n  text-align: center;\n  padding: 40px 0;\n  color: #666;\n  font-size: 16px;\n}\n\n.history-list {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n}\n\n.history-item {\n  border: 1px solid #e0e0e0;\n  border-radius: 6px;\n  padding: 15px;\n  transition: all 0.3s ease;\n}\n\n.history-item:hover {\n  border-color: #007bff;\n  box-shadow: 0 2px 8px rgba(0, 123, 255, 0.15);\n}\n\n.history-item-header {\n  display: flex;\n  justify-content: space-between;\n  margin-bottom: 8px;\n  font-size: 14px;\n}\n\n.draft-id {\n  font-weight: 600;\n  color: #333;\n}\n\n.download-time {\n  color: #666;\n  font-size: 12px;\n}\n\n.history-item-content {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  position: relative;\n}\n.history-count {\n  color: var(--primary-color);\n  font-weight: 500;\n  margin-left: 4px;\n}\n\n.pagination {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-top: 16px;\n  padding: 8px 0;\n  flex-wrap: wrap;\n  gap: 15px;\n  --bs-pagination-color: var(--primary-color);\n  --bs-pagination-hover-color: var(--primary-dark);\n  --bs-pagination-focus-color: var(--primary-dark);\n  --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(var(--primary-color-rgb), 0.25);\n  --bs-pagination-active-bg: var(--primary-color);\n  --bs-pagination-active-border-color: var(--primary-color);\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n  .history-item-header {\n    flex-direction: column;\n    gap: 5px;\n  }\n\n  .pagination {\n    flex-direction: column;\n    align-items: stretch;\n  }\n}\n\n@media (max-width: 480px) {\n  .history-list-container {\n    padding: 10px;\n  }\n\n  .pagination {\n    padding: 10px;\n  }\n}\n"
  },
  {
    "path": "desktop-client/web/src/services/electronService.js",
    "content": "/**\n * Electron API服务层\n * 封装Electron API调用，实现浏览器和Electron环境的兼容\n */\n\nimport axios from 'axios';\n\n// 检查是否在Electron环境中\nconst isElectron = () => {\n  return window && window.electronAPI;\n};\n\n// 空实现或模拟实现（用于浏览器环境）\nconst mockElectronAPI = {\n  getConfigData: async () => {\n    console.warn('Electron API not available in browser: getConfigData');\n    return { targetDirectory: '' };\n  },\n  getDownloadLog: async () => {\n    console.warn('Electron API not available in browser: getDownloadLog');\n    return [];\n  },\n  onFileOperationLog: (callback) => {\n    console.warn('Electron API not available in browser: onFileOperationLog');\n    return () => {}; // 返回空的卸载函数\n  },\n  removeAllFileOperationLogListeners: () => {\n    console.warn('Electron API not available in browser: removeAllFileOperationLogListeners');\n  },\n  getUrlJsonData: async (url) => {\n    console.warn('Electron API not available in browser: getUrlJsonData');\n    // 在浏览器环境中，可以直接使用axios请求\n    try {\n      // const response = await fetch(url);\n      // return response.json();\n      return {};\n    } catch (error) {\n      console.error('Error fetching data in browser:', error);\n      return { code: -1, message: 'Browser fetch failed' };\n    }\n  },\n  saveFile: async (options) => {\n    console.warn('Electron API not available in browser: saveFile');\n    alert('保存文件功能仅在桌面应用中可用');\n    return { success: false, message: 'Not available in browser' };\n  },\n  clearDownloadLog: () => {\n    console.warn('Electron API not available in browser: clearDownloadLog');\n  },\n  openExternalUrl: (url) => {\n    console.warn('Electron API not available in browser: openExternalUrl');\n    window.open(url, '_blank');\n  },\n  updateDraftPath: async () => {\n    console.warn('Electron API not available in browser: updateDraftPath');\n    alert('选择路径功能仅在桌面应用中可用');\n    return { success: false, message: 'Not available in browser' };\n  },\n  checkUrlAccess: async (url) => {\n    console.warn('Electron API not available in browser: checkUrlAccess');\n    try {\n      // 在浏览器环境中，使用axios请求\n      const response = await axios({\n        method: \"HEAD\",\n        url: url,\n        timeout: 5000\n      });\n      return { accessible: response.status < 400 };\n    } catch (error) {\n      console.error('Error checking URL accessibility in browser:', error);\n      return { accessible: false };\n    }\n  },\n  getHistoryRecord: async () => {\n    console.warn('Electron API not available in browser: getHistoryRecord');\n    return [];\n  },\n  getAppVersion: async () => {\n    return null;\n  },\n};\n\n// 实际的Electron API（用于Electron环境）\nconst electronAPI = {\n  getConfigData: async () => {\n    return await window.electronAPI.getConfigData();\n  },\n  getDownloadLog: async () => {\n    return await window.electronAPI.getDownloadLog();\n  },\n  onFileOperationLog: async (callback) => {\n    return await window.electronAPI.onFileOperationLog(callback);\n  },\n  removeAllFileOperationLogListeners: () => {\n    window.electronAPI.removeAllFileOperationLogListeners();\n  },\n  getUrlJsonData: async (url) => {\n    return await window.electronAPI.getUrlJsonData(url);\n  },\n  saveFile: async (options) => {\n    return await window.electronAPI.saveFile(options);\n  },\n  clearDownloadLog: () => {\n    window.electronAPI.clearDownloadLog();\n  },\n  checkUrlAccess: async (url) => {\n    return await window.electronAPI.checkUrlAccess(url);\n  },\n  openExternalUrl: (url) => {\n    window.electronAPI.openExternalUrl(url);\n  },\n  updateDraftPath: async () => {\n    return await window.electronAPI.updateDraftPath();\n  },\n  getHistoryRecord: async () => {\n    return await window.electronAPI.getHistoryRecord();\n  },\n  getAppVersion: async () => {\n    return await window.electronAPI.getAppVersion();\n  },\n};\n\n// 根据环境选择使用哪个API实现\nconst electronService = isElectron() && window.electronAPI ? electronAPI : mockElectronAPI;\n\nexport default electronService;\n"
  },
  {
    "path": "desktop-client/web/src/styles/index.less",
    "content": "@charset \"UTF-8\";\n\n@import \"./root.less\";\n\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n  font-family: \"Segoe UI\", Tahoma, Geneva, Verdana, sans-serif;\n}\n\nhtml,\nbody,\n#root,\n.app {\n  height: 100%;\n  width: 100%;\n  overflow: hidden;\n}\n\nbody {\n  background-color: #f5f7fa;\n  color: #333;\n  line-height: 1.6;\n}\n\n.hide {\n  display: none !important;\n}\n\n.main-content {\n  padding: 80px 0 40px;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n}\n\n.main-content > div {\n  padding: 0 16px;\n}\n\n.container {\n  max-width: 1200px;\n  margin: 0 auto;\n}\n\n.card {\n  position: relative;\n  padding: 22px;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  color: #212529;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  border-radius: 0.375rem;\n}\n.card-body {\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.section-title {\n  color: var(--secondary-color);\n  font-size: 16px;\n  font-weight: 500;\n  margin-bottom: 15px;\n  display: flex;\n  align-items: center;\n}\n\n.section-title:after {\n  content: \"\";\n  flex: 1;\n  height: 1px;\n  background: linear-gradient(to right, var(--secondary-light), transparent);\n  margin-left: 15px;\n}\n\n.setting-item {\n  font-size: 14px;\n  color: #555;\n  display: flex;\n  align-items: center;\n  padding: 5px 0;\n  flex-wrap: wrap;\n}\n\ni.fas {\n  color: var(--secondary-color);\n}\n\n.btn i.fas {\n  color: white;\n}\n\nh1 {\n  font-size: 2.5rem;\n  margin-bottom: 10px;\n}\n\n.flex {\n  display: flex;\n}\n.item-center {\n  align-items: center;\n}\n.justify-center {\n  justify-content: center;\n}\n\n.justify-between {\n  justify-content: space-between;\n}\n\n.subtitle {\n  font-size: 1.2rem;\n  opacity: 0.9;\n}\n\n.module {\n  border-radius: 10px;\n  margin-bottom: 24px;\n}\n\n.module-title {\n  font-size: 1rem;\n  color: #2c3e50;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n\ninput:disabled + .slider {\n  background-color: #95a5a6;\n  cursor: not-allowed;\n}\n\ninput:checked:not(:disabled) + .slider {\n  background-color: var(--secondary-color);\n}\n\ninput:checked + .slider:before {\n  transform: translateX(24px);\n}\n\n.app-footer {\n  position: fixed;\n  bottom: 0;\n  width: 100%;\n  text-align: center;\n  padding-bottom: 16px;\n  font-size: 12px;\n  color: #999;\n}\n\n/* 按钮样式 */\n.btn {\n  padding: 14px 28px;\n  background: linear-gradient(\n    135deg,\n    var(--secondary-color) 0%,\n    var(--primary-color) 100%\n  );\n  color: white;\n  border: none;\n  border-radius: 8px;\n  font-size: 1rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.3s;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.btn:hover:not(:disabled) {\n  background: linear-gradient(\n    135deg,\n    var(--primary-light) 0%,\n    var(--primary-dark) 100%\n  );\n  color: white;\n  transform: translateY(-2px);\n}\n\n.btn:disabled:not(:hover) {\n  background: linear-gradient(\n    135deg,\n    var(--secondary-light) 0%,\n    var(--secondary-color) 100%\n  );\n  color: white;\n  cursor: not-allowed;\n  transform: none;\n}\n\n.btn-download {\n  width: 100%;\n  justify-content: center;\n}\n\n.btn-small {\n  padding: 8px;\n}\n\n.btn-clear,\n.btn-small {\n  background: var(--secondary-color);\n  padding: 4px 8px;\n  font-size: 0.75rem;\n}\n\n.btn-clear:hover,\n.btn-small:hover {\n  background: var(--secondary-light);\n}\n\n.btn-small {\n  padding: 8px 16px;\n  font-size: 14px;\n  background-color: var(--secondary-color);\n  color: white;\n  border: none;\n  border-radius: 5px;\n  cursor: pointer;\n}\n\n.btn-small:hover {\n  background-color: var(--secondary-light);\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container {\n    max-width: 1320px;\n  }\n}\n"
  },
  {
    "path": "desktop-client/web/src/styles/root.less",
    "content": "@charset \"UTF-8\";\n\n:root {\n  /* 基础蓝色系 */\n  --primary-color: #356bfd;\n  --primary-light: #5c89ff;\n  --primary-dark: #1a50d9;\n  --primary-color-rgb: 53, 107, 253;\n  --primary-light-rgb: 92, 137, 255;\n  --primary-dark-rgb: 26, 80, 217;\n\n  /* 辅助蓝色系 */\n  --secondary-color: #3498db;\n  --secondary-light: #5dade2;\n  --secondary-dark: #1a6ba3;\n  --secondary-color-rgb: 52, 152, 219;\n  --secondary-light-rgb: 93, 173, 226;\n  --secondary-dark-rgb: 26, 107, 163;\n}"
  },
  {
    "path": "desktop-client/web/src/utils/const.tsx",
    "content": "import electronService from \"../services/electronService\";\n\nimport { version } from \"../../package.json\";\n\nexport const THEME_COLOR = \"#5c89ff\"; // --primary-l\n\nexport const G_EmptyStr = \"-\";\n\nexport const fetchAppVersion = async () => {\n    let appVersion = version;\n  try {\n    const realVersion = await electronService.getAppVersion();\n    if (realVersion) {\n      return realVersion;\n    }\n  } catch (error) {\n    console.error(\"获取应用版本号失败:\", error);\n  }\n  return appVersion;\n};\n"
  },
  {
    "path": "desktop-client/web/src/utils/date.ts",
    "content": "/**\n * 时间格式化工具函数\n */\n\nimport type { ConfigType } from \"dayjs\";\nimport dayjs from \"dayjs\";\nimport { G_EmptyStr } from \"./const\";\n\nexport const DATE_TIME_FORMAT = \"YYYY-MM-DD HH:mm:ss\";\nexport const DATE_TIME_MIN_FORMAT = \"YYYY-MM-DD HH:mm\";\nconst DATE_FORMAT = \"YYYY-MM-DD\";\nconst TIME_FORMAT = \"HH:mm:ss\";\n\nexport function formatToDateTime(\n  date: ConfigType = null,\n  format = DATE_TIME_FORMAT\n): string {\n  return date ? dayjs(date).format(format) : G_EmptyStr;\n}\n\nexport function formatToDateTimeMin(\n  date: ConfigType = null,\n  format = DATE_TIME_MIN_FORMAT\n): string {\n  return formatToDateTime(date, format);\n}\n\nexport function formatToDate(\n  date: ConfigType = null,\n  format = DATE_FORMAT\n): string {\n  return date ? dayjs(date).format(format) : G_EmptyStr;\n}\n\nexport function formatToTime(\n  date: ConfigType = null,\n  format = TIME_FORMAT\n): string {\n  return date ? dayjs(date).format(format) : G_EmptyStr;\n}\n\nexport function formatToUTCDate(date: ConfigType = null): string {\n  return date ? dayjs(date).format() : G_EmptyStr;\n}\n\n/** 转Date实例 */\nexport function toDate(date?: ConfigType) {\n  return dayjs(date).toDate();\n}\n\n/** 转时间戳 */\nexport function toTimeStamp(date?: ConfigType) {\n  return dayjs(date).valueOf();\n}\n\nexport const dateUtil = dayjs;\n"
  },
  {
    "path": "desktop-client/web/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\nimport electron from 'vite-plugin-electron'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  base: './',\n  plugins: [\n    react(),\n    // Electron插件仅在生产构建时启用\n    // ...(process.env.NODE_ENV === 'production' ? [electron({\n    //   entry: 'electron/main.js',\n    // })] : [])\n  ],\n  resolve: {\n    alias: {\n      '@': '/src'\n    }\n  },\n  server: {\n    port: 9000,\n    open: true\n  },\n  build: {\n    outDir: '../ui',\n    emptyOutDir: true\n  }\n})\n"
  },
  {
    "path": "docker-compose.example.yaml",
    "content": "services:\n  capcut-mate:\n    image: gogoshine/capcut-mate:latest\n    #image: gogoshine/capcut-mate:sha-190a61f\n    ports:\n      - \"30000:30000\"\n    volumes:\n      - ./logs:/app/logs\n      - /opt/1panel/apps/openresty/openresty/www/sites/capcut-mate.jcaigc.cn/index/output:/app/output  # 挂载配置文件目录\n      - /etc/localtime:/etc/localtime:ro  # 挂载主机时区\n      - /etc/timezone:/etc/timezone:ro    # 挂载时区名称（可选）\n    environment:\n      # 草稿下载URL\n      - DRAFT_URL=https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft\n      # 用于将容器内部的文件路径转成URL，本质是将/app/替换成DOWNLOAD_URL得到下载路径\n      - DOWNLOAD_URL=https://capcut-mate.jcaigc.cn/\n      # 草稿提示URL\n      - TIP_URL=https://docs.jcaigc.cn\n      # 文件下载大小限制（字节），默认200MB（209715200）\n      - DOWNLOAD_FILE_SIZE_LIMIT=209715200\n    mem_limit: 2G     # 内存限制\n    memswap_limit: 2G # 总内存（物理内存 + Swap）限制\n    cpus: '2'       # CPU使用率限制为150%，即容器最多可以使用1.5个完整的CPU核心\n    oom_score_adj: -500  # 调整 OOM 杀手优先级\n    restart: unless-stopped  # 除非手动停止，否则总是重启容器\n    container_name: capcut-mate # 这里指容器名称，非必需，不指定时，名称为：<项目名称>-<服务名称>-<序号>\n    #entrypoint: [\"/bin/sh\", \"-c\", \"sleep 10000\"]"
  },
  {
    "path": "docker-compose.yaml",
    "content": "services:\n  capcut-mate:\n    image: gogoshine/capcut-mate:latest\n    #image: gogoshine/capcut-mate:sha-190a61f\n    platform: linux/amd64\n    ports:\n      - \"30000:30000\"\n    volumes:\n      - ./output:/app/output  # 挂载配置文件目录\n      - ./logs:/app/logs\n      - /etc/localtime:/etc/localtime:ro  # 挂载主机时区\n      - /etc/timezone:/etc/timezone:ro    # 挂载时区名称（可选）\n    environment:\n      # 草稿下载URL\n      - DRAFT_URL=http://127.0.0.1/openapi/capcut-mate/v1/get_draft\n      # 用于将容器内部的文件路径转成URL，本质是将/app/替换成DOWNLOAD_URL得到下载路径\n      - DOWNLOAD_URL=http://127.0.0.1/\n      # 草稿提示URL\n      - TIP_URL=https://docs.jcaigc.cn\n      # 文件下载大小限制（字节），默认200MB（209715200）\n      - DOWNLOAD_FILE_SIZE_LIMIT=209715200\n    networks:\n      - capcut-mate-network\n    mem_limit: 2G     # 内存限制\n    memswap_limit: 2G # 总内存（物理内存 + Swap）限制\n    cpus: '2'       # CPU使用率限制为150%，即容器最多可以使用1.5个完整的CPU核心\n    oom_score_adj: -500  # 调整 OOM 杀手优先级\n    restart: unless-stopped  # 除非手动停止，否则总是重启容器\n    container_name: capcut-mate # 这里指容器名称，非必需，不指定时，名称为：<项目名称>-<服务名称>-<序号>\n    #entrypoint: [\"/bin/sh\", \"-c\", \"sleep 10000\"]\n  \n  linux: # nginx服务器\n    image: gogoshine/linux:latest\n    platform: linux/amd64\n    ports:\n      - \"80:80\"\n    volumes:\n      - ./output:/app/www/output\n    networks:\n      - capcut-mate-network\n    mem_limit: 2G     # 内存限制\n    memswap_limit: 2G # 总内存（物理内存 + Swap）限制\n    cpus: '2.0'       # CPU使用率限制为150%，即容器最多可以使用1.5个完整的CPU核心\n    oom_score_adj: -500  # 调整 OOM 杀手优先级\n    restart: unless-stopped  # 除非手动停止，否则总是重启容器\n    container_name: linux # 这里指容器名称，非必需，不指定时，名称为：<项目名称>-<服务名称>-<序号>\n    #entrypoint: [\"/bin/sh\", \"-c\", \"sleep 10000\"]\n\nnetworks:\n  capcut-mate-network:\n    driver: bridge"
  },
  {
    "path": "docs/add_audios.md",
    "content": "# ADD_AUDIOS API Documentation\n\n## 🌐 Language Switch\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/add_audios\n```\n\n## Function Description\n\nBatch add audio materials to existing drafts. This interface supports adding multiple audio files to Jianying drafts, creating background music, sound effects, narration and other audio content for videos. Audio will be added to separate audio tracks without affecting video content.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"audio_infos\": \"[{\\\"audio_url\\\":\\\"https://assets.jcaigc.cn/audio1.mp3\\\",\\\"start\\\":0,\\\"end\\\":5000000,\\\"duration\\\":10000000,\\\"volume\\\":1.0,\\\"audio_effect\\\":\\\"reverb\\\"}]\"\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| draft_url | string | ✅ | - | Complete URL of the target draft |\n| audio_infos | string | ✅ | - | JSON string of audio information array |\n\n### audio_infos Array Structure\n\naudio_infos is a JSON string that resolves to an array, with each element containing the following fields:\n\n| Field | Type | Required | Default | Description |\n|-------|------|----------|---------|-------------|\n| audio_url | string | ✅ | - | URL address of the audio file |\n| start | number | ✅ | - | Audio start playback time (microseconds) |\n| end | number | ✅ | - | Audio end playback time (microseconds) |\n| duration | number | ❌ | Automatically obtained | Total audio duration (microseconds), automatically obtained if not provided |\n| volume | number | ❌ | 1.0 | Volume size (0.0-2.0) |\n| audio_effect | string | ❌ | None | Audio effect name |\n\n### Parameter Details\n\n#### Time Parameters\n\n- **start**: Start time of the audio on the timeline, unit microseconds (1 second = 1,000,000 microseconds)\n- **end**: End time of the audio on the timeline, unit microseconds\n- **duration**: Total duration of the audio file, used for material creation, unit microseconds, automatically obtained if not provided\n- **Playback Duration**: Actual playback duration = end - start\n\n#### Volume Control\n\n- **volume**: Audio volume size\n  - 1.0 = Original volume\n  - 0.5 = Half volume\n  - 0.0 = Mute\n  - Range: 0.0 - 2.0\n\n#### Audio Effects\n\n- **audio_effect**: Audio effect name\n  - None = No audio effect\n  - Example: `\"reverb\"` (reverb effect)\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"track_id\": \"audio-track-uuid\",\n  \"audio_ids\": [\"audio1-uuid\", \"audio2-uuid\", \"audio3-uuid\"]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| draft_url | string | Updated draft URL |\n| track_id | string | Audio track ID |\n| audio_ids | array | List of added audio IDs |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Audio Addition\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_audios \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"audio_infos\": \"[{\\\"audio_url\\\":\\\"https://assets.jcaigc.cn/bgm.mp3\\\",\\\"start\\\":0,\\\"end\\\":10000000,\\\"duration\\\":15000000,\\\"volume\\\":0.8}]\"\n  }'\n```\n\n#### 2. Batch Adding Multiple Audios\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_audios \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"audio_infos\": \"[{\\\"audio_url\\\":\\\"https://assets.jcaigc.cn/intro.mp3\\\",\\\"start\\\":0,\\\"end\\\":3000000,\\\"duration\\\":5000000,\\\"volume\\\":1.0},{\\\"audio_url\\\":\\\"https://assets.jcaigc.cn/bgm.mp3\\\",\\\"start\\\":3000000,\\\"end\\\":30000000,\\\"duration\\\":35000000,\\\"volume\\\":0.6}]\"\n  }'\n```\n\n#### 3. Audio with Fade In/Out Effects\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_audios \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"audio_infos\": \"[{\\\"audio_url\\\":\\\"https://assets.jcaigc.cn/outro.mp3\\\",\\\"start\\\":25000000,\\\"end\\\":30000000,\\\"duration\\\":8000000,\\\"volume\\\":0.9,\\\"audio_effect\\\":\\\"reverb\\\"}]\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | draft_url is required | Missing draft URL parameter | Provide a valid draft URL |\n| 400 | audio_infos is required | Missing audio information parameter | Provide valid audio information JSON |\n| 400 | audio_infos format error | JSON format is incorrect | Check JSON string format |\n| 400 | Audio configuration validation failed | Audio parameters do not meet requirements | Check parameters for each audio |\n| 400 | audio_url is required | Audio URL missing | Provide URL for each audio |\n| 400 | Time range invalid | end must be greater than start | Ensure end time is greater than start time |\n| 400 | Volume value invalid | volume not in 0.0-2.0 range | Use volume value between 0.0-2.0 |\n| 404 | Draft does not exist | Specified draft URL invalid | Check if draft URL is correct |\n| 404 | Audio resource does not exist | Audio URL inaccessible | Check if audio URL is accessible |\n| 500 | Audio processing failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **JSON Format**: audio_infos must be a valid JSON string\n2. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n3. **Audio Format**: Ensure audio file format is supported (e.g., MP3, WAV, AAC, etc.)\n4. **File Size**: Large audio files may affect processing speed\n5. **Network Access**: Audio URL must be accessible\n6. **Volume Range**: Volume value must be within 0.0-2.0 range\n7. **Track Limitation**: Audio overlap may occur in the same time period\n\n## Workflow\n\n1. Validate required parameters (draft_url, audio_infos)\n2. Parse audio_infos JSON string\n3. Validate parameter configuration for each audio\n4. Obtain and decrypt draft content\n5. Create audio track\n6. Add audio segments to track\n7. Apply volume and audio effects\n8. Save and encrypt draft\n9. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Videos](./add_videos.md)\n- [Add Images](./add_images.md)\n- [Save Draft](./save_draft.md)\n- [Generate Video](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_audios.zh.md",
    "content": "# ADD_AUDIOS API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/add_audios\n```\n\n## 功能描述\n\n批量向现有草稿中添加音频素材。该接口支持添加多个音频文件到剪映草稿，为视频创建背景音乐、音效、旁白等音频内容。音频将被添加到独立的音频轨道中，不会影响视频内容。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"audio_infos\": \"[{\\\"audio_url\\\":\\\"https://assets.jcaigc.cn/audio1.mp3\\\",\\\"start\\\":0,\\\"end\\\":5000000,\\\"duration\\\":10000000,\\\"volume\\\":1.0,\\\"audio_effect\\\":\\\"reverb\\\"}]\"\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| draft_url | string | ✅ | - | 目标草稿的完整URL |\n| audio_infos | string | ✅ | - | 音频信息数组的JSON字符串 |\n\n### audio_infos 数组结构\n\naudio_infos是一个JSON字符串，解析后为数组，每个元素包含以下字段：\n\n| 字段名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| audio_url | string | ✅ | - | 音频文件的URL地址 |\n| start | number | ✅ | - | 音频开始播放时间(微秒) |\n| end | number | ✅ | - | 音频结束播放时间(微秒) |\n| duration | number | ❌ | 自动获取 | 音频总时长(微秒)，如果不提供将自动获取 |\n| volume | number | ❌ | 1.0 | 音量大小(0.0-2.0) |\n| audio_effect | string | ❌ | None | 音频效果名称 |\n\n### 参数详解\n\n#### 时间参数\n\n- **start**: 音频在时间轴上的开始时间，单位为微秒（1秒 = 1,000,000微秒）\n- **end**: 音频在时间轴上的结束时间，单位为微秒\n- **duration**: 音频文件的总时长，用于素材创建，单位为微秒，如果不提供将自动获取\n- **播放时长**: 实际播放时长 = end - start\n\n#### 音量控制\n\n- **volume**: 音频音量大小\n  - 1.0 = 原始音量\n  - 0.5 = 一半音量\n  - 0.0 = 静音\n  - 范围：0.0 - 2.0\n\n#### 音频效果\n\n- **audio_effect**: 音频效果名称\n  - None = 无音频效果\n  - 示例：`\"reverb\"`（混响效果）\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"track_id\": \"audio-track-uuid\",\n  \"audio_ids\": [\"audio1-uuid\", \"audio2-uuid\", \"audio3-uuid\"]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| draft_url | string | 更新后的草稿URL |\n| track_id | string | 音频轨道ID |\n| audio_ids | array | 添加的音频ID列表 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本音频添加\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_audios \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"audio_infos\": \"[{\\\"audio_url\\\":\\\"https://assets.jcaigc.cn/bgm.mp3\\\",\\\"start\\\":0,\\\"end\\\":10000000,\\\"duration\\\":15000000,\\\"volume\\\":0.8}]\"\n  }'\n```\n\n#### 2. 多音频批量添加\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_audios \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"audio_infos\": \"[{\\\"audio_url\\\":\\\"https://assets.jcaigc.cn/intro.mp3\\\",\\\"start\\\":0,\\\"end\\\":3000000,\\\"duration\\\":5000000,\\\"volume\\\":1.0},{\\\"audio_url\\\":\\\"https://assets.jcaigc.cn/bgm.mp3\\\",\\\"start\\\":3000000,\\\"end\\\":30000000,\\\"duration\\\":35000000,\\\"volume\\\":0.6}]\"\n  }'\n```\n\n#### 3. 带淡入淡出效果的音频\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_audios \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"audio_infos\": \"[{\\\"audio_url\\\":\\\"https://assets.jcaigc.cn/outro.mp3\\\",\\\"start\\\":25000000,\\\"end\\\":30000000,\\\"duration\\\":8000000,\\\"volume\\\":0.9,\\\"audio_effect\\\":\\\"reverb\\\"}]\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | draft_url是必填项 | 缺少草稿URL参数 | 提供有效的草稿URL |\n| 400 | audio_infos是必填项 | 缺少音频信息参数 | 提供有效的音频信息JSON |\n| 400 | audio_infos格式错误 | JSON格式不正确 | 检查JSON字符串格式 |\n| 400 | 音频配置验证失败 | 音频参数不符合要求 | 检查每个音频的参数 |\n| 400 | audio_url是必填项 | 音频URL缺失 | 为每个音频提供URL |\n| 400 | 时间范围无效 | end必须大于start | 确保结束时间大于开始时间 |\n| 400 | 音量值无效 | volume不在0.0-2.0范围内 | 使用0.0-2.0之间的音量值 |\n| 404 | 草稿不存在 | 指定的草稿URL无效 | 检查草稿URL是否正确 |\n| 404 | 音频资源不存在 | 音频URL无法访问 | 检查音频URL是否可访问 |\n| 500 | 音频处理失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **JSON格式**: audio_infos必须是合法的JSON字符串\n2. **时间单位**: 所有时间参数使用微秒（1秒 = 1,000,000微秒）\n3. **音频格式**: 确保音频文件格式被支持（如MP3、WAV、AAC等）\n4. **文件大小**: 大音频文件可能影响处理速度\n5. **网络访问**: 音频URL必须可以正常访问\n6. **音量范围**: 音量值必须在0.0-2.0范围内\n7. **轨道限制**: 同一时间段可能存在音频重叠\n\n## 工作流程\n\n1. 验证必填参数（draft_url, audio_infos）\n2. 解析audio_infos JSON字符串\n3. 验证每个音频的参数配置\n4. 获取并解密草稿内容\n5. 创建音频轨道\n6. 添加音频片段到轨道\n7. 应用音量和音频效果\n8. 保存并加密草稿\n9. 返回处理结果\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加视频](./add_videos.md)\n- [添加图片](./add_images.md)\n- [保存草稿](./save_draft.md)\n- [生成视频](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)"
  },
  {
    "path": "docs/add_captions.md",
    "content": "# ADD_CAPTIONS API Documentation\n\n## 🌐 Language Switch\n[中文版](./add_captions.zh.md) | [English](./add_captions.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/add_captions\n```\n\n## Function Description\n\nBatch add captions to existing drafts. This interface is used to add captions to Jianying drafts within specified time periods, supporting rich caption style settings including text color, border color, alignment, transparency, font, font size, letter spacing, line spacing, scaling, and position adjustments.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"captions\": \"[{\\\"start\\\":0,\\\"end\\\":10000000,\\\"text\\\":\\\"Hello, Jianying\\\",\\\"keyword\\\":\\\"Hello\\\",\\\"keyword_color\\\":\\\"#457616\\\",\\\"keyword_font_size\\\":15,\\\"font_size\\\":15}]\",\n  \"text_color\": \"#ffffff\",\n  \"border_color\": null,\n  \"alignment\": 1,\n  \"alpha\": 1.0,\n  \"font\": null,\n  \"font_size\": 15,\n  \"letter_spacing\": null,\n  \"line_spacing\": null,\n  \"scale_x\": 1.0,\n  \"scale_y\": 1.0,\n  \"transform_x\": 0.0,\n  \"transform_y\": 0.0,\n  \"style_text\": false\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| draft_url | string |✅ | - | Complete URL of the target draft |\n| captions | string |✅ | - | JSON string of caption information list |\n| text_color | string | ❌ | \"#ffffff\" | Text color (hexadecimal) |\n| border_color | string |❌ | null | Border color (hexadecimal) |\n| alignment | integer |❌ | 1 | Text alignment (0-5) |\n| alpha | number |❌ | 1.0 | Text transparency (0.0-1.0) |\n| font | string |❌ | null | Font name |\n| font_size | integer |❌ | 15 | Font size |\n| letter_spacing | number |❌ | null | Letter spacing |\n| line_spacing | number | ❌ | null | Line spacing |\n| scale_x | number |❌ | 1.0 | Horizontal scaling factor |\n| scale_y | number | ❌ | 1.0 | Vertical scaling factor |\n| transform_x | number | ❌ | 0.0 | Horizontal position offset |\n| transform_y | number | ❌ | 0.0 | Vertical position offset |\n| style_text | boolean |❌ | false | Whether to apply rich text styling |\n\n### Parameter Details\n\n#### captions Array Structure\n\n`captions` is a JSON string containing an array of caption objects, each with the following fields:\n\n```json\n[\n  {\n    \"start\": 0,\n    \"end\": 10000000,\n    \"text\": \"Hello, Jianying\",\n    \"keyword\": \"Hello\",\n    \"keyword_color\": \"#457616\",\n    \"keyword_font_size\": 15,\n    \"font_size\": 15\n  }\n]\n```\n\n**Field Description**:\n- `start`: Caption start time (microseconds)\n- `end`: Caption end time (microseconds)\n- `text`: Caption text content\n- `keyword`: Keyword to highlight\n- `keyword_color`: Keyword highlight color\n- `keyword_font_size`: Keyword font size\n- `font_size`: Base font size\n\n#### Time Parameters\n\n- **start**: Start time of the caption on the timeline, unit microseconds (1 second = 1,000,000 microseconds)\n- **end**: End time of the caption on the timeline, unit microseconds\n- **Duration**: Caption duration = end - start\n\n#### Style Parameters\n\n- **text_color**: Main text color in hexadecimal format (e.g., \"#ffffff\" for white)\n- **border_color**: Text border color, null means no border\n- **alignment**: Text alignment mode (0-5)\n- **alpha**: Text transparency (0.0 = fully transparent, 1.0 = fully opaque)\n- **font_size**: Base font size in pixels\n- **scale_x/scale_y**: Horizontal/vertical scaling factors\n- **transform_x/transform_y**: Position offset values\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"track_id\": \"caption-track-uuid\",\n  \"text_ids\": [\"text1-uuid\", \"text2-uuid\"],\n  \"segment_ids\": [\"segment1-uuid\", \"segment2-uuid\"],\n  \"segment_infos\": [\n    {\n      \"id\": \"segment1-uuid\",\n      \"start\": 0,\n      \"end\": 5000000\n    }\n  ]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| draft_url | string | Updated draft URL |\n| track_id | string | Caption track ID |\n| text_ids | array | List of added text IDs |\n| segment_ids | array | List of segment IDs |\n| segment_infos | array | Segment information array |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Caption Addition\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_captions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"captions\": \"[{\\\"start\\\":0,\\\"end\\\":5000000,\\\"text\\\":\\\"Welcome to Jianying\\\"}]\",\n    \"text_color\": \"#ffffff\",\n    \"font_size\": 18\n  }'\n```\n\n#### 2. Caption with Keyword Highlighting\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_captions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"captions\": \"[{\\\"start\\\":0,\\\"end\\\":3000000,\\\"text\\\":\\\"Hello World\\\",\\\"keyword\\\":\\\"Hello\\\",\\\"keyword_color\\\":\\\"#ff0000\\\",\\\"keyword_font_size\\\":20}]\",\n    \"text_color\": \"#ffffff\",\n    \"font_size\": 16\n  }'\n```\n\n#### 3. Styled Caption with Positioning\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_captions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"captions\": \"[{\\\"start\\\":2000000,\\\"end\\\":7000000,\\\"text\\\":\\\"Styled Caption\\\"}]\",\n    \"text_color\": \"#00ff00\",\n    \"border_color\": \"#000000\",\n    \"alignment\": 2,\n    \"alpha\": 0.8,\n    \"font_size\": 20,\n    \"scale_x\": 1.2,\n    \"scale_y\": 1.2,\n    \"transform_x\": 100,\n    \"transform_y\": 50\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | draft_url is required | Missing draft URL parameter | Provide a valid draft URL |\n| 400 | captions is required | Missing caption information parameter | Provide valid caption information JSON |\n| 400 | captions format error | JSON format is incorrect | Check JSON string format |\n| 400 | Caption configuration validation failed | Caption parameters do not meet requirements | Check parameters for each caption |\n| 400 | start is required | Caption start time missing | Provide start time for each caption |\n| 400 | end is required | Caption end time missing | Provide end time for each caption |\n| 400 | text is required | Caption text content missing | Provide text content for each caption |\n| 400 | Time range invalid | end must be greater than start | Ensure end time is greater than start time |\n| 400 | Font size invalid | font_size must be positive | Use positive font size value |\n| 400 | Alpha value invalid | alpha not in 0.0-1.0 range | Use alpha value between 0.0-1.0 |\n| 404 | Draft does not exist | Specified draft URL invalid | Check if draft URL is correct |\n| 500 | Caption processing failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **JSON Format**: captions must be a valid JSON string\n2. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n3. **Color Format**: Colors use hexadecimal format (e.g., \"#ffffff\")\n4. **Font Support**: Ensure font names are supported by the system\n5. **Position Range**: transform_x and transform_y values should be within reasonable ranges\n6. **Scaling**: Scale factors should typically be between 0.1-5.0\n7. **Track Management**: Multiple captions will be added to the same caption track\n\n## Workflow\n\n1. Validate required parameters (draft_url, captions)\n2. Parse captions JSON string\n3. Validate parameter configuration for each caption\n4. Obtain and decrypt draft content\n5. Create caption track\n6. Add text segments to track\n7. Apply styling and positioning\n8. Save and encrypt draft\n9. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Videos](./add_videos.md)\n- [Add Images](./add_images.md)\n- [Add Text Style](./add_text_style.md)\n- [Save Draft](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_captions.zh.md",
    "content": "# ADD_CAPTIONS API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/add_captions\n```\n\n## 功能描述\n\n向现有草稿中批量添加字幕。该接口用于在指定的时间段内添加字幕到剪映草稿中，支持丰富的字幕样式设置，包括文本颜色、边框颜色、对齐方式、透明度、字体、字体大小、字间距、行间距、缩放和位置调整等。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"captions\": \"[{\\\"start\\\":0,\\\"end\\\":10000000,\\\"text\\\":\\\"你好，剪映\\\",\\\"keyword\\\":\\\"好\\\",\\\"keyword_color\\\":\\\"#457616\\\",\\\"keyword_font_size\\\":15,\\\"font_size\\\":15}]\",\n  \"text_color\": \"#ffffff\",\n  \"border_color\": null,\n  \"alignment\": 1,\n  \"alpha\": 1.0,\n  \"font\": null,\n  \"font_size\": 15,\n  \"letter_spacing\": null,\n  \"line_spacing\": null,\n  \"scale_x\": 1.0,\n  \"scale_y\": 1.0,\n  \"transform_x\": 0.0,\n  \"transform_y\": 0.0,\n  \"style_text\": false\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| draft_url | string | ✅ | - | 目标草稿的完整URL |\n| captions | string | ✅ | - | 字幕信息列表的JSON字符串 |\n| text_color | string | ❌ | \"#ffffff\" | 文本颜色（十六进制） |\n| border_color | string | ❌ | null | 边框颜色（十六进制） |\n| alignment | integer | ❌ | 1 | 文本对齐方式（0-5） |\n| alpha | number | ❌ | 1.0 | 文本透明度（0.0-1.0） |\n| font | string | ❌ | null | 字体名称 |\n| font_size | integer | ❌ | 15 | 字体大小 |\n| letter_spacing | number | ❌ | null | 字间距 |\n| line_spacing | number | ❌ | null | 行间距 |\n| scale_x | number | ❌ | 1.0 | 水平缩放比例 |\n| scale_y | number | ❌ | 1.0 | 垂直缩放比例 |\n| transform_x | number | ❌ | 0.0 | X轴位置偏移（像素） |\n| transform_y | number | ❌ | 0.0 | Y轴位置偏移（像素） |\n| style_text | boolean | ❌ | false | 是否使用样式文本 |\n| has_shadow | boolean | ❌ | false | 是否启用文本阴影 |\n| shadow_info | object | ❌ | null | 文本阴影参数 |\n\n### captions字段详细说明\n\ncaptions是一个JSON字符串，包含字幕数组，每个字幕对象包含以下字段：\n\n| 字段名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| start | integer | ✅ | - | 字幕开始时间（微秒） |\n| end | integer | ✅ | - | 字幕结束时间（微秒） |\n| text | string | ✅ | - | 字幕文本内容 |\n| keyword | string | ❌ | null | 关键词（用\\|分隔多个关键词） |\n| keyword_color | string | ❌ | \"#ff7100\" | 关键词颜色 |\n| keyword_font_size | integer | ❌ | 15 | 关键词字体大小 |\n| font_size | integer | ❌ | 15 | 文本字体大小 |\n| in_animation | string | ❌ | null | 入场动画 |\n| out_animation | string | ❌ | null | 出场动画 |\n| loop_animation | string | ❌ | null | 循环动画 |\n| in_animation_duration | integer | ❌ | null | 入场动画时长 |\n| out_animation_duration | integer | ❌ | null | 出场动画时长 |\n| loop_animation_duration | integer | ❌ | null | 循环动画时长 |\n\n### 参数详解\n\n#### 时间参数\n\n- **start**: 字幕在时间轴上的开始时间，单位为微秒（1秒 = 1,000,000微秒）\n- **end**: 字幕在时间轴上的结束时间，单位为微秒\n- **duration**: 字幕显示时长 = end - start\n\n#### 对齐方式说明\n\n| 值 | 说明 |\n|---|------|\n| 0 | 左对齐 |\n| 1 | 居中对齐 |\n| 2 | 右对齐 |\n| 3 | 垂直居中 |\n| 4 | 垂直左对齐 |\n| 5 | 垂直右对齐 |\n\n#### 字体大小参数\n\n- **font_size**: 普通文本（非关键词）的字体大小\n  - 默认值：15（仅在caption项中未指定font_size时生效）\n  - 建议范围：8-72\n  - 注意：如果在caption项中明确指定了font_size，则使用caption项中的值；如果未指定，则使用接口级别的font_size参数值\n\n#### 缩放参数\n\n- **scale_x**: 字幕的水平缩放比例\n  - 1.0 = 原始大小\n  - 0.5 = 水平缩小到一半\n  - 2.0 = 水平放大到两倍\n\n- **scale_y**: 字幕的垂直缩放比例\n  - 1.0 = 原始大小\n  - 0.5 = 垂直缩小到一半\n  - 2.0 = 垂直放大到两倍\n\n#### 位置参数\n\n- **transform_x**: 字幕在X轴方向的位置偏移，单位为像素\n  - 正值向右移动\n  - 负值向左移动\n  - 以画布中心为原点\n  - 实际存储时会转换为半画布宽单位（假设画布宽度1920，即除以960）\n\n- **transform_y**: 字幕在Y轴方向的位置偏移，单位为像素\n  - 正值向下移动\n  - 负值向上移动\n  - 以画布中心为原点\n  - 实际存储时会转换为半画布高单位（假设画布高度1080，即除以540）\n\n#### 文本阴影参数\n\n`shadow_info` 是一个对象，包含以下字段：\n\n| 字段名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| shadow_alpha | number | ❌ | 1.0 | 阴影不透明度，取值范围为[0, 1] |\n| shadow_color | string | ❌ | \"#000000\" | 阴影颜色（十六进制） |\n| shadow_diffuse | number | ❌ | 15.0 | 阴影扩散程度，取值范围为[0, 100] |\n| shadow_distance | number | ❌ | 5.0 | 阴影距离，取值范围为[0, 100] |\n| shadow_angle | number | ❌ | -45.0 | 阴影角度，取值范围为[-180, 180] |\n\n当 `has_shadow` 设置为 `true` 但未提供 `shadow_info` 时，系统将使用以下默认阴影配置：\n\n```json\n{\n  \"shadow_color\": \"#000000\",\n  \"shadow_alpha\": 0.9,\n  \"shadow_diffuse\": 15,\n  \"shadow_distance\": 5,\n  \"shadow_angle\": -45\n}\n```\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"track_id\": \"text_track_123\",\n  \"text_ids\": [\"text_001\", \"text_002\"],\n  \"segment_ids\": [\"seg_001\", \"seg_002\"],\n  \"segment_infos\": [\n    {\n      \"id\": \"seg_001\",\n      \"start\": 0,\n      \"end\": 5000000\n    },\n    {\n      \"id\": \"seg_002\",\n      \"start\": 5000000,\n      \"end\": 10000000\n    }\n  ]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| draft_url | string | 更新后的草稿URL |\n| track_id | string | 字幕轨道ID |\n| text_ids | array | 字幕ID列表 |\n| segment_ids | array | 字幕片段ID列表 |\n| segment_infos | array | 片段信息列表 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本字幕添加\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_captions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"captions\": \"[{\\\"start\\\":0,\\\"end\\\":5000000,\\\"text\\\":\\\"你好，剪映\\\"}]\",\n    \"text_color\": \"#ffffff\",\n    \"alignment\": 1,\n    \"alpha\": 1.0,\n    \"font_size\": 20\n  }'\n```\n\n#### 2. 多字幕添加\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_captions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"captions\": \"[{\\\"start\\\":0,\\\"end\\\":5000000,\\\"text\\\":\\\"你好，剪映\\\"},{\\\"start\\\":5000000,\\\"end\\\":10000000,\\\"text\\\":\\\"欢迎使用字幕功能\\\"}]\",\n    \"text_color\": \"#ffffff\",\n    \"alignment\": 1,\n    \"alpha\": 1.0,\n    \"font_size\": 16\n  }'\n```\n\n#### 3. 带样式和位置的字幕\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_captions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"captions\": \"[{\\\"start\\\":0,\\\"end\\\":5000000,\\\"text\\\":\\\"你好，剪映\\\",\\\"keyword\\\":\\\"好\\\",\\\"keyword_color\\\":\\\"#ff0000\\\"]\",\n    \"text_color\": \"#ffffff\",\n    \"alignment\": 1,\n    \"alpha\": 1.0,\n    \"font_size\": 20,\n    \"scale_x\": 1.2,\n    \"scale_y\": 1.2,\n    \"transform_x\": 100.0,\n    \"transform_y\": -50.0\n  }'\n```\n\n#### 4. 带文本阴影的字幕\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_captions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"captions\": \"[{\\\"start\\\":0,\\\"end\\\":5000000,\\\"text\\\":\\\"你好，剪映\\\"}]\",\n    \"text_color\": \"#ffffff\",\n    \"alignment\": 1,\n    \"alpha\": 1.0,\n    \"font_size\": 20,\n    \"has_shadow\": true,\n    \"shadow_info\": {\n      \"shadow_alpha\": 0.8,\n      \"shadow_color\": \"#000000\",\n      \"shadow_diffuse\": 20.0,\n      \"shadow_distance\": 10.0,\n      \"shadow_angle\": -45.0\n    }\n  }'\n```\n\n#### 5. 使用默认文本阴影的字幕\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_captions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"captions\": \"[{\\\"start\\\":0,\\\"end\\\":5000000,\\\"text\\\":\\\"你好，剪映\\\"}]\",\n    \"text_color\": \"#ffffff\",\n    \"alignment\": 1,\n    \"alpha\": 1.0,\n    \"font_size\": 20,\n    \"has_shadow\": true\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | draft_url是必填项 | 缺少草稿URL参数 | 提供有效的draft_url |\n| 400 | captions是必填项 | 缺少字幕信息参数 | 提供有效的captions |\n| 400 | 无效的字幕信息，请检查captions字段值是否正确 | 字幕参数校验失败 | 检查字幕参数是否符合要求 |\n| 400 | 时间范围无效 | end必须大于start | 确保结束时间大于开始时间 |\n| 404 | 草稿不存在 | 指定的草稿URL无效 | 检查草稿URL是否正确 |\n| 500 | 字幕添加失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **时间单位**: 所有时间参数使用微秒（1秒 = 1,000,000微秒）\n2. **字幕时长**: end 时间必须大于 start 时间\n3. **颜色格式**: 颜色值使用十六进制格式，如 \"#ffffff\"、\"#ff0000\"\n4. **关键词高亮**: 暂未完全实现，目前为预留功能\n5. **动画效果**: 暂未完全实现，目前为预留功能\n6. **字体支持**: 字体名称需要系统支持或使用默认字体\n7. **对齐方式**: 目前仅支持基础对齐方式（0-2），高级对齐方式（3-5）为预留功能\n8. **坐标系统**: transform_x 和 transform_y 使用像素值，会自动转换为草稿相对坐标\n9. **缩放参数**: scale_x 和 scale_y 建议在合理范围内使用\n\n## 工作流程\n\n1. 验证必填参数（draft_url, captions）\n2. 检查时间范围的有效性\n3. 从缓存中获取草稿\n4. 创建字幕轨道（如果不存在）\n5. 遍历字幕信息，创建字幕片段\n6. 添加片段到轨道\n7. 保存草稿\n8. 返回字幕信息\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加视频](./add_videos.md)\n- [添加音频](./add_audios.md)\n- [添加图片](./add_images.md)\n- [保存草稿](./save_draft.md)\n- [生成视频](./gen_video.md)\n\n---\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_effects.md",
    "content": "# ADD_EFFECTS API Documentation\n\n## 🌐 Language Switch\n[中文版](./add_effects.zh.md) | [English](./add_effects.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/add_effects\n```\n\n## Function Description\n\nAdd video effects to existing drafts. This interface is used to add effect materials to Jianying drafts within specified time periods, supporting multiple effect types such as border effects, filter effects, and dynamic effects. Effects can be used to enhance the visual impact of videos.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"effect_infos\": \"[{\\\"effect_title\\\": \\\"Recording Border III\\\", \\\"start\\\": 0, \\\"end\\\": 5000000}, {\\\"effect_title\\\": \\\"Vintage Filter\\\", \\\"start\\\": 2000000, \\\"end\\\": 7000000}]\"\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| draft_url | string |✅ | - | Complete URL of the target draft |\n| effect_infos | string |✅ | - | JSON string of effect information list |\n\n### Parameter Details\n\n#### effect_infos Array Structure\n\n`effect_infos` is a JSON string containing an array of effect objects, each with the following fields:\n\n```json\n[\n  {\n    \"effect_title\": \"Recording Border III\",  // Effect name/title, required parameter\n    \"start\": 0,                              // Effect start time (microseconds), required parameter\n    \"end\": 5000000                           // Effect end time (microseconds), required parameter\n  }\n]\n```\n\n**Field Description**:\n- `effect_title`: Effect name, must be an existing effect name in the system\n- `start`: Effect start time in microseconds\n- `end`: Effect end time in microseconds\n\n#### Time Parameters\n\n- **start**: Start time of the effect on the timeline, unit microseconds (1 second = 1,000,000 microseconds)\n- **end**: End time of the effect on the timeline, unit microseconds\n- **Duration**: Effect duration = end - start\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"track_id\": \"effect-track-uuid\",\n  \"effect_ids\": [\"effect1-uuid\", \"effect2-uuid\"],\n  \"segment_ids\": [\"segment1-uuid\", \"segment2-uuid\"]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| draft_url | string | Updated draft URL |\n| track_id | string | Effect track ID |\n| effect_ids | array | List of added effect IDs |\n| segment_ids | array | List of segment IDs |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Effect Addition\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_effects \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"effect_infos\": \"[{\\\"effect_title\\\":\\\"Vignette\\\",\\\"start\\\":0,\\\"end\\\":10000000}]\"\n  }'\n```\n\n#### 2. Multiple Effects\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_effects \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"effect_infos\": \"[{\\\"effect_title\\\":\\\"Border Effect\\\",\\\"start\\\":0,\\\"end\\\":5000000},{\\\"effect_title\\\":\\\"Color Filter\\\",\\\"start\\\":3000000,\\\"end\\\":8000000}]\"\n  }'\n```\n\n#### 3. Sequential Effects\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_effects \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"effect_infos\": \"[{\\\"effect_title\\\":\\\"Fade In\\\",\\\"start\\\":0,\\\"end\\\":1000000},{\\\"effect_title\\\":\\\"Main Effect\\\",\\\"start\\\":1000000,\\\"end\\\":9000000},{\\\"effect_title\\\":\\\"Fade Out\\\",\\\"start\\\":9000000,\\\"end\\\":10000000}]\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | draft_url is required | Missing draft URL parameter | Provide a valid draft URL |\n| 400 | effect_infos is required | Missing effect information parameter | Provide valid effect information JSON |\n| 400 | effect_infos format error | JSON format is incorrect | Check JSON string format |\n| 400 | Effect configuration validation failed | Effect parameters do not meet requirements | Check parameters for each effect |\n| 400 | effect_title is required | Effect title missing | Provide title for each effect |\n| 400 | start is required | Effect start time missing | Provide start time for each effect |\n| 400 | end is required | Effect end time missing | Provide end time for each effect |\n| 400 | Time range invalid | end must be greater than start | Ensure end time is greater than start time |\n| 400 | Effect title not found | Specified effect does not exist | Check if effect title is valid |\n| 404 | Draft does not exist | Specified draft URL invalid | Check if draft URL is correct |\n| 500 | Effect processing failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **JSON Format**: effect_infos must be a valid JSON string\n2. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n3. **Effect Names**: Effect titles must match exactly with system effect names\n4. **Time Overlap**: Multiple effects can be applied to the same time period\n5. **Effect Priority**: Effects are applied in the order they appear in the array\n6. **Performance**: Complex effects may affect video processing performance\n7. **Supported Effects**: System currently supports transition effects like \"Fade In\", \"Fade Out\", color filters, etc.\n8. **Preview Limitation**: Effects may not be visible in preview but will be applied during final video generation\n\n## Workflow\n\n1. Validate required parameters (draft_url, effect_infos)\n2. Parse effect_infos JSON string\n3. Validate parameter configuration for each effect\n4. Obtain and decrypt draft content\n5. Create effect track\n6. Add effect segments to track\n7. Apply effects to video segments\n8. Save and encrypt draft\n9. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Videos](./add_videos.md)\n- [Add Images](./add_images.md)\n- [Save Draft](./save_draft.md)\n- [Generate Video](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_effects.zh.md",
    "content": "# ADD_EFFECTS API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```bash\nPOST /openapi/capcut-mate/v1/add_effects\n```\n\n## 功能描述\n\n向现有草稿中添加视频特效。该接口用于在指定的时间段内添加特效素材到剪映草稿中，支持多种特效类型如边框特效、滤镜特效、动态特效等。特效可以用于增强视频的视觉效果。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"effect_infos\": \"[{\\\"effect_title\\\": \\\"录制边框 III\\\", \\\"start\\\": 0, \\\"end\\\": 5000000}, {\\\"effect_title\\\": \\\"复古滤镜\\\", \\\"start\\\": 2000000, \\\"end\\\": 7000000}]\"\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| draft_url | string | ✅ | - | 目标草稿的完整URL |\n| effect_infos | string | ✅ | - | 特效信息列表的JSON字符串 |\n\n### 参数详解\n\n#### effect_infos 字段格式\n\n`effect_infos` 是一个JSON字符串，包含特效信息数组，每个特效对象包含以下字段：\n\n```json\n[\n    {\n        \"effect_title\": \"录制边框 III\",  // 特效名称/标题，必选参数\n        \"start\": 0,                     // 特效开始时间（微秒），必选参数  \n        \"end\": 5000000                  // 特效结束时间（微秒），必选参数\n    }\n]\n```\n\n**字段说明**:\n- `effect_title`: 特效名称，必须是系统中已存在的特效名称\n- `start`: 特效开始时间，单位为微秒，必须大于等于0\n- `end`: 特效结束时间，单位为微秒，必须大于start\n\n#### 时间参数\n\n- **start**: 特效在时间轴上的开始时间，单位为微秒（1秒 = 1,000,000微秒）\n- **end**: 特效在时间轴上的结束时间，单位为微秒\n- **duration**: 特效显示时长 = end - start\n\n#### 特效名称说明\n\n- **effect_title**: 特效的名称\n  - 格式：字符串\n  - 示例：`\"录制边框 III\"`\n  - 获取方式：通过剪映特效库或相关API获取\n  - 常见特效名称：\n    - 边框特效：\"录制边框 III\", \"简约边框\", \"霓虹边框\"\n    - 滤镜特效：\"复古滤镜\", \"黑白滤镜\", \"暖色调\"\n    - 动态特效：\"粒子效果\", \"光晕效果\", \"闪烁特效\"\n    - 转场特效：\"淡入淡出\", \"推拉门\", \"马赛克转场\"\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"track_id\": \"effect_track_123\",\n  \"effect_ids\": [\"effect_001\", \"effect_002\"],\n  \"segment_ids\": [\"seg_001\", \"seg_002\"]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| draft_url | string | 更新后的草稿URL |\n| track_id | string | 特效轨道ID |\n| effect_ids | array | 添加的特效ID列表 |\n| segment_ids | array | 创建的特效片段ID列表 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本特效添加\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_effects \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"effect_infos\": \"[{\\\"effect_title\\\": \\\"录制边框 III\\\", \\\"start\\\": 0, \\\"end\\\": 5000000}]\"\n  }'\n```\n\n#### 2. 批量特效添加\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_effects \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"effect_infos\": \"[{\\\"effect_title\\\": \\\"录制边框 III\\\", \\\"start\\\": 0, \\\"end\\\": 5000000}, {\\\"effect_title\\\": \\\"复古滤镜\\\", \\\"start\\\": 2000000, \\\"end\\\": 7000000}]\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | draft_url是必填项 | 缺少草稿URL参数 | 提供有效的draft_url |\n| 400 | effect_infos是必填项 | 缺少特效信息参数 | 提供有效的effect_infos |\n| 400 | 时间范围无效 | end必须大于start | 确保结束时间大于开始时间 |\n| 400 | 无效的特效信息，请检查effect_infos字段值是否正确 | 特效参数校验失败 | 检查特效参数是否符合要求 |\n| 404 | 草稿不存在 | 指定的草稿URL无效 | 检查草稿URL是否正确 |\n| 404 | 特效不存在 | 指定的特效名称无效 | 确认特效名称是否正确 |\n| 500 | 特效添加失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **时间单位**: 所有时间参数使用微秒（1秒 = 1,000,000微秒）\n2. **特效名称**: 确保使用有效的特效名称\n3. **时间范围**: end必须大于start\n4. **轨道管理**: 系统自动创建特效轨道\n5. **性能考虑**: 避免同时添加大量特效\n\n## 工作流程\n\n1. 验证必填参数（draft_url, effect_infos）\n2. 检查时间范围的有效性\n3. 从缓存中获取草稿\n4. 创建特效轨道（如果不存在）\n5. 解析特效信息并创建特效片段\n6. 添加片段到轨道\n7. 保存草稿\n8. 返回特效信息\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加视频](./add_videos.md)\n- [添加音频](./add_audios.md)\n- [添加图片](./add_images.md)\n- [保存草稿](./save_draft.md)\n- [生成视频](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_filters.md",
    "content": "# ADD_FILTERS API Documentation\n\n## 🌐 Language Switch\n[中文版](./add_filters.zh.md) | [English](./add_filters.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/add_filters\n```\n\n## Function Description\n\nAdd video filters to existing drafts. This interface is used to add filter materials to Jianying drafts within specified time periods, supporting various filter types such as vintage, black and white, cinematic, etc. Filters can be used to adjust the color tone and visual style of videos.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"filter_infos\": \"[{\\\"filter_title\\\": \\\"复古\\\", \\\"start\\\": 0, \\\"end\\\": 5000000, \\\"intensity\\\": 80}, {\\\"filter_title\\\": \\\"黑白\\\", \\\"start\\\": 2000000, \\\"end\\\": 7000000}]\"\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| draft_url | string |✅ | - | Complete URL of the target draft |\n| filter_infos | string |✅ | - | JSON string of filter information list |\n\n### Parameter Details\n\n#### filter_infos Array Structure\n\n`filter_infos` is a JSON string containing an array of filter objects, each with the following fields:\n\n```json\n[\n  {\n    \"filter_title\": \"复古\",       // Filter name/title, required parameter\n    \"start\": 0,                   // Filter start time (microseconds), required parameter\n    \"end\": 5000000,               // Filter end time (microseconds), required parameter\n    \"intensity\": 80               // Filter intensity (0-100), optional, default 100\n  }\n]\n```\n\n**Field Description**:\n- `filter_title`: Filter name, must be an existing filter name in the system\n- `start`: Filter start time in microseconds\n- `end`: Filter end time in microseconds\n- `intensity`: Filter intensity (0-100), controls the strength of the filter effect, default is 100\n\n#### Time Parameters\n\n- **start**: Start time of the filter on the timeline, unit microseconds (1 second = 1,000,000 microseconds)\n- **end**: End time of the filter on the timeline, unit microseconds\n- **Duration**: Filter duration = end - start\n\n#### Intensity Parameter\n\n- **intensity**: Controls the strength of the filter effect\n  - Range: 0-100\n  - Default: 100 (full intensity)\n  - Lower values result in a more subtle filter effect\n  - Example: `intensity: 50` applies the filter at 50% strength\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"track_id\": \"filter-track-uuid\",\n  \"filter_ids\": [\"filter1-uuid\", \"filter2-uuid\"],\n  \"segment_ids\": [\"segment1-uuid\", \"segment2-uuid\"]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| draft_url | string | Updated draft URL |\n| track_id | string | Filter track ID |\n| filter_ids | array | List of added filter IDs |\n| segment_ids | array | List of segment IDs |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Filter Addition\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_filters \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"filter_infos\": \"[{\\\"filter_title\\\":\\\"复古\\\",\\\"start\\\":0,\\\"end\\\":10000000}]\"\n  }'\n```\n\n#### 2. Filter with Custom Intensity\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_filters \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"filter_infos\": \"[{\\\"filter_title\\\":\\\"黑白\\\",\\\"start\\\":0,\\\"end\\\":5000000,\\\"intensity\\\":60}]\"\n  }'\n```\n\n#### 3. Multiple Filters\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_filters \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"filter_infos\": \"[{\\\"filter_title\\\":\\\"复古\\\",\\\"start\\\":0,\\\"end\\\":5000000,\\\"intensity\\\":80},{\\\"filter_title\\\":\\\"电影感\\\",\\\"start\\\":3000000,\\\"end\\\":8000000,\\\"intensity\\\":100}]\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | draft_url is required | Missing draft URL parameter | Provide a valid draft URL |\n| 400 | filter_infos is required | Missing filter information parameter | Provide valid filter information JSON |\n| 400 | filter_infos format error | JSON format is incorrect | Check JSON string format |\n| 400 | Filter configuration validation failed | Filter parameters do not meet requirements | Check parameters for each filter |\n| 400 | filter_title is required | Filter title missing | Provide title for each filter |\n| 400 | start is required | Filter start time missing | Provide start time for each filter |\n| 400 | end is required | Filter end time missing | Provide end time for each filter |\n| 400 | Time range invalid | end must be greater than start | Ensure end time is greater than start time |\n| 400 | Intensity out of range | Intensity must be between 0-100 | Provide valid intensity value |\n| 404 | Draft does not exist | Specified draft URL invalid | Check if draft URL is correct |\n| 404 | Filter not found | Specified filter does not exist | Check if filter title is valid |\n| 500 | Filter addition failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **JSON Format**: filter_infos must be a valid JSON string\n2. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n3. **Filter Names**: Filter titles must match exactly with system filter names\n4. **Intensity Range**: Intensity must be between 0-100, default is 100\n5. **Time Overlap**: Multiple filters can be applied to the same time period\n6. **Filter Priority**: Filters are applied in the order they appear in the array\n7. **Performance**: Complex filters may affect video processing performance\n\n## Workflow\n\n1. Validate required parameters (draft_url, filter_infos)\n2. Parse filter_infos JSON string\n3. Validate parameter configuration for each filter\n4. Obtain and decrypt draft content\n5. Create filter track\n6. Add filter segments to track\n7. Save and encrypt draft\n8. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Videos](./add_videos.md)\n- [Add Images](./add_images.md)\n- [Add Effects](./add_effects.md)\n- [Save Draft](./save_draft.md)\n- [Generate Video](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n"
  },
  {
    "path": "docs/add_filters.zh.md",
    "content": "# ADD_FILTERS API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_filters.zh.md) | [English](./add_filters.md)\n\n## 接口信息\n\n```bash\nPOST /openapi/capcut-mate/v1/add_filters\n```\n\n## 功能描述\n\n向现有草稿中添加视频滤镜。该接口用于在指定的时间段内添加滤镜素材到剪映草稿中，支持多种滤镜类型如复古、黑白、电影感等。滤镜可以用于调整视频的色调和视觉风格。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"filter_infos\": \"[{\\\"filter_title\\\": \\\"复古\\\", \\\"start\\\": 0, \\\"end\\\": 5000000, \\\"intensity\\\": 80}, {\\\"filter_title\\\": \\\"黑白\\\", \\\"start\\\": 2000000, \\\"end\\\": 7000000}]\"\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| draft_url | string | ✅ | - | 目标草稿的完整URL |\n| filter_infos | string | ✅ | - | 滤镜信息列表的JSON字符串 |\n\n### 参数详解\n\n#### filter_infos 字段格式\n\n`filter_infos` 是一个JSON字符串，包含滤镜信息数组，每个滤镜对象包含以下字段：\n\n```json\n[\n    {\n        \"filter_title\": \"复古\",       // 滤镜名称/标题，必选参数\n        \"start\": 0,                   // 滤镜开始时间（微秒），必选参数\n        \"end\": 5000000,               // 滤镜结束时间（微秒），必选参数\n        \"intensity\": 80               // 滤镜强度(0-100)，可选参数，默认100\n    }\n]\n```\n\n**字段说明**:\n- `filter_title`: 滤镜名称，必须是系统中已存在的滤镜名称\n- `start`: 滤镜开始时间，单位为微秒，必须大于等于0\n- `end`: 滤镜结束时间，单位为微秒，必须大于start\n- `intensity`: 滤镜强度(0-100)，控制滤镜效果的强度，默认为100\n\n#### 时间参数\n\n- **start**: 滤镜在时间轴上的开始时间，单位为微秒（1秒 = 1,000,000微秒）\n- **end**: 滤镜在时间轴上的结束时间，单位为微秒\n- **duration**: 滤镜显示时长 = end - start\n\n#### 强度参数\n\n- **intensity**: 控制滤镜效果的强度\n  - 范围：0-100\n  - 默认值：100（完全强度）\n  - 较低的值会产生更柔和的滤镜效果\n  - 示例：`intensity: 50` 表示以50%的强度应用滤镜\n\n#### 滤镜名称说明\n\n- **filter_title**: 滤镜的名称\n  - 格式：字符串\n  - 示例：`\"复古\"`、`\"黑白\"`、`\"电影感\"`\n  - 获取方式：通过剪映滤镜库或相关API获取\n  - 常见滤镜名称：\n    - 复古风格：\"复古\", \"1980\", \"VHS III\"\n    - 黑白风格：\"黑白\", \"森山\"\n    - 电影风格：\"电影感\", \"好莱坞III\"\n    - 其他风格：\"City Walk\", \"Lofi II\"\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"track_id\": \"filter_track_123\",\n  \"filter_ids\": [\"filter_001\", \"filter_002\"],\n  \"segment_ids\": [\"seg_001\", \"seg_002\"]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| draft_url | string | 更新后的草稿URL |\n| track_id | string | 滤镜轨道ID |\n| filter_ids | array | 添加的滤镜ID列表 |\n| segment_ids | array | 创建的滤镜片段ID列表 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本滤镜添加\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_filters \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"filter_infos\": \"[{\\\"filter_title\\\": \\\"复古\\\", \\\"start\\\": 0, \\\"end\\\": 10000000}]\"\n  }'\n```\n\n#### 2. 自定义强度的滤镜\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_filters \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"filter_infos\": \"[{\\\"filter_title\\\": \\\"黑白\\\", \\\"start\\\": 0, \\\"end\\\": 5000000, \\\"intensity\\\": 60}]\"\n  }'\n```\n\n#### 3. 批量滤镜添加\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_filters \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"filter_infos\": \"[{\\\"filter_title\\\": \\\"复古\\\", \\\"start\\\": 0, \\\"end\\\": 5000000, \\\"intensity\\\": 80}, {\\\"filter_title\\\": \\\"电影感\\\", \\\"start\\\": 3000000, \\\"end\\\": 8000000, \\\"intensity\\\": 100}]\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | draft_url是必填项 | 缺少草稿URL参数 | 提供有效的draft_url |\n| 400 | filter_infos是必填项 | 缺少滤镜信息参数 | 提供有效的filter_infos |\n| 400 | 时间范围无效 | end必须大于start | 确保结束时间大于开始时间 |\n| 400 | 强度范围无效 | intensity必须在0-100之间 | 提供有效的强度值 |\n| 400 | 无效的滤镜信息，请检查filter_infos字段值是否正确 | 滤镜参数校验失败 | 检查滤镜参数是否符合要求 |\n| 404 | 草稿不存在 | 指定的草稿URL无效 | 检查草稿URL是否正确 |\n| 404 | 滤镜不存在 | 指定的滤镜名称无效 | 确认滤镜名称是否正确 |\n| 500 | 滤镜添加失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **时间单位**: 所有时间参数使用微秒（1秒 = 1,000,000微秒）\n2. **滤镜名称**: 确保使用有效的滤镜名称\n3. **时间范围**: end必须大于start\n4. **强度范围**: intensity必须在0-100之间，默认为100\n5. **轨道管理**: 系统自动创建滤镜轨道\n6. **性能考虑**: 避免同时添加大量滤镜\n\n## 工作流程\n\n1. 验证必填参数（draft_url, filter_infos）\n2. 检查时间范围的有效性\n3. 从缓存中获取草稿\n4. 创建滤镜轨道（如果不存在）\n5. 解析滤镜信息并创建滤镜片段\n6. 添加片段到轨道\n7. 保存草稿\n8. 返回滤镜信息\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加视频](./add_videos.md)\n- [添加音频](./add_audios.md)\n- [添加图片](./add_images.md)\n- [添加特效](./add_effects.md)\n- [保存草稿](./save_draft.md)\n- [生成视频](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n"
  },
  {
    "path": "docs/add_images.md",
    "content": "# ADD_IMAGES API Documentation\n\n## 🌐 Language Switch\n[中文版](./add_images.zh.md) | [English](./add_images.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/add_images\n```\n\n## Function Description\n\nAdd images to existing drafts. This interface is used to add image materials to Jianying drafts within specified time periods, supporting transparency, scaling and position adjustments for images. Images can be used to enhance video visual effects, such as background images, watermarks, decorative images, etc.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"image_infos\": \"[{\\\"image_url\\\":\\\"https://assets.jcaigc.cn/image1.jpg\\\",\\\"width\\\":1920,\\\"height\\\":1080,\\\"start\\\":0,\\\"end\\\":5000000}]\",\n  \"alpha\": 1.0,\n  \"scale_x\": 1.0,\n  \"scale_y\": 1.0,\n  \"transform_x\": 0,\n  \"transform_y\": 0\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| draft_url | string | ✅ | - | Complete URL of the target draft |\n| image_infos | string | ✅ | - | JSON string of image information array |\n| alpha | number | ❌ | 1.0 | Image transparency, recommended range [0.0, 1.0] |\n| scale_x | number | ❌ | 1.0 | Image X-axis scaling ratio |\n| scale_y | number | ❌ | 1.0 | Image Y-axis scaling ratio |\n| transform_x | number | ❌ | 0 | X-axis position offset (pixels) |\n| transform_y | number | ❌ | 0 | Y-axis position offset (pixels) |\n\n### image_infos Array Structure\n\n| Field | Type | Required | Default | Description |\n|-------|------|----------|---------|-------------|\n| image_url | string | ✅ | - | URL address of the image file |\n| width | number | ✅ | - | Image width (pixels) |\n| height | number | ✅ | - | Image height (pixels) |\n| start | number | ✅ | - | Image start display time (microseconds) |\n| end | number | ✅ | - | Image end display time (microseconds) |\n\n### Parameter Details\n\n#### Time Parameters\n\n- **start**: Start time of the image on the timeline, unit microseconds (1 second = 1,000,000 microseconds)\n- **end**: End time of the image on the timeline, unit microseconds\n- **duration**: Image display duration = end - start\n\n#### Transparency Parameters\n\n- **alpha**: Image transparency\n  - 1.0 = Fully opaque\n  - 0.5 = Semi-transparent\n  - 0.0 = Fully transparent\n  - Recommended range: 0.0 - 1.0\n\n#### Scaling Parameters\n\n- **scale_x**: Image scaling ratio in X-axis direction\n  - 1.0 = Original size\n  - 0.5 = Shrink to half\n  - 2.0 = Enlarge to double\n\n- **scale_y**: Image scaling ratio in Y-axis direction\n  - 1.0 = Original size\n  - 0.5 = Shrink to half\n  - 2.0 = Enlarge to double\n\n#### Position Parameters\n\n- **transform_x**: Image position offset in X-axis direction, unit pixels\n  - Positive value moves right\n  - Negative value moves left\n  - Canvas center as origin\n  - Actually stored as half-canvas-width units (assuming canvas width 1920, divided by 960)\n\n- **transform_y**: Image position offset in Y-axis direction, unit pixels\n  - Positive value moves down\n  - Negative value moves up\n  - Canvas center as origin\n  - Actually stored as half-canvas-height units (assuming canvas height 1080, divided by 540)\n\n#### Image Information Description\n\n- **image_url**: URL address of the image\n  - Format: Valid image URL\n  - Example: `\"https://assets.jcaigc.cn/image1.jpg\"`\n  - Supported formats: JPG, PNG and other common image formats\n\n- **width/height**: Original size of the image\n  - Used to calculate conversion ratio for position offset\n  - Unit: pixels\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"track_id\": \"video-track-uuid\",\n  \"image_ids\": [\"image1-uuid\", \"image2-uuid\"],\n  \"segment_ids\": [\"segment1-uuid\", \"segment2-uuid\"],\n  \"segment_infos\": [\n    {\n      \"id\": \"segment1-uuid\",\n      \"start\": 0,\n      \"end\": 5000000\n    }\n  ]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| draft_url | string | Updated draft URL |\n| track_id | string | Video track ID |\n| image_ids | array | List of image IDs |\n| segment_ids | array | List of segment IDs |\n| segment_infos | array | List of segment information, containing ID, start time and end time for each segment |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Image Addition\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_images \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"image_infos\": \"[{\\\"image_url\\\":\\\"https://assets.jcaigc.cn/photo1.jpg\\\",\\\"width\\\":1920,\\\"height\\\":1080,\\\"start\\\":0,\\\"end\\\":5000000}]\"\n  }'\n```\n\n#### 2. Image with Transparency\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_images \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"image_infos\": \"[{\\\"image_url\\\":\\\"https://assets.jcaigc.cn/logo.png\\\",\\\"width\\\":800,\\\"height\\\":600,\\\"start\\\":1000000,\\\"end\\\":6000000}]\",\n    \"alpha\": 0.8\n  }'\n```\n\n#### 3. Image with Scaling and Position Offset\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_images \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"image_infos\": \"[{\\\"image_url\\\":\\\"https://assets.jcaigc.cn/watermark.png\\\",\\\"width\\\":300,\\\"height\\\":100,\\\"start\\\":2000000,\\\"end\\\":7000000}]\",\n    \"scale_x\": 0.5,\n    \"scale_y\": 0.5,\n    \"transform_x\": 700,\n    \"transform_y\": -400\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | draft_url is required | Missing draft URL parameter | Provide a valid draft_url |\n| 400 | image_infos is required | Missing image information parameter | Provide valid image_infos |\n| 400 | image_url is required | Image URL missing | Provide URL for each image |\n| 400 | Image dimensions invalid | width or height invalid | Provide positive width and height |\n| 400 | Time range invalid | end must be greater than start | Ensure end time is greater than start time |\n| 400 | Transparency invalid | alpha exceeds recommended range | Use transparency value within 0.0-1.0 range |\n| 404 | Draft does not exist | Specified draft URL invalid | Check if draft URL is correct |\n| 404 | Image does not exist | Specified image URL invalid | Confirm if image URL is correct |\n| 500 | Image addition failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n2. **Image URL**: Ensure using valid image URL\n3. **Time Range**: end must be greater than start\n4. **Transparency Range**: alpha recommended within 0.0-1.0 range\n5. **Position Parameters**: transform_x and transform_y unit is pixels, but internally converted to half-canvas units for storage\n   - transform_x conversion formula: actual value / 960 (assuming canvas width 1920)\n   - transform_y conversion formula: actual value / 540 (assuming canvas height 1080)\n6. **Track Management**: System automatically creates video track\n7. **Performance Consideration**: Avoid adding large number of images simultaneously\n\n## Workflow\n\n1. Validate required parameters (draft_url, image_infos)\n2. Check validity of time ranges\n3. Get draft from cache\n4. Create video track (images as VideoSegment)\n5. Create image adjustment settings\n6. Create image segments\n7. Add segments to track\n8. Save draft\n9. Return image information\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Videos](./add_videos.md)\n- [Add Audios](./add_audios.md)\n- [Add Stickers](./add_sticker.md)\n- [Save Draft](./save_draft.md)\n- [Generate Video](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_images.zh.md",
    "content": "# ADD_IMAGES API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_images.zh.md) | [English](./add_images.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/add_images\n```\n\n## 功能描述\n\n向现有草稿中添加图片。该接口用于在指定的时间段内添加图片素材到剪映草稿中，支持图片的透明度、缩放和位置调整。图片可以用于增强视频的视觉效果，如背景图、水印、装饰图等。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"image_infos\": \"[{\\\"image_url\\\":\\\"https://assets.jcaigc.cn/image1.jpg\\\",\\\"width\\\":1920,\\\"height\\\":1080,\\\"start\\\":0,\\\"end\\\":5000000}]\",\n  \"alpha\": 1.0,\n  \"scale_x\": 1.0,\n  \"scale_y\": 1.0,\n  \"transform_x\": 0,\n  \"transform_y\": 0\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| draft_url | string | ✅ | - | 目标草稿的完整URL |\n| image_infos | string | ✅ | - | 图片信息数组的JSON字符串 |\n| alpha | number | ❌ | 1.0 | 图片透明度，建议范围[0.0, 1.0] |\n| scale_x | number | ❌ | 1.0 | 图片X轴缩放比例 |\n| scale_y | number | ❌ | 1.0 | 图片Y轴缩放比例 |\n| transform_x | number | ❌ | 0 | X轴位置偏移（像素） |\n| transform_y | number | ❌ | 0 | Y轴位置偏移（像素） |\n\n### image_infos 数组结构\n\n| 字段名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| image_url | string | ✅ | - | 图片文件的URL地址 |\n| width | number | ✅ | - | 图片宽度(像素) |\n| height | number | ✅ | - | 图片高度(像素) |\n| start | number | ✅ | - | 图片开始显示时间(微秒) |\n| end | number | ✅ | - | 图片结束显示时间(微秒) |\n\n### 参数详解\n\n#### 时间参数\n\n- **start**: 图片在时间轴上的开始时间，单位为微秒（1秒 = 1,000,000微秒）\n- **end**: 图片在时间轴上的结束时间，单位为微秒\n- **duration**: 图片显示时长 = end - start\n\n#### 透明度参数\n\n- **alpha**: 图片的透明度\n  - 1.0 = 完全不透明\n  - 0.5 = 半透明\n  - 0.0 = 完全透明\n  - 建议范围：0.0 - 1.0\n\n#### 缩放参数\n\n- **scale_x**: 图片在X轴方向的缩放比例\n  - 1.0 = 原始大小\n  - 0.5 = 缩小到一半\n  - 2.0 = 放大到两倍\n\n- **scale_y**: 图片在Y轴方向的缩放比例\n  - 1.0 = 原始大小\n  - 0.5 = 缩小到一半\n  - 2.0 = 放大到两倍\n\n#### 位置参数\n\n- **transform_x**: 图片在X轴方向的位置偏移，单位为像素\n  - 正值向右移动\n  - 负值向左移动\n  - 以画布中心为原点\n  - 实际存储时会转换为半画布宽单位（假设画布宽度1920，即除以960）\n\n- **transform_y**: 图片在Y轴方向的位置偏移，单位为像素\n  - 正值向下移动\n  - 负值向上移动\n  - 以画布中心为原点\n  - 实际存储时会转换为半画布高单位（假设画布高度1080，即除以540）\n\n#### 图片信息说明\n\n- **image_url**: 图片的URL地址\n  - 格式：有效的图片URL\n  - 示例：`\"https://assets.jcaigc.cn/image1.jpg\"`\n  - 支持格式：JPG、PNG等常见图片格式\n\n- **width/height**: 图片的原始尺寸\n  - 用于计算位置偏移的转换比例\n  - 单位：像素\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"track_id\": \"video-track-uuid\",\n  \"image_ids\": [\"image1-uuid\", \"image2-uuid\"],\n  \"segment_ids\": [\"segment1-uuid\", \"segment2-uuid\"],\n  \"segment_infos\": [\n    {\n      \"id\": \"segment1-uuid\",\n      \"start\": 0,\n      \"end\": 5000000\n    }\n  ]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| draft_url | string | 更新后的草稿URL |\n| track_id | string | 视频轨道ID |\n| image_ids | array | 图片ID列表 |\n| segment_ids | array | 片段ID列表 |\n| segment_infos | array | 片段信息列表，包含每个片段的ID、开始时间和结束时间 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本图片添加\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_images \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"image_infos\": \"[{\\\"image_url\\\":\\\"https://assets.jcaigc.cn/photo1.jpg\\\",\\\"width\\\":1920,\\\"height\\\":1080,\\\"start\\\":0,\\\"end\\\":5000000}]\"\n  }'\n```\n\n#### 2. 带透明度的图片\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_images \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"image_infos\": \"[{\\\"image_url\\\":\\\"https://assets.jcaigc.cn/logo.png\\\",\\\"width\\\":800,\\\"height\\\":600,\\\"start\\\":1000000,\\\"end\\\":6000000}]\",\n    \"alpha\": 0.8\n  }'\n```\n\n#### 3. 带缩放和位置偏移的图片\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_images \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"image_infos\": \"[{\\\"image_url\\\":\\\"https://assets.jcaigc.cn/watermark.png\\\",\\\"width\\\":300,\\\"height\\\":100,\\\"start\\\":2000000,\\\"end\\\":7000000}]\",\n    \"scale_x\": 0.5,\n    \"scale_y\": 0.5,\n    \"transform_x\": 700,\n    \"transform_y\": -400\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | draft_url是必填项 | 缺少草稿URL参数 | 提供有效的draft_url |\n| 400 | image_infos是必填项 | 缺少图片信息参数 | 提供有效的image_infos |\n| 400 | image_url是必填项 | 图片URL缺失 | 为每个图片提供URL |\n| 400 | 图片尺寸无效 | width或height无效 | 提供正数的宽度和高度 |\n| 400 | 时间范围无效 | end必须大于start | 确保结束时间大于开始时间 |\n| 400 | 透明度无效 | alpha超出建议范围 | 使用0.0-1.0范围内的透明度值 |\n| 404 | 草稿不存在 | 指定的草稿URL无效 | 检查草稿URL是否正确 |\n| 404 | 图片不存在 | 指定的图片URL无效 | 确认图片URL是否正确 |\n| 500 | 图片添加失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **时间单位**: 所有时间参数使用微秒（1秒 = 1,000,000微秒）\n2. **图片URL**: 确保使用有效的图片URL\n3. **时间范围**: end必须大于start\n4. **透明度范围**: alpha建议在0.0-1.0范围内\n5. **位置参数**: transform_x和transform_y单位为像素，但内部会转换为半画布单位存储\n   - transform_x转换公式：实际值 / 960（假设画布宽度1920）\n   - transform_y转换公式：实际值 / 540（假设画布高度1080）\n6. **轨道管理**: 系统自动创建视频轨道\n7. **性能考虑**: 避免同时添加大量图片\n\n## 工作流程\n\n1. 验证必填参数（draft_url, image_infos）\n2. 检查时间范围的有效性\n3. 从缓存中获取草稿\n4. 创建视频轨道（图片作为VideoSegment）\n5. 创建图像调节设置\n6. 创建图片片段\n7. 添加片段到轨道\n8. 保存草稿\n9. 返回图片信息\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加视频](./add_videos.md)\n- [添加音频](./add_audios.md)\n- [添加贴纸](./add_sticker.md)\n- [保存草稿](./save_draft.md)\n- [生成视频](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./add_images.zh.md) | [English](./add_images.md)"
  },
  {
    "path": "docs/add_keyframes.md",
    "content": "# ADD_KEYFRAMES API Documentation\n\n## 🌐 Language Switch\n[中文版](./add_keyframes.zh.md) | [English](./add_keyframes.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/add_keyframes\n```\n\n## Function Description\n\nAdd keyframe animations to existing drafts. This interface is used to create property animations for position, scale, rotation, and other properties in Jianying drafts. Keyframes allow precise control over how properties change over time.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"keyframes\": \"[{\\\"property\\\":\\\"position.x\\\",\\\"time\\\":0,\\\"value\\\":0},{\\\"property\\\":\\\"position.x\\\",\\\"time\\\":1000000,\\\"value\\\":100}]\"\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| draft_url | string |✅ | - | Complete URL of the target draft |\n| keyframes | string |✅ | - | JSON string of keyframe information |\n\n### Parameter Details\n\n#### keyframes Array Structure\n\n`keyframes` is a JSON string containing an array of keyframe objects, each with the following fields:\n\n```json\n[\n  {\n    \"property\": \"position.x\",  // Property name, required\n    \"time\": 0,                 // Keyframe time (microseconds), required\n    \"value\": 0                 // Property value, required\n  }\n]\n```\n\n**Supported Properties**:\n- `position.x` - Horizontal position\n- `position.y` - Vertical position\n- `scale.x` - Horizontal scale\n- `scale.y` - Vertical scale\n- `rotation.z` - Rotation angle\n- `opacity` - Transparency\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"keyframes_added\": 5,\n  \"affected_segments\": [\"segment1-uuid\", \"segment2-uuid\"]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| draft_url | string | Updated draft URL |\n| keyframes_added | integer | Number of keyframes added |\n| affected_segments | array | List of affected segment IDs |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Position Animation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_keyframes \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"keyframes\": \"[{\\\"property\\\":\\\"position.x\\\",\\\"time\\\":0,\\\"value\\\":0},{\\\"property\\\":\\\"position.x\\\",\\\"time\\\":1000000,\\\"value\\\":100}]\"\n  }'\n```\n\n#### 2. Scale Animation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_keyframes \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"keyframes\": \"[{\\\"property\\\":\\\"scale.x\\\",\\\"time\\\":0,\\\"value\\\":1.0},{\\\"property\\\":\\\"scale.x\\\",\\\"time\\\":2000000,\\\"value\\\":1.5}]\"\n  }'\n```\n\n#### 3. Rotation Animation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_keyframes \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"keyframes\": \"[{\\\"property\\\":\\\"rotation.z\\\",\\\"time\\\":0,\\\"value\\\":0},{\\\"property\\\":\\\"rotation.z\\\",\\\"time\\\":3000000,\\\"value\\\":360}]\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | draft_url is required | Missing draft URL parameter | Provide a valid draft URL |\n| 400 | keyframes is required | Missing keyframe information | Provide valid keyframe JSON |\n| 400 | keyframes format error | JSON format is incorrect | Check JSON string format |\n| 400 | Invalid property name | Unsupported property | Use supported property names |\n| 400 | Time value invalid | Time must be non-negative | Use valid time values |\n| 404 | Draft does not exist | Specified draft URL invalid | Check if draft URL is correct |\n| 500 | Keyframe processing failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **JSON Format**: keyframes must be a valid JSON string\n2. **Time Unit**: Time values use microseconds (1 second = 1,000,000 microseconds)\n3. **Property Names**: Must use exact property names as specified\n4. **Value Ranges**: Different properties have different valid value ranges\n5. **Interpolation**: Keyframes are automatically interpolated between key times\n\n## Workflow\n\n1. Validate required parameters (draft_url, keyframes)\n2. Parse keyframes JSON string\n3. Validate property names and values\n4. Obtain and decrypt draft content\n5. Apply keyframe animations to segments\n6. Save and encrypt draft\n7. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Videos](./add_videos.md)\n- [Add Images](./add_images.md)\n- [Save Draft](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_keyframes.zh.md",
    "content": "# ADD_KEYFRAMES API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n``` \nPOST /openapi/capcut-mate/v1/add_keyframes\n```\n\n## 功能描述\n\n向现有草稿中添加关键帧。该接口用于在指定的片段上添加关键帧动画，支持多种属性类型的关键帧设置，如位置、缩放、旋转、透明度等。关键帧可以用于创建复杂的动画效果，增强视频的视觉表现力。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"keyframes\": \"[{\\\"segment_id\\\":\\\"d62994b4-25fe-422a-a123-87ef05038558\\\",\\\"property\\\":\\\"KFTypePositionX\\\",\\\"offset\\\":5000000,\\\"value\\\":-0.1}]\"\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| draft_url | string | ✅ | - | 目标草稿的完整URL |\n| keyframes | string | ✅ | - | 关键帧信息列表的JSON字符串 |\n\n### keyframes 参数详解\n\n#### 基本结构\nkeyframes 是一个JSON字符串，包含关键帧数组，每个关键帧对象包含以下字段：\n\n| 字段名 | 类型 | 必填 | 说明 |\n|--------|------|------|------|\n| segment_id | string | ✅ | 目标片段的唯一标识ID |\n| property | string | ✅ | 动画属性类型，支持的类型见下表 |\n| offset | number | ✅ | 关键帧在片段中的时间偏移（微秒绝对时间） |\n| value | number | ✅ | 属性在该时间点的值 |\n\n#### offset 参数说明\n\noffset 参数只支持微秒绝对时间格式：\n- 以微秒为单位的整数，如 5000000 表示片段开始后5秒的位置\n- 系统会自动将微秒值转换为相对时间比例\n\n#### 支持的动画属性类型\n\n| 属性类型 | 描述 | 值范围 | 示例 |\n|---------|------|--------|------|\n| KFTypePositionX | X轴位置 | -1.0 到 1.0 | 0.0 (居中), -0.5 (左移), 0.5 (右移) |\n| KFTypePositionY | Y轴位置 | -1.0 到 1.0 | 0.0 (居中), -0.5 (上移), 0.5 (下移) |\n| KFTypeScaleX | X轴缩放 | 0.1 到 10.0 | 1.0 (原始), 0.5 (缩小), 2.0 (放大) |\n| KFTypeScaleY | Y轴缩放 | 0.1 到 10.0 | 1.0 (原始), 0.5 (缩小), 2.0 (放大) |\n| KFTypeRotation | 旋转角度 | -360 到 360 | 0 (无旋转), 90 (顺时针90度) |\n| KFTypeAlpha | 透明度 | 0.0 到 1.0 | 1.0 (不透明), 0.5 (半透明), 0.0 (透明) |\n| UNIFORM_SCALE | 统一缩放 | 0.1 到 10.0 | 1.0 (原始), 0.5 (缩小), 2.0 (放大) |\n| KFTypeSaturation | 饱和度 | -1.0 到 1.0 | 0.0 (原始), -0.5 (降低), 0.5 (增强) |\n| KFTypeContrast | 对比度 | -1.0 到 1.0 | 0.0 (原始), -0.5 (降低), 0.5 (增强) |\n| KFTypeBrightness | 亮度 | -1.0 到 1.0 | 0.0 (原始), -0.5 (变暗), 0.5 (变亮) |\n| KFTypeVolume | 音量 | 0.0 到 2.0 | 1.0 (原始), 0.5 (降低), 2.0 (增强) |\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"keyframes_added\": 3,\n  \"affected_segments\": [\"segment_001\", \"segment_002\"]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| draft_url | string | 更新后的草稿URL |\n| keyframes_added | integer | 添加的关键帧数量 |\n| affected_segments | array | 受影响的片段ID列表 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本关键帧添加（使用微秒时间）\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_keyframes \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"keyframes\": \"[{\\\"segment_id\\\":\\\"segment-id\\\",\\\"property\\\":\\\"UNIFORM_SCALE\\\",\\\"offset\\\":0,\\\"value\\\":1},{\\\"segment_id\\\":\\\"segment-id\\\",\\\"property\\\":\\\"UNIFORM_SCALE\\\",\\\"offset\\\":5000000,\\\"value\\\":1.3}]\"\n  }'\n```\n\n#### 2. 多属性关键帧\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_keyframes \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"keyframes\": \"[{\\\"segment_id\\\":\\\"segment-uuid\\\",\\\"property\\\":\\\"KFTypePositionX\\\",\\\"offset\\\":0,\\\"value\\\":0},{\\\"segment_id\\\":\\\"segment-uuid\\\",\\\"property\\\":\\\"KFTypePositionY\\\",\\\"offset\\\":0,\\\"value\\\":0},{\\\"segment_id\\\":\\\"segment-uuid\\\",\\\"property\\\":\\\"KFTypeRotation\\\",\\\"offset\\\":2500000,\\\"value\\\":90},{\\\"segment_id\\\":\\\"segment-uuid\\\",\\\"property\\\":\\\"KFTypeAlpha\\\",\\\"offset\\\":5000000,\\\"value\\\":0}]\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | draft_url是必填项 | 缺少草稿URL参数 | 提供有效的draft_url |\n| 400 | keyframes是必填项 | 缺少关键帧参数 | 提供有效的keyframes数据 |\n| 400 | 无效的关键帧信息，请检查keyframes字段值是否正确 | 关键帧数据格式错误 | 检查关键帧数据格式是否符合要求 |\n| 404 | 草稿不存在 | 指定的草稿URL无效 | 检查草稿URL是否正确 |\n| 404 | 片段未找到 | 指定的segment_id在草稿中不存在 | 确认片段ID是否正确 |\n| 400 | 无效的片段类型 | 该片段不支持关键帧功能 | 确保为目标片段是视觉片段（视频、图片、贴纸、文本） |\n| 400 | 无效的关键帧属性类型 | 指定的property类型不受支持 | 检查属性类型是否在支持列表中 |\n| 500 | 关键帧添加失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **片段ID验证**: segment_id 必须是草稿中存在的有效片段ID\n2. **片段类型限制**: 只有视觉片段（视频、图片、贴纸、文本）支持关键帧\n3. **时间偏移范围**: offset 值必须是非负整数（微秒）\n4. **属性值范围**: 不同的属性类型有不同的值范围限制\n5. **重复关键帧**: 相同片段相同属性的关键帧会被累加，不会覆盖\n6. **性能考虑**: 单次请求建议不超过100个关键帧\n7. **缩放属性**: 设置KFTypeScaleX或KFTypeScaleY会自动取消锁定XY轴缩放比例\n\n## 工作流程\n\n1. 验证必填参数（draft_url, keyframes）\n2. 解析关键帧数据JSON字符串\n3. 从缓存中获取草稿\n4. 验证每个关键帧数据的有效性\n5. 查找目标片段并验证片段类型\n6. 为每个关键帧创建关键帧列表并添加到片段\n7. 保存草稿\n8. 返回添加结果信息\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加视频](./add_videos.md)\n- [添加音频](./add_audios.md)\n- [添加图片](./add_images.md)\n- [保存草稿](./save_draft.md)\n- [生成视频](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_masks.md",
    "content": "# ADD_MASKS API Documentation\n\n## 🌐 Language Switch\n[中文版](./add_masks.zh.md) | [English](./add_masks.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/add_masks\n```\n\n## Function Description\n\nAdd mask effects to existing drafts. This interface is used to add various shape masks to control visible areas of the screen in Jianying drafts. Masks can be used to create interesting visual effects and focus attention on specific areas.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"segment_ids\": [\"segment1-uuid\", \"segment2-uuid\"],\n  \"name\": \"Circle Mask\",\n  \"X\": 0.5,\n  \"Y\": 0.5,\n  \"width\": 0.3,\n  \"height\": 0.3,\n  \"feather\": 0.1,\n  \"rotation\": 0,\n  \"invert\": false,\n  \"roundCorner\": 0.2\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| draft_url | string |✅ | - | Complete URL of the target draft |\n| segment_ids | array |✅ | - | List of segment IDs to apply masks |\n| name | string |✅ | - | Mask name/type |\n| X | number |✅ | - | Horizontal position (0.0-1.0) |\n| Y | number |✅ | - | Vertical position (0.0-1.0) |\n| width | number |✅ | - | Mask width (0.0-1.0) |\n| height | number |✅ | - | Mask height (0.0-1.0) |\n| feather | number |❌ | 0.0 | Feather edge softness |\n| rotation | number | ❌ | 0 | Rotation angle (degrees) |\n| invert | boolean | ❌ | false | Invert mask effect |\n| roundCorner | number | ❌ | 0.0 | Rounded corner radius |\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"masks_added\": 2,\n  \"affected_segments\": [\"segment1-uuid\", \"segment2-uuid\"],\n  \"mask_ids\": [\"mask1-uuid\", \"mask2-uuid\"]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| draft_url | string | Updated draft URL |\n| masks_added | integer | Number of masks added |\n| affected_segments | array | List of affected segment IDs |\n| mask_ids | array | List of added mask IDs |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Circle Mask\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_masks \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"segment_ids\": [\"segment1-uuid\"],\n    \"name\": \"Circle Mask\",\n    \"X\": 0.5,\n    \"Y\": 0.5,\n    \"width\": 0.4,\n    \"height\": 0.4\n  }'\n```\n\n#### 2. Rectangle Mask with Effects\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_masks \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"segment_ids\": [\"segment1-uuid\", \"segment2-uuid\"],\n    \"name\": \"Rectangle Mask\",\n    \"X\": 0.3,\n    \"Y\": 0.4,\n    \"width\": 0.5,\n    \"height\": 0.3,\n    \"feather\": 0.1,\n    \"roundCorner\": 0.1\n  }'\n```\n\n#### 3. Inverted Mask\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_masks \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"segment_ids\": [\"segment1-uuid\"],\n    \"name\": \"Heart Mask\",\n    \"X\": 0.5,\n    \"Y\": 0.5,\n    \"width\": 0.3,\n    \"height\": 0.3,\n    \"invert\": true\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | draft_url is required | Missing draft URL parameter | Provide a valid draft URL |\n| 400 | segment_ids is required | Missing segment IDs | Provide valid segment ID list |\n| 400 | name is required | Missing mask name | Provide mask name |\n| 400 | Position values invalid | X/Y must be between 0.0-1.0 | Use valid position values |\n| 400 | Size values invalid | width/height must be between 0.0-1.0 | Use valid size values |\n| 404 | Draft does not exist | Specified draft URL invalid | Check if draft URL is correct |\n| 404 | Segment not found | Specified segment ID does not exist | Check segment IDs |\n| 500 | Mask processing failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Coordinate System**: Position values use normalized coordinates (0.0-1.0)\n2. **Size Values**: Width and height are relative to screen size\n3. **Mask Types**: Support various mask shapes (circle, rectangle, heart, etc.)\n4. **Feather Effect**: Softens mask edges for natural transitions\n5. **Rotation**: Rotation angle in degrees\n6. **Invert**: When true, shows area outside the mask\n\n## Workflow\n\n1. Validate required parameters\n2. Check segment existence\n3. Create mask with specified parameters\n4. Apply mask to segments\n5. Save and encrypt draft\n6. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Videos](./add_videos.md)\n- [Add Images](./add_images.md)\n- [Save Draft](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_masks.zh.md",
    "content": "# ADD_MASKS API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/add_masks\n```\n\n## 功能描述\n\n向现有草稿中的指定片段添加遮罩效果。遮罩是视频编辑中的重要功能，通过遮罩可以控制图像的可见区域，创造出各种视觉效果。支持多种遮罩类型（线性、镜面、圆形、矩形、爱心、星形），每种遮罩都可以精确配置位置、大小、羽化、旋转等属性。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"segment_ids\": [\"d62994b4-25fe-422a-a123-87ef05038558\"],\n  \"name\": \"圆形\",\n  \"X\": 100,\n  \"Y\": 200,\n  \"width\": 300,\n  \"height\": 300,\n  \"feather\": 20,\n  \"rotation\": 0,\n  \"invert\": false,\n  \"roundCorner\": 0\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| draft_url | string | ✅ | \"\" | 目标草稿的完整URL |\n| segment_ids | array | ✅ | [] | 要应用遮罩的片段ID数组 |\n| name | string | ❌ | \"线性\" | 遮罩类型名称 |\n| X | integer | ❌ | 0 | 遮罩中心X坐标（像素） |\n| Y | integer | ❌ | 0 | 遮罩中心Y坐标（像素） |\n| width | integer | ❌ | 512 | 遮罩宽度（像素） |\n| height | integer | ❌ | 512 | 遮罩高度（像素） |\n| feather | integer | ❌ | 0 | 羽化程度（0-100） |\n| rotation | integer | ❌ | 0 | 旋转角度（度） |\n| invert | boolean | ❌ | false | 是否反转遮罩 |\n| roundCorner | integer | ❌ | 0 | 圆角半径（0-100） |\n\n### 参数详解\n\n#### 遮罩类型参数\n\n- **name**: 遮罩类型名称\n  - 可选值：线性、镜面、圆形、矩形、爱心、星形\n  - 默认值：线性\n\n#### 位置参数\n\n- **X**: 遮罩中心X坐标（像素）\n  - 正值向右移动\n  - 负值向左移动\n  - 以素材中心为原点\n\n- **Y**: 遮罩中心Y坐标（像素）\n  - 正值向下移动\n  - 负值向上移动\n  - 以素材中心为原点\n\n#### 尺寸参数\n\n- **width**: 遮罩宽度（像素）\n  - 默认值：512\n  - 建议范围：1-2048\n\n- **height**: 遮罩高度（像素）\n  - 默认值：512\n  - 建议范围：1-2048\n\n#### 效果参数\n\n- **feather**: 羽化程度（0-100）\n  - 0 = 无羽化（锐利边缘）\n  - 100 = 最大羽化（柔和边缘）\n  - 默认值：0\n\n- **rotation**: 旋转角度（度）\n  - 0-360度范围\n  - 默认值：0\n\n- **invert**: 是否反转遮罩\n  - true = 反转遮罩效果\n  - false = 正常遮罩效果\n  - 默认值：false\n\n- **roundCorner**: 圆角半径（0-100）\n  - 仅对矩形遮罩有效\n  - 0 = 无圆角（直角）\n  - 100 = 最大圆角\n  - 默认值：0\n\n#### 片段ID参数\n\n- **segment_ids**: 要应用遮罩的片段ID数组\n  - 必须是视频片段ID\n  - 支持批量处理多个片段\n  - 每个片段只能添加一个遮罩\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"masks_added\": 1,\n  \"affected_segments\": [\"d62994b4-25fe-422a-a123-87ef05038558\"],\n  \"mask_ids\": [\"mask_001\"]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| draft_url | string | 更新后的草稿URL |\n| masks_added | number | 成功添加的遮罩数量 |\n| affected_segments | array | 受影响的片段ID列表 |\n| mask_ids | array | 遮罩ID列表 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本遮罩添加\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_masks \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"segment_ids\": [\"SEGMENT_ID\"],\n    \"name\": \"圆形\"\n  }'\n```\n\n#### 2. 带位置和尺寸的遮罩\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_masks \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"segment_ids\": [\"SEGMENT_ID\"],\n    \"name\": \"矩形\",\n    \"X\": 100,\n    \"Y\": 50,\n    \"width\": 400,\n    \"height\": 300\n  }'\n```\n\n#### 3. 带效果参数的遮罩\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_masks \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"segment_ids\": [\"SEGMENT_ID\"],\n    \"name\": \"线性\",\n    \"feather\": 30,\n    \"rotation\": 45,\n    \"invert\": true\n  }'\n```\n\n#### 4. 矩形遮罩带圆角\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_masks \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"segment_ids\": [\"SEGMENT_ID\"],\n    \"name\": \"矩形\",\n    \"roundCorner\": 50\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | draft_url是必填项 | 缺少草稿URL参数 | 提供有效的draft_url |\n| 400 | segment_ids是必填项 | 缺少片段ID参数 | 提供有效的segment_ids数组 |\n| 400 | 无效的遮罩信息，请检查遮罩参数是否正确 | 遮罩参数校验失败 | 检查遮罩参数是否符合要求 |\n| 400 | 羽化程度无效 | feather超出范围 | 使用0-100范围内的羽化值 |\n| 400 | 旋转角度无效 | rotation超出范围 | 使用0-360范围内的角度值 |\n| 400 | 圆角半径无效 | roundCorner超出范围 | 使用0-100范围内的圆角值 |\n| 404 | 草稿不存在 | 指定的草稿URL无效 | 检查草稿URL是否正确 |\n| 404 | 片段未找到 | 指定的片段ID不存在 | 确认片段ID是否正确 |\n| 400 | 无效的片段类型 | 片段类型不支持添加遮罩 | 确保使用视频片段ID |\n| 404 | 遮罩类型未找到 | 指定的遮罩名称不存在 | 使用有效的遮罩类型名称 |\n| 500 | 遮罩添加失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **片段要求**: 只有视频片段（VideoSegment）支持添加遮罩\n2. **遮罩限制**: 每个片段只能添加一个遮罩，重复添加不会报错，会返回现有遮罩信息\n3. **坐标系统**: X、Y坐标以像素为单位，原点位于素材中心\n4. **参数范围**: \n   - feather: 0-100，羽化程度\n   - rotation: 0-360度，旋转角度\n   - roundCorner: 0-100，圆角半径（仅矩形遮罩有效）\n5. **批量处理**: 支持同时为多个片段添加相同配置的遮罩\n6. **遮罩类型**: 支持线性、镜面、圆形、矩形、爱心、星形六种遮罩类型\n7. **性能考虑**: 避免同时添加大量遮罩\n\n## 工作流程\n\n1. 验证必填参数（draft_url, segment_ids）\n2. 检查片段ID的有效性\n3. 从缓存中获取草稿\n4. 查找并验证遮罩类型\n5. 为每个片段添加遮罩\n6. 保存草稿\n7. 返回遮罩信息\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加视频](./add_videos.md)\n- [添加音频](./add_audios.md)\n- [添加图片](./add_images.md)\n- [保存草稿](./save_draft.md)\n- [生成视频](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_sticker.md",
    "content": "# ADD_STICKER API Documentation\n\n## 🌐 Language Switch\n[中文版](./add_sticker.zh.md) | [English](./add_sticker.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/add_sticker\n```\n\n## Function Description\n\nAdd stickers to existing drafts. This interface is used to add sticker materials to Jianying drafts within specified time periods, supporting sticker scaling and position adjustments. Stickers can be used to enhance the visual effects of videos, such as expressions, decorations, text, etc.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"sticker_id\": \"7326810673609018675\",\n  \"start\": 0,\n  \"end\": 5000000,\n  \"scale\": 1.0,\n  \"transform_x\": 0,\n  \"transform_y\": 0\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| draft_url | string |✅ | - | Complete URL of the target draft |\n| sticker_id | string |✅ | - | Unique ID of the sticker |\n| start | number |✅ | - | Sticker start time (microseconds) |\n| end | number | ✅ | - | Sticker end time (microseconds) |\n| scale | number |❌ | 1.0 | Sticker scale ratio, recommended range [0.1, 5.0] |\n| transform_x | number | ❌ | 0 | X-axis position offset (pixels) |\n| transform_y | number | ❌ | 0 | Y-axis position offset (pixels) |\n\n### Parameter Details\n\n#### Time Parameters\n\n- **start**: Start time of the sticker on the timeline, unit microseconds (1 second = 1,000,000 microseconds)\n- **end**: End time of the sticker on the timeline, unit microseconds\n- **duration**: Sticker display duration = end - start\n\n#### Scale Parameters\n\n- **scale**: Scale ratio of the sticker\n  - 1.0 = Original size\n  - 0.5 = Half size\n  - 2.0 = Double size\n  - Recommended range: 0.1 - 5.0\n\n#### Position Parameters\n\n- **transform_x**: X-axis position offset of the sticker, unit pixels\n  - Positive values move right\n  - Negative values move left\n  - Origin at canvas center\n  - Actually stored in half canvas width units (assuming canvas width 1920, i.e., divided by 960)\n\n- **transform_y**: Y-axis position offset of the sticker, unit pixels\n  - Positive values move down\n  - Negative values move up\n  - Origin at canvas center\n  - Actually stored in half canvas height units (assuming canvas height 1080, i.e., divided by 540)\n\n#### Sticker ID Description\n\n- **sticker_id**: Unique identifier of the sticker\n  - Format: Usually numeric string\n  - Example: `\"7326810673609018675\"`\n  - Acquisition: Through Jianying sticker library or related APIs\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"sticker_id\": \"7326810673609018675\",\n  \"track_id\": \"track-uuid\",\n  \"segment_id\": \"segment-uuid\",\n  \"duration\": 5000000\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| draft_url | string | Updated draft URL |\n| sticker_id | string | Unique ID of the sticker |\n| track_id | string | Sticker track ID |\n| segment_id | string | Sticker segment ID |\n| duration | number | Sticker display duration (microseconds) |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Sticker Addition\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_sticker \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"sticker_id\": \"7326810673609018675\",\n    \"start\": 0,\n    \"end\": 5000000\n  }'\n```\n\n#### 2. Sticker with Scaling\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_sticker \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"sticker_id\": \"7326810673609018675\",\n    \"start\": 1000000,\n    \"end\": 6000000,\n    \"scale\": 1.5\n  }'\n```\n\n#### 3. Sticker with Position Offset\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_sticker \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"sticker_id\": \"7326810673609018675\",\n    \"start\": 2000000,\n    \"end\": 7000000,\n    \"scale\": 0.8,\n    \"transform_x\": 200,\n    \"transform_y\": -100\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | draft_url is required | Missing draft URL parameter | Provide a valid draft_url |\n| 400 | sticker_id is required | Missing sticker ID parameter | Provide a valid sticker_id |\n| 400 | start is required | Missing start time parameter | Provide a valid start time |\n| 400 | end is required | Missing end time parameter | Provide a valid end time |\n| 400 | Time range invalid | end must be greater than start | Ensure end time is greater than start time |\n| 400 | Scale ratio invalid | scale out of recommended range | Use scale values within 0.1-5.0 range |\n| 400 | Invalid sticker information, please check sticker parameters | Sticker parameter validation failed | Check if sticker parameters meet requirements |\n| 404 | Draft does not exist | Specified draft URL invalid | Check if draft URL is correct |\n| 404 | Sticker does not exist | Specified sticker ID invalid | Confirm if sticker ID is correct |\n| 500 | Sticker addition failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n2. **Sticker ID**: Ensure using valid sticker ID\n3. **Time Range**: end must be greater than start\n4. **Scale Range**: scale recommended within 0.1-5.0 range\n5. **Position Parameters**: transform_x and transform_y units are pixels, but internally converted to half canvas units for storage\n   - transform_x conversion formula: actual value / 960 (assuming canvas width 1920)\n   - transform_y conversion formula: actual value / 540 (assuming canvas height 1080)\n6. **Track Management**: System automatically creates sticker track\n7. **Performance Consideration**: Avoid adding large numbers of stickers simultaneously\n\n## Workflow\n\n1. Validate required parameters (draft_url, sticker_id, start, end)\n2. Check validity of time range\n3. Get draft from cache\n4. Create sticker track (if not exists)\n5. Create image adjustment settings\n6. Create sticker segment\n7. Add segment to track\n8. Save draft\n9. Return sticker information\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Videos](./add_videos.md)\n- [Add Audios](./add_audios.md)\n- [Add Images](./add_images.md)\n- [Save Draft](./save_draft.md)\n- [Generate Video](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_sticker.zh.md",
    "content": "# ADD_STICKER API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/add_sticker\n```\n\n## 功能描述\n\n向现有草稿中添加贴纸。该接口用于在指定的时间段内添加贴纸素材到剪映草稿中，支持贴纸的缩放和位置调整。贴纸可以用于增强视频的视觉效果，如表情、装饰、文字等。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"sticker_id\": \"7326810673609018675\",\n  \"start\": 0,\n  \"end\": 5000000,\n  \"scale\": 1.0,\n  \"transform_x\": 0,\n  \"transform_y\": 0\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| draft_url | string | ✅ | - | 目标草稿的完整URL |\n| sticker_id | string | ✅ | - | 贴纸的唯一标识ID |\n| start | number | ✅ | - | 贴纸开始时间（微秒） |\n| end | number | ✅ | - | 贴纸结束时间（微秒） |\n| scale | number | ❌ | 1.0 | 贴纸缩放比例，建议范围[0.1, 5.0] |\n| transform_x | number | ❌ | 0 | X轴位置偏移（像素） |\n| transform_y | number | ❌ | 0 | Y轴位置偏移（像素） |\n\n### 参数详解\n\n#### 时间参数\n\n- **start**: 贴纸在时间轴上的开始时间，单位为微秒（1秒 = 1,000,000微秒）\n- **end**: 贴纸在时间轴上的结束时间，单位为微秒\n- **duration**: 贴纸显示时长 = end - start\n\n#### 缩放参数\n\n- **scale**: 贴纸的缩放比例\n  - 1.0 = 原始大小\n  - 0.5 = 缩小到一半\n  - 2.0 = 放大到两倍\n  - 建议范围：0.1 - 5.0\n\n#### 位置参数\n\n- **transform_x**: 贴纸在X轴方向的位置偏移，单位为像素\n  - 正值向右移动\n  - 负值向左移动\n  - 以画布中心为原点\n  - 实际存储时会转换为半画布宽单位（假设画布宽度1920，即除以960）\n\n- **transform_y**: 贴纸在Y轴方向的位置偏移，单位为像素\n  - 正值向下移动\n  - 负值向上移动\n  - 以画布中心为原点\n  - 实际存储时会转换为半画布高单位（假设画布高度1080，即除以540）\n\n#### 贴纸ID说明\n\n- **sticker_id**: 贴纸的唯一标识符\n  - 格式：通常为数字字符串\n  - 示例：`\"7326810673609018675\"`\n  - 获取方式：通过剪映贴纸库或相关API获取\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"sticker_id\": \"7326810673609018675\",\n  \"track_id\": \"track-uuid\",\n  \"segment_id\": \"segment-uuid\",\n  \"duration\": 5000000\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| draft_url | string | 更新后的草稿URL |\n| sticker_id | string | 贴纸的唯一标识ID |\n| track_id | string | 贴纸轨道ID |\n| segment_id | string | 贴纸片段ID |\n| duration | number | 贴纸显示时长（微秒） |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本贴纸添加\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_sticker \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"sticker_id\": \"7326810673609018675\",\n    \"start\": 0,\n    \"end\": 5000000\n  }'\n```\n\n#### 2. 带缩放的贴纸\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_sticker \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"sticker_id\": \"7326810673609018675\",\n    \"start\": 1000000,\n    \"end\": 6000000,\n    \"scale\": 1.5\n  }'\n```\n\n#### 3. 带位置偏移的贴纸\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_sticker \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"sticker_id\": \"7326810673609018675\",\n    \"start\": 2000000,\n    \"end\": 7000000,\n    \"scale\": 0.8,\n    \"transform_x\": 200,\n    \"transform_y\": -100\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | draft_url是必填项 | 缺少草稿URL参数 | 提供有效的draft_url |\n| 400 | sticker_id是必填项 | 缺少贴纸ID参数 | 提供有效的sticker_id |\n| 400 | start是必填项 | 缺少开始时间参数 | 提供有效的start时间 |\n| 400 | end是必填项 | 缺少结束时间参数 | 提供有效的end时间 |\n| 400 | 时间范围无效 | end必须大于start | 确保结束时间大于开始时间 |\n| 400 | 缩放比例无效 | scale超出建议范围 | 使用0.1-5.0范围内的缩放值 |\n| 400 | 无效的贴纸信息，请检查贴纸参数是否正确 | 贴纸参数校验失败 | 检查贴纸参数是否符合要求 |\n| 404 | 草稿不存在 | 指定的草稿URL无效 | 检查草稿URL是否正确 |\n| 404 | 贴纸不存在 | 指定的贴纸ID无效 | 确认贴纸ID是否正确 |\n| 500 | 贴纸添加失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **时间单位**: 所有时间参数使用微秒（1秒 = 1,000,000微秒）\n2. **贴纸ID**: 确保使用有效的贴纸ID\n3. **时间范围**: end必须大于start\n4. **缩放范围**: scale建议在0.1-5.0范围内\n5. **位置参数**: transform_x和transform_y单位为像素，但内部会转换为半画布单位存储\n   - transform_x转换公式：实际值 / 960（假设画布宽度1920）\n   - transform_y转换公式：实际值 / 540（假设画布高度1080）\n6. **轨道管理**: 系统自动创建贴纸轨道\n7. **性能考虑**: 避免同时添加大量贴纸\n\n## 工作流程\n\n1. 验证必填参数（draft_url, sticker_id, start, end）\n2. 检查时间范围的有效性\n3. 从缓存中获取草稿\n4. 创建贴纸轨道（如果不存在）\n5. 创建图像调节设置\n6. 创建贴纸片段\n7. 添加片段到轨道\n8. 保存草稿\n9. 返回贴纸信息\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加视频](./add_videos.md)\n- [添加音频](./add_audios.md)\n- [添加图片](./add_images.md)\n- [保存草稿](./save_draft.md)\n- [生成视频](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_text_style.md",
    "content": "# ADD_TEXT_STYLE API Documentation\n\n## 🌐 Language Switch\n[中文版](./add_text_style.zh.md) | [English](./add_text_style.md)\n\n## Interface Information\n\n```bash\nPOST /openapi/capcut-mate/v1/add_text_style\n```\n\n## Function Description\n\nCreate rich text styles for text, supporting keyword highlighting, color settings, font size adjustments, and other functions. This interface can convert plain text into rich text format containing style information, achieving keyword highlighting and diverse text display effects.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"text\": \"五个快乐到死的顶级思维\",\n  \"keyword\": \"快乐|顶级思维\",\n  \"font_size\": 12,\n  \"keyword_color\": \"#ff7100\",\n  \"keyword_font_size\": 15\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| text | string |✅ | - | Text content to process |\n| keyword | string |✅ | - | Keywords, multiple separated by \\| |\n| font_size | number |❌ | 12 | Font size of plain text |\n| keyword_color | string |❌ | \"#ff7100\" | Keyword text color (hexadecimal) |\n| keyword_font_size | number |❌ | 15 | Keyword font size |\n\n### Parameter Details\n\n#### Text Parameters\n\n- **text**: Original text content to be processed for styling\n  - Example: `\"五个快乐到死的顶级思维\"`\n\n#### Keyword Parameters\n\n- **keyword**: Keywords to be highlighted, support multiple keywords separated by vertical bar (|)\n  - Example: `\"快乐|顶级思维\"`\n  - Note: System matches keywords by length priority to avoid short keywords overriding long keywords\n\n#### Font Size Parameters\n\n- **font_size**: Font size of plain text (non-keywords)\n  - Default: 12\n  - Recommended range: 8-72\n\n- **keyword_font_size**: Font size of keywords\n  - Default: 15\n  - Recommended range: 8-72\n\n#### Color Parameters\n\n- **keyword_color**: Text color of keywords, using hexadecimal format\n  - Default: `\"#ff7100\"` (orange)\n  - Format: #RRGGBB\n  - Examples: `\"#ff0000\"` (red), `\"#00ff00\"` (green), `\"#0000ff\"` (blue)\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"text_style\": \"{\\\"styles\\\":[{\\\"fill\\\":{\\\"content\\\":{\\\"solid\\\":{\\\"color\\\":[1,1,1]}}},\\\"range\\\":[0,2],\\\"size\\\":12,\\\"font\\\":{\\\"id\\\":\\\"\\\",\\\"path\\\":\\\"\\\"}},{\\\"fill\\\":{\\\"content\\\":{\\\"solid\\\":{\\\"color\\\":[1,0.44313725490196076,0]}}},\\\"range\\\":[2,4],\\\"size\\\":15,\\\"font\\\":{\\\"id\\\":\\\"\\\",\\\"path\\\":\\\"\\\"},\\\"useLetterColor\\\":true},{\\\"fill\\\":{\\\"content\\\":{\\\"solid\\\":{\\\"color\\\":[1,1,1]}}},\\\"range\\\":[4,7],\\\"size\\\":12,\\\"font\\\":{\\\"id\\\":\\\"\\\",\\\"path\\\":\\\"\\\"}},{\\\"fill\\\":{\\\"content\\\":{\\\"solid\\\":{\\\"color\\\":[1,0.44313725490196076,0]}}},\\\"range\\\":[7,11],\\\"size\\\":15,\\\"font\\\":{\\\"id\\\":\\\"\\\",\\\"path\\\":\\\"\\\"},\\\"useLetterColor\\\":true}],\\\"text\\\":\\\"五个快乐到死的顶级思维\\\"}\"\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| text_style | string | Text style JSON string, containing styles array and text field |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"code\": 2026,\n  \"message\": \"Invalid text style information, please check text or keyword parameters\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Text Style Creation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_text_style \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"text\": \"五个快乐到死的顶级思维\",\n    \"keyword\": \"快乐|顶级思维\"\n  }'\n```\n\n#### 2. Custom Font Sizes\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_text_style \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"text\": \"五个快乐到死的顶级思维\",\n    \"keyword\": \"快乐|顶级思维\",\n    \"font_size\": 14,\n    \"keyword_font_size\": 18\n  }'\n```\n\n#### 3. Custom Keyword Color\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_text_style \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"text\": \"五个快乐到死的顶级思维\",\n    \"keyword\": \"快乐|顶级思维\",\n    \"keyword_color\": \"#ff0000\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 2026 | Invalid text style information, please check text or keyword parameters | Text or keyword parameter format error or invalid value | Check if text and keyword parameters meet requirements |\n| 2027 | Text style creation failed | Error occurred during text style creation | Contact technical support |\n\n## Notes\n\n1. **Keyword Matching**: Keywords are matched by length priority, longer keywords take precedence over shorter ones\n2. **Color Format**: Use standard hexadecimal color format #RRGGBB\n3. **Font Size**: Recommended within 8-72 range\n4. **Keyword Separation**: Multiple keywords separated by vertical bar |\n5. **Case Sensitivity**: Keyword matching is case-sensitive\n\n## Workflow\n\n1. Validate required parameters (text, keyword)\n2. Parse keyword string\n3. Find keyword positions in text\n4. Convert color values to RGB format\n5. Generate text style array\n6. Build response object\n7. Return text style information\n\n## Related Interfaces\n\n- [Add Captions](./add_captions.md)\n- [Create Draft](./create_draft.md)\n- [Save Draft](./save_draft.md)\n- [Generate Video](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_text_style.zh.md",
    "content": "# ADD_TEXT_STYLE API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```bash\nPOST /openapi/capcut-mate/v1/add_text_style\n```\n\n## 功能描述\n\n为文本创建富文本样式，支持关键词高亮、颜色设置、字体大小调整等功能。该接口可以将普通文本转换为包含样式信息的富文本格式，实现关键词突出显示、多样化的文本展示效果。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"text\": \"五个快乐到死的顶级思维\",\n  \"keyword\": \"快乐|顶级思维\",\n  \"font_size\": 12,\n  \"keyword_color\": \"#ff7100\",\n  \"keyword_font_size\": 15\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| text | string | ✅ | - | 要处理的文本内容 |\n| keyword | string | ✅ | - | 关键词，多个用 \\| 分隔 |\n| font_size | number | ❌ | 12 | 普通文本的字体大小 |\n| keyword_color | string | ❌ | \"#ff7100\" | 关键词文本颜色（十六进制） |\n| keyword_font_size | number | ❌ | 15 | 关键词字体大小 |\n\n### 参数详解\n\n#### 文本参数\n\n- **text**: 需要进行样式处理的原始文本内容\n  - 示例：`\"五个快乐到死的顶级思维\"`\n\n#### 关键词参数\n\n- **keyword**: 需要高亮显示的关键词，支持多个关键词用竖线（|）分隔\n  - 示例：`\"快乐|顶级思维\"`\n  - 注意：系统会按关键词长度优先匹配，避免短关键词覆盖长关键词\n\n#### 字体大小参数\n\n- **font_size**: 普通文本（非关键词）的字体大小\n  - 默认值：12\n  - 建议范围：8-72\n\n- **keyword_font_size**: 关键词的字体大小\n  - 默认值：15\n  - 建议范围：8-72\n\n#### 颜色参数\n\n- **keyword_color**: 关键词的文本颜色，使用十六进制格式\n  - 默认值：`\"#ff7100\"` (橙色)\n  - 格式：#RRGGBB\n  - 示例：`\"#ff0000\"` (红色), `\"#00ff00\"` (绿色), `\"#0000ff\"` (蓝色)\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"text_style\": \"{\\\"styles\\\":[{\\\"fill\\\":{\\\"content\\\":{\\\"solid\\\":{\\\"color\\\":[1,1,1]}}},\\\"range\\\":[0,2],\\\"size\\\":12,\\\"font\\\":{\\\"id\\\":\\\"\\\",\\\"path\\\":\\\"\\\"}},{\\\"fill\\\":{\\\"content\\\":{\\\"solid\\\":{\\\"color\\\":[1,0.44313725490196076,0]}}},\\\"range\\\":[2,4],\\\"size\\\":15,\\\"font\\\":{\\\"id\\\":\\\"\\\",\\\"path\\\":\\\"\\\"},\\\"useLetterColor\\\":true},{\\\"fill\\\":{\\\"content\\\":{\\\"solid\\\":{\\\"color\\\":[1,1,1]}}},\\\"range\\\":[4,7],\\\"size\\\":12,\\\"font\\\":{\\\"id\\\":\\\"\\\",\\\"path\\\":\\\"\\\"}},{\\\"fill\\\":{\\\"content\\\":{\\\"solid\\\":{\\\"color\\\":[1,0.44313725490196076,0]}}},\\\"range\\\":[7,11],\\\"size\\\":15,\\\"font\\\":{\\\"id\\\":\\\"\\\",\\\"path\\\":\\\"\\\"},\\\"useLetterColor\\\":true}],\\\"text\\\":\\\"五个快乐到死的顶级思维\\\"}\"\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| text_style | string | 文本样式JSON字符串，包含styles数组和text字段 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"code\": 2026,\n  \"message\": \"无效的文本样式信息，请检查文本或关键词参数\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本文本样式创建\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_text_style \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"text\": \"五个快乐到死的顶级思维\",\n    \"keyword\": \"快乐|顶级思维\"\n  }'\n```\n\n#### 2. 自定义字体大小\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_text_style \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"text\": \"五个快乐到死的顶级思维\",\n    \"keyword\": \"快乐|顶级思维\",\n    \"font_size\": 14,\n    \"keyword_font_size\": 18\n  }'\n```\n\n#### 3. 自定义关键词颜色\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_text_style \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"text\": \"五个快乐到死的顶级思维\",\n    \"keyword\": \"快乐|顶级思维\",\n    \"keyword_color\": \"#ff0000\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 2026 | 无效的文本样式信息，请检查文本或关键词参数 | 文本或关键词参数格式错误或值无效 | 检查text和keyword参数是否符合要求 |\n| 2027 | 文本样式创建失败 | 创建文本样式过程中发生错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **关键词匹配**: 关键词按长度优先匹配，长关键词优先于短关键词\n2. **颜色格式**: 使用标准十六进制颜色格式 #RRGGBB\n3. **字体大小**: 建议在8-72范围内\n4. **关键词分隔**: 多个关键词使用竖线 | 分隔\n5. **大小写敏感**: 关键词匹配区分大小写\n\n## 工作流程\n\n1. 验证必填参数（text, keyword）\n2. 解析关键词字符串\n3. 在文本中查找关键词位置\n4. 转换颜色值为RGB格式\n5. 生成文本样式数组\n6. 构建响应对象\n7. 返回文本样式信息\n\n## 相关接口\n\n- [添加字幕](./add_captions.md)\n- [创建草稿](./create_draft.md)\n- [保存草稿](./save_draft.md)\n- [生成视频](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_videos.md",
    "content": "# ADD_VIDEOS API Documentation\n\n## 🌐 Language Switch\n[中文版](./add_videos.zh.md) | [English](./add_videos.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/add_videos\n```\n\n## Function Description\n\nBatch add video materials to existing drafts. This interface is a powerful video addition tool that supports batch processing of multiple videos, including time range control, transparency adjustment, mask effects, transition animations, volume control, scaling transformations, and other advanced features. Particularly suitable for creating complex multi-video combination scenes, such as picture-in-picture effects, video splicing, transition animations, etc.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"video_infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video1.mp4\\\",\\\"width\\\":1024,\\\"height\\\":1024,\\\"start\\\":0,\\\"end\\\":5000000,\\\"duration\\\":5000000,\\\"mask\\\":\\\"circle\\\",\\\"transition\\\":\\\"fade\\\",\\\"transition_duration\\\":500000,\\\"volume\\\":0.8}]\",\n  \"scene_timelines\": [{\"start\":0,\"end\":2500000}],\n  \"alpha\": 0.5,\n  \"scale_x\": 1.0,\n  \"scale_y\": 1.0,\n  \"transform_x\": 100,\n  \"transform_y\": 200\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| draft_url | string | ✅ | - | Complete URL of the target draft |\n| video_infos | string | ✅ | - | JSON string of video information array |\n| scene_timelines | array[object] | ❌ | - | Scene timeline array for video speed change, corresponds one-to-one with video_infos |\n| alpha | number | ❌ | 1.0 | Global transparency (0-1) |\n| scale_x | number | ❌ | 1.0 | X-axis scaling ratio |\n| scale_y | number | ❌ | 1.0 | Y-axis scaling ratio |\n| transform_x | number | ❌ | 0 | X-axis position offset (pixels) |\n| transform_y | number | ❌ | 0 | Y-axis position offset (pixels) |\n\n### video_infos Array Structure\n\n| Field | Type | Required | Default | Description |\n|-------|------|----------|---------|-------------|\n| video_url | string | ✅ | - | URL address of the video file |\n| width | number | ❌ | - | Video width (pixels), automatically obtained if not provided |\n| height | number | ❌ | - | Video height (pixels), automatically obtained if not provided |\n| start | number | ✅ | - | Video start playback time (microseconds) |\n| end | number | ✅ | - | Video end playback time (microseconds) |\n| duration | number | ❌ | end-start | Total video duration (microseconds) |\n| mask | string | ❌ | - | Mask type |\n| transition | string | ❌ | - | Transition effect name |\n| transition_duration | number | ❌ | 500000 | Transition duration (microseconds) |\n| volume | number | ❌ | 1.0 | Volume size (0-1) |\n\n### scene_timelines Array Structure\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| start | number | ✅ | Scene start time (microseconds) |\n| end | number | ✅ | Scene end time (microseconds) |\n\n### Parameter Details\n\n#### Time Parameters\n\n- **start**: Start time of the video on the timeline, unit microseconds (1 second = 1,000,000 microseconds)\n- **end**: End time of the video on the timeline, unit microseconds\n- **duration**: Total duration of the video file, used for material creation (optional parameter, defaults to end-start if not provided)\n- **Playback Duration**: Actual playback duration = end - start\n\n#### Transparency Parameters\n\n- **alpha**: Global transparency, applied to all added videos\n  - 1.0 = Fully opaque\n  - 0.5 = Semi-transparent\n  - 0.0 = Fully transparent\n  - Range: 0.0 - 1.0\n\n#### Scaling Parameters\n\n- **scale_x/scale_y**: Scaling ratios in X/Y axis directions\n- 1.0 = Original size, 0.5 = Half size, 2.0 = Double size\n- Recommended range: 0.1 - 5.0\n\n#### Position Parameters\n\n- **transform_x/transform_y**: Position offsets in X/Y axis directions, unit pixels\n- Positive values move right/down, negative values move left/up\n- Canvas center as origin\n\n#### Mask Types\n\nSupported mask types (all optional, default is no mask):\n- `circle` - Circular mask effect\n- `heart` - Heart-shaped mask\n- `star` - Star-shaped mask\n- `rectangle` - Rectangular mask\n- `linear` - Linear gradient mask\n- `mirror` - Mirror reflection mask\n\n#### Transition Effects\n\n- **transition**: Transition effect name\n- **transition_duration**: Transition duration\n  - Minimum: 100,000 microseconds (0.1 seconds)\n  - Maximum: 2,500,000 microseconds (2.5 seconds)\n  - Recommended: 500,000 microseconds (0.5 seconds)\n\n#### Volume Control\n\n- **volume**: Video volume size\n  - 1.0 = Original volume\n  - 0.5 = Half volume\n  - 0.0 = Mute\n  - Range: 0.0 - 1.0\n\n#### Video Speed Change (scene_timelines)\n\n- **scene_timelines**: Scene timeline array for video speed change, corresponds one-to-one with video_infos\n  - Each item contains `start` and `end` fields (microseconds)\n  - Speed calculation: `speed = (video.end - video.start) / (scene_timeline.end - scene_timeline.start)`\n  - Example: If video timeline is 0-2000000 (2 seconds) and scene_timeline is 0-1000000 (1 second), the video will play at 2x speed\n  - If not provided, video plays at normal speed (1.0x)\n\n**Speed Change Example**:\n```json\n// Original video: 2 seconds on timeline (0-2000000)\n// To make it 2x speed (play in 1 second):\n{\n  \"video_infos\": \"[{\\\"video_url\\\":\\\"...\\\", \\\"start\\\":0, \\\"end\\\":2000000}]\",\n  \"scene_timelines\": \"[{\\\"start\\\":0, \\\"end\\\":1000000}]\"\n}\n// Result: Video plays at 2x speed, actual playback duration is 1 second\n```\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"track_id\": \"video-track-uuid\",\n  \"video_ids\": [\"video1-uuid\", \"video2-uuid\", \"video3-uuid\"],\n  \"segment_ids\": [\"segment1-uuid\", \"segment2-uuid\", \"segment3-uuid\"]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| draft_url | string | Updated draft URL |\n| track_id | string | Video track ID |\n| video_ids | array | List of added video IDs |\n| segment_ids | array | List of segment IDs |\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Video Addition\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_videos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"video_infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video1.mp4\\\",\\\"width\\\":1920,\\\"height\\\":1080,\\\"start\\\":0,\\\"end\\\":5000000,\\\"duration\\\":10000000}]\"\n  }'\n```\n\n#### 2. Batch Adding Multiple Videos\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_videos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"video_infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video1.mp4\\\",\\\"width\\\":1920,\\\"height\\\":1080,\\\"start\\\":0,\\\"end\\\":5000000,\\\"duration\\\":10000000},{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video2.mp4\\\",\\\"width\\\":1280,\\\"height\\\":720,\\\"start\\\":5000000,\\\"end\\\":10000000,\\\"duration\\\":8000000}]\",\n    \"alpha\": 0.8\n  }'\n```\n\n#### 3. Video with Mask and Transition\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_videos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"video_infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video1.mp4\\\",\\\"width\\\":1024,\\\"height\\\":1024,\\\"start\\\":0,\\\"end\\\":5000000,\\\"duration\\\":10000000,\\\"mask\\\":\\\"circle\\\",\\\"transition\\\":\\\"fade\\\",\\\"transition_duration\\\":500000,\\\"volume\\\":0.8}]\",\n    \"alpha\": 1.0,\n    \"scale_x\": 1.2,\n    \"scale_y\": 1.2\n  }'\n```\n\n#### 4. Picture-in-Picture Effect\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_videos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"video_infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/main.mp4\\\",\\\"width\\\":1920,\\\"height\\\":1080,\\\"start\\\":0,\\\"end\\\":10000000,\\\"duration\\\":15000000},{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/pip.mp4\\\",\\\"width\\\":640,\\\"height\\\":360,\\\"start\\\":2000000,\\\"end\\\":8000000,\\\"duration\\\":10000000}]\",\n    \"transform_x\": 300,\n    \"transform_y\": -200,\n    \"scale_x\": 0.3,\n    \"scale_y\": 0.3\n  }'\n```\n\n#### 5. Video with Speed Change (2x Speed)\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_videos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"video_infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video1.mp4\\\",\\\"start\\\":0,\\\"end\\\":2000000}]\",\n    \"scene_timelines\": [{\"start\":0, \"end\":1000000}]\n  }'\n```\n\n#### 6. Multiple Videos with Different Speeds\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_videos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"video_infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video1.mp4\\\",\\\"start\\\":0,\\\"end\\\":3000000},{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video2.mp4\\\",\\\"start\\\":3000000,\\\"end\\\":6000000}]\",\n    \"scene_timelines\": [{\"start\":0, \"end\":1500000},{\"start\":0, \"end\":4000000}]\n  }'\n# video1: 3000000/1500000 = 2x speed\n# video2: 3000000/4000000 = 0.75x speed (slow motion)\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | draft_url is required | Missing draft URL parameter | Provide a valid draft URL |\n| 400 | video_infos is required | Missing video information parameter | Provide valid video information JSON |\n| 400 | video_infos format error | JSON format is incorrect | Check JSON string format |\n| 400 | video_url is required | Video URL missing | Provide URL for each video |\n| 400 | Video dimensions invalid | width or height invalid | Provide positive width and height |\n| 400 | Time range invalid | end must be greater than start | Ensure end time is greater than start time |\n| 400 | Transparency value invalid | alpha not in 0-1 range | Use transparency value between 0-1 |\n| 404 | Draft does not exist | Specified draft URL invalid | Check if draft URL is correct |\n| 404 | Video resource does not exist | Video URL inaccessible | Check if video URL is accessible |\n| 500 | Video processing failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **JSON Format**: video_infos must be a valid JSON string\n2. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n3. **Video Format**: Ensure video file format is supported (e.g., MP4, AVI, etc.)\n4. **File Size**: Large video files may affect processing speed\n5. **Network Access**: Video URL must be accessible\n6. **Mask Limitation**: Only predefined mask types are supported\n7. **Transition Limitation**: Transition duration has fixed range limitations\n8. **Performance Consideration**: Batch adding a large number of videos may affect performance\n9. **Speed Change**: scene_timelines is an object array, length should match video_infos array length\n\n## Workflow\n\n1. Validate required parameters (draft_url, video_infos)\n2. Parse video_infos JSON string\n3. Validate parameter configuration for each video\n4. Obtain and decrypt draft content\n5. Create video track\n6. Add video segments to track\n7. Apply transparency, scaling and position transformation\n8. Add mask and transition effects\n9. Set volume\n10. Save and encrypt draft\n11. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Audios](./add_audios.md)\n- [Add Images](./add_images.md)\n- [Save Draft](./save_draft.md)\n- [Generate Video](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/add_videos.zh.md",
    "content": "# ADD_VIDEOS API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_videos.zh.md) | [English](./add_videos.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/add_videos\n```\n\n## 功能描述\n\n批量向现有草稿中添加视频素材。该接口是一个功能强大的视频添加工具，支持多个视频的批量处理，包括时间范围控制、透明度调整、遮罩效果、转场动画、音量控制、缩放变换等高级功能。特别适合创建复杂的多视频组合场景，如画中画效果、视频拼接、过渡动画等。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"video_infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video1.mp4\\\",\\\"width\\\":1024,\\\"height\\\":1024,\\\"start\\\":0,\\\"end\\\":5000000,\\\"duration\\\":5000000,\\\"mask\\\":\\\"圆形\\\",\\\"transition\\\":\\\"淡入淡出\\\",\\\"transition_duration\\\":500000,\\\"volume\\\":0.8}]\",\n  \"scene_timelines\": [{\"start\":0,\"end\":2500000}],\n  \"alpha\": 0.5,\n  \"scale_x\": 1.0,\n  \"scale_y\": 1.0,\n  \"transform_x\": 100,\n  \"transform_y\": 200\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| draft_url | string | ✅ | - | 目标草稿的完整URL |\n| video_infos | string | ✅ | - | 视频信息数组的JSON字符串 |\n| scene_timelines | array[object] | ❌ | - | 场景时间线数组，用于视频变速，与video_infos一一对应 |\n| alpha | number | ❌ | 1.0 | 全局透明度(0-1) |\n| scale_x | number | ❌ | 1.0 | X轴缩放比例 |\n| scale_y | number | ❌ | 1.0 | Y轴缩放比例 |\n| transform_x | number | ❌ | 0 | X轴位置偏移(像素) |\n| transform_y | number | ❌ | 0 | Y轴位置偏移(像素) |\n\n### video_infos 数组结构\n\n| 字段名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| video_url | string | ✅ | - | 视频文件的URL地址 |\n| width | number | ❌ | - | 视频宽度(像素)，不传则自动获取视频文件尺寸 |\n| height | number | ❌ | - | 视频高度(像素)，不传则自动获取视频文件尺寸 |\n| start | number | ✅ | - | 视频开始播放时间(微秒) |\n| end | number | ✅ | - | 视频结束播放时间(微秒) |\n| duration | number | ❌ | end-start | 视频总时长(微秒) |\n| mask | string | ❌ | - | 遮罩类型 |\n| transition | string | ❌ | - | 转场效果名称 |\n| transition_duration | number | ❌ | 500000 | 转场持续时间(微秒) |\n| volume | number | ❌ | 1.0 | 音量大小(0-1) |\n\n### scene_timelines 数组结构\n\n| 字段名 | 类型 | 必填 | 说明 |\n|--------|------|------|------|\n| start | number | ✅ | 场景开始时间（微秒） |\n| end | number | ✅ | 场景结束时间（微秒） |\n\n### 参数详解\n\n#### 时间参数\n\n- **start**: 视频在时间轴上的开始时间，单位微秒（1秒 = 1,000,000微秒）\n- **end**: 视频在时间轴上的结束时间，单位微秒\n- **duration**: 视频文件的总时长，用于素材创建（可选参数，如果不传则默认为end-start）\n- **播放时长**: 实际播放时长 = end - start\n\n#### 透明度参数\n\n- **alpha**: 全局透明度，应用于所有添加的视频\n  - 1.0 = 完全不透明\n  - 0.5 = 半透明\n  - 0.0 = 完全透明\n  - 范围：0.0 - 1.0\n\n#### 缩放参数\n\n- **scale_x/scale_y**: X/Y轴方向的缩放比例\n- 1.0 = 原始大小，0.5 = 缩小一半，2.0 = 放大两倍\n- 建议范围：0.1 - 5.0\n\n#### 位置参数\n\n- **transform_x/transform_y**: X/Y轴方向的位置偏移，单位像素\n- 正值向右/下移动，负值向左/上移动\n- 以画布中心为原点\n\n#### 遮罩类型\n\n支持的遮罩类型：\n- `圆形` - 圆形遮罩效果\n- `爱心` - 爱心形状遮罩\n- `星形` - 星形遮罩\n- `矩形` - 矩形遮罩\n- `线性` - 线性渐变遮罩\n- `镜面` - 镜面反射遮罩\n\n#### 转场效果\n\n- **transition**: 转场效果名称\n- **transition_duration**: 转场持续时间\n  - 最小值：100,000微秒（0.1秒）\n  - 最大值：2,500,000微秒（2.5秒）\n  - 推荐值：500,000微秒（0.5秒）\n\n#### 音量控制\n\n- **volume**: 视频音量大小\n  - 1.0 = 原始音量\n  - 0.5 = 一半音量\n  - 0.0 = 静音\n  - 范围：0.0 - 1.0\n\n#### 视频变速 (scene_timelines)\n\n- **scene_timelines**: 场景时间线数组，用于视频变速，与video_infos一一对应\n  - 每个项包含 `start` 和 `end` 字段（微秒）\n  - 速度计算：`speed = (video.end - video.start) / (scene_timeline.end - scene_timeline.start)`\n  - 示例：如果视频时间线是 0-2000000（2秒），场景时间线是 0-1000000（1秒），则视频将以2倍速播放\n  - 如果不提供，视频以正常速度（1.0倍）播放\n\n**变速示例**：\n```json\n// 原始视频：时间轴上占2秒（0-2000000）\n// 要变为2倍速（1秒内播完）：\n{\n  \"video_infos\": \"[{\\\"video_url\\\":\\\"...\\\", \\\"start\\\":0, \\\"end\\\":2000000}]\",\n  \"scene_timelines\": \"[{\\\"start\\\":0, \\\"end\\\":1000000}]\"\n}\n// 结果：视频以2倍速播放，实际播放时长为1秒\n```\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"track_id\": \"video-track-uuid\",\n  \"video_ids\": [\"video1-uuid\", \"video2-uuid\", \"video3-uuid\"],\n  \"segment_ids\": [\"segment1-uuid\", \"segment2-uuid\", \"segment3-uuid\"]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| draft_url | string | 更新后的草稿URL |\n| track_id | string | 视频轨道ID |\n| video_ids | array | 添加的视频ID列表 |\n| segment_ids | array | 片段ID列表 |\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本视频添加\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_videos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"video_infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video1.mp4\\\",\\\"width\\\":1920,\\\"height\\\":1080,\\\"start\\\":0,\\\"end\\\":5000000,\\\"duration\\\":10000000}]\"\n  }'\n```\n\n#### 2. 多视频批量添加\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_videos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"video_infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video1.mp4\\\",\\\"width\\\":1920,\\\"height\\\":1080,\\\"start\\\":0,\\\"end\\\":5000000,\\\"duration\\\":10000000},{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video2.mp4\\\",\\\"width\\\":1280,\\\"height\\\":720,\\\"start\\\":5000000,\\\"end\\\":10000000,\\\"duration\\\":8000000}]\",\n    \"alpha\": 0.8\n  }'\n```\n\n#### 3. 带遮罩和转场的视频\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_videos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"video_infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video1.mp4\\\",\\\"width\\\":1024,\\\"height\\\":1024,\\\"start\\\":0,\\\"end\\\":5000000,\\\"duration\\\":10000000,\\\"mask\\\":\\\"圆形\\\",\\\"transition\\\":\\\"淡入淡出\\\",\\\"transition_duration\\\":500000,\\\"volume\\\":0.8}]\",\n    \"alpha\": 1.0,\n    \"scale_x\": 1.2,\n    \"scale_y\": 1.2\n  }'\n```\n\n#### 4. 画中画效果\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_videos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"video_infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/main.mp4\\\",\\\"width\\\":1920,\\\"height\\\":1080,\\\"start\\\":0,\\\"end\\\":10000000,\\\"duration\\\":15000000},{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/pip.mp4\\\",\\\"width\\\":640,\\\"height\\\":360,\\\"start\\\":2000000,\\\"end\\\":8000000,\\\"duration\\\":10000000}]\",\n    \"transform_x\": 300,\n    \"transform_y\": -200,\n    \"scale_x\": 0.3,\n    \"scale_y\": 0.3\n  }'\n```\n\n#### 5. 视频变速（2倍速）\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_videos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"video_infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video1.mp4\\\",\\\"start\\\":0,\\\"end\\\":2000000}]\",\n    \"scene_timelines\": [{\"start\":0, \"end\":1000000}]\n  }'\n```\n\n#### 6. 多个视频不同速度\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_videos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"video_infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video1.mp4\\\",\\\"start\\\":0,\\\"end\\\":3000000},{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video2.mp4\\\",\\\"start\\\":3000000,\\\"end\\\":6000000}]\",\n    \"scene_timelines\": [{\"start\":0, \"end\":1500000},{\"start\":0, \"end\":4000000}]\n  }'\n# video1: 3000000/1500000 = 2倍速\n# video2: 3000000/4000000 = 0.75倍速（慢放）\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | draft_url是必填项 | 缺少草稿URL参数 | 提供有效的草稿URL |\n| 400 | video_infos是必填项 | 缺少视频信息参数 | 提供有效的视频信息JSON |\n| 400 | video_infos格式错误 | JSON格式不正确 | 检查JSON字符串格式 |\n| 400 | video_url是必填项 | 视频URL缺失 | 为每个视频提供URL |\n| 400 | 视频尺寸无效 | width或height无效 | 提供正数的宽度和高度 |\n| 400 | 时间范围无效 | end必须大于start | 确保结束时间大于开始时间 |\n| 400 | 透明度值无效 | alpha不在0-1范围内 | 使用0-1之间的透明度值 |\n| 404 | 草稿不存在 | 指定的草稿URL无效 | 检查草稿URL是否正确 |\n| 404 | 视频资源不存在 | 视频URL无法访问 | 检查视频URL是否可访问 |\n| 500 | 视频处理失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **JSON格式**: video_infos必须是合法的JSON字符串\n2. **时间单位**: 所有时间参数使用微秒（1秒 = 1,000,000微秒）\n3. **视频格式**: 确保视频文件格式被支持（如MP4、AVI等）\n4. **文件大小**: 大视频文件可能影响处理速度\n5. **网络访问**: 视频URL必须可以正常访问\n6. **遮罩限制**: 只支持预定义的遮罩类型\n7. **转场限制**: 转场时长有固定范围限制\n8. **性能考虑**: 批量添加大量视频可能影响性能\n9. **变速功能**: scene_timelines是对象数组，长度应与video_infos数组长度一致\n\n## 工作流程\n\n1. 验证必填参数（draft_url, video_infos）\n2. 解析video_infos JSON字符串\n3. 验证每个视频的参数配置\n4. 获取并解密草稿内容\n5. 创建视频轨道\n6. 添加视频片段到轨道\n7. 应用透明度、缩放和位置变换\n8. 添加遮罩和转场效果\n9. 设置音量\n10. 保存并加密草稿\n11. 返回处理结果\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加音频](./add_audios.md)\n- [添加图片](./add_images.md)\n- [保存草稿](./save_draft.md)\n- [生成视频](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./add_videos.zh.md) | [English](./add_videos.md)"
  },
  {
    "path": "docs/audio_infos.md",
    "content": "# AUDIO_INFOS API Documentation\n\n## 🌐 Language Switch\n[中文版](./audio_infos.zh.md) | [English](./audio_infos.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/audio_infos\n```\n\n## Function Description\n\nGenerate audio information based on audio URLs and timelines. This interface converts audio file URLs and timeline configurations into the audio information format required by Jianying drafts, supporting volume control and audio effect settings.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"mp3_urls\": [\"https://assets.jcaigc.cn/audio1.mp3\", \"https://assets.jcaigc.cn/audio2.mp3\"],\n  \"timelines\": [\n    {\"start\": 0, \"end\": 3000000},\n    {\"start\": 3000000, \"end\": 8000000}\n  ],\n  \"audio_effect\": \"reverb\",\n  \"volume\": 0.8\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| mp3_urls | array[string] |✅ | - | Audio file URL array |\n| timelines | array[object] |✅ | - | Timeline configuration array |\n| audio_effect | string |❌ | None | Audio effect name |\n| volume | number |❌ | 1.0 | Volume level (0.0-2.0) |\n\n### Parameter Details\n\n#### mp3_urls\n- **Type**: array[string]\n- **Description**: Array of audio file URL addresses\n- **Example**: [\"https://assets.jcaigc.cn/bgm.mp3\", \"https://assets.jcaigc.cn/sfx.mp3\"]\n\n#### timelines\n- **Type**: array[object]\n- **Description**: Timeline configuration array, each element contains start and end fields\n- **Example**: [{\"start\": 0, \"end\": 5000000}, {\"start\": 5000000, \"end\": 10000000}]\n\n#### audio_effect\n- **Type**: string\n- **Description**: Audio effect name\n- **Default**: None\n- **Example**: \"reverb\", \"echo\", \"bass_boost\"\n\n#### volume\n- **Type**: number\n- **Description**: Audio volume level\n- **Default**: 1.0\n- **Range**: 0.0 - 2.0\n- **Example**: 0.8 (80% volume)\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"infos\": \"[{\\\"audio_url\\\":\\\"https://assets.jcaigc.cn/audio1.mp3\\\",\\\"start\\\":0,\\\"end\\\":3000000,\\\"duration\\\":5000000,\\\"volume\\\":0.8,\\\"audio_effect\\\":\\\"reverb\\\"},{\\\"audio_url\\\":\\\"https://assets.jcaigc.cn/audio2.mp3\\\",\\\"start\\\":3000000,\\\"end\\\":8000000,\\\"duration\\\":8000000,\\\"volume\\\":1.0,\\\"audio_effect\\\":null}]\"\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| infos | string | Audio information JSON string |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Audio Information Generation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/audio_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mp3_urls\": [\"https://assets.jcaigc.cn/bgm.mp3\"],\n    \"timelines\": [{\"start\": 0, \"end\": 10000000}],\n    \"volume\": 0.7\n  }'\n```\n\n#### 2. Audio Information with Effects\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/audio_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mp3_urls\": [\"https://assets.jcaigc.cn/intro.mp3\", \"https://assets.jcaigc.cn/content.mp3\"],\n    \"timelines\": [{\"start\": 0, \"end\": 2000000}, {\"start\": 2000000, \"end\": 12000000}],\n    \"audio_effect\": \"reverb\",\n    \"volume\": 0.9\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | mp3_urls is required | Missing audio URL parameter | Provide valid audio URL array |\n| 400 | timelines is required | Missing timeline parameter | Provide valid timeline array |\n| 400 | Array length mismatch | mp3_urls and timelines array lengths don't match | Ensure both arrays have the same length |\n| 400 | Invalid volume value | Volume not in range 0.0-2.0 | Use volume value between 0.0-2.0 |\n| 404 | Audio resource not found | Audio URL inaccessible | Check if audio URL is accessible |\n| 500 | Audio information generation failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Array Matching**: mp3_urls and timelines array lengths must be the same\n2. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n3. **Volume Range**: volume value must be between 0.0-2.0\n4. **Effect Support**: audio_effect needs to be a supported audio effect name\n5. **JSON Format**: Returned infos is a JSON string that needs to be parsed before use\n6. **Network Access**: Audio URLs must be accessible\n\n## Workflow\n\n1. Validate required parameters (mp3_urls, timelines)\n2. Check array length matching\n3. Validate timeline parameter validity\n4. Validate volume parameter range\n5. Generate corresponding audio information for each audio URL\n6. Apply volume and audio effect settings\n7. Convert information to JSON string format\n8. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Audios](./add_audios.md)\n- [Audio Timelines](./audio_timelines.md)\n- [Save Draft](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### Language Switch\n[中文版](./audio_infos.zh.md) | [English](./audio_infos.md)"
  },
  {
    "path": "docs/audio_infos.zh.md",
    "content": "# AUDIO_INFOS API 接口文档\n\n## 🌐 语言切换\n[中文版](./audio_infos.zh.md) | [English](./audio_infos.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/audio_infos\n```\n\n## 功能描述\n\n根据音频URL和时间线生成音频信息。该接口将音频文件URL和时间线配置转换为剪映草稿所需的音频信息格式，支持音量控制和音频效果设置。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"mp3_urls\": [\"https://assets.jcaigc.cn/audio1.mp3\", \"https://assets.jcaigc.cn/audio2.mp3\"],\n  \"timelines\": [\n    {\"start\": 0, \"end\": 3000000},\n    {\"start\": 3000000, \"end\": 8000000}\n  ],\n  \"audio_effect\": \"reverb\",\n  \"volume\": 0.8\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 |必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| mp3_urls | array[string] |✅ | - | 音频文件URL数组 |\n| timelines | array[object] |✅ | - | 时间线配置数组 |\n| audio_effect | string |❌ | None | 音频效果名称 |\n| volume | number |❌ | 1.0 |音量大小(0.0-2.0) |\n\n### 参数详解\n\n#### mp3_urls\n- **类型**: array[string]\n- **说明**: 音频文件URL地址数组\n- **示例**: [\"https://assets.jcaigc.cn/bgm.mp3\", \"https://assets.jcaigc.cn/sfx.mp3\"]\n\n#### timelines\n- **类型**: array[object]\n- **说明**: 时间线配置数组，每个元素包含start和end字段\n- **示例**: [{\"start\": 0, \"end\": 5000000}, {\"start\": 5000000, \"end\": 10000000}]\n\n#### audio_effect\n- **类型**: string\n- **说明**: 音频效果名称\n- **默认值**: None\n- **示例**: \"reverb\", \"echo\", \"bass_boost\"\n\n#### volume\n- **类型**: number\n- **说明**: 音频音量大小\n- **默认值**: 1.0\n- **范围**: 0.0 - 2.0\n- **示例**: 0.8 (80%音量)\n\n##响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"infos\": \"[{\\\"audio_url\\\":\\\"https://assets.jcaigc.cn/audio1.mp3\\\",\\\"start\\\":0,\\\"end\\\":3000000,\\\"duration\\\":5000000,\\\"volume\\\":0.8,\\\"audio_effect\\\":\\\"reverb\\\"},{\\\"audio_url\\\":\\\"https://assets.jcaigc.cn/audio2.mp3\\\",\\\"start\\\":3000000,\\\"end\\\":8000000,\\\"duration\\\":8000000,\\\"volume\\\":1.0,\\\"audio_effect\\\":null}]\"\n}\n```\n\n###响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| infos | string |音信息JSON字符串 |\n\n###错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1.基本音频信息生成\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/audio_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mp3_urls\": [\"https://assets.jcaigc.cn/bgm.mp3\"],\n    \"timelines\": [{\"start\": 0, \"end\": 10000000}],\n    \"volume\": 0.7\n  }'\n```\n\n#### 2.效果的音频信息\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/audio_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mp3_urls\": [\"https://assets.jcaigc.cn/intro.mp3\", \"https://assets.jcaigc.cn/content.mp3\"],\n    \"timelines\": [{\"start\": 0, \"end\": 2000000}, {\"start\": 2000000, \"end\": 12000000}],\n    \"audio_effect\": \"reverb\",\n    \"volume\": 0.9\n  }'\n```\n\n##错误码说明\n\n|错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | mp3_urls是必填项 |缺少音频URL参数 | 提供有效的音频URL数组 |\n| 400 | timelines是必填项 |缺少时间线参数 | 提供有效的时间线数组 |\n| 400 | 数组长度不匹配 | mp3_urls和timelines长度不一致 |确保两个数组长度相同 |\n| 400 | volume值无效 |音不在0.0-2.0范围内 | 使用0.0-2.0之间的音量值 |\n| 404 |音频资源不存在 |音频URL无法访问 |检查音频URL是否可访问 |\n| 500 |音频信息生成失败 |内部处理错误 |联技术支持 |\n\n## 注意事项\n\n1. **数组匹配**: mp3_urls和timelines数组长度必须相同\n2. **时间单位**:所有时间参数使用微秒（1秒 = 1,000,000微秒）\n3. **音量范围**: volume值必须在0.0-2.0范围内\n4. **效果支持**: audio_effect需要是系统支持的音频效果名称\n5. **JSON格式**: 返回的infos是JSON字符串，需要解析后使用\n6. **网络访问**: 音频URL必须可以正常访问\n\n##工作流程\n\n1.验证必填参数（mp3_urls, timelines）\n2.检查数组长度匹配\n3.验证时间线参数有效性\n4.验证音量参数范围\n5. 为每个音频URL生成对应的音频信息\n6.应用音量和音频效果设置\n7.将信息转换为JSON字符串格式\n8. 返回处理结果\n\n##相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加音频](./add_audios.md)\n- [音频时间线](./audio_timelines.md)\n- [保存草稿](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./audio_infos.zh.md) | [English](./audio_infos.md)"
  },
  {
    "path": "docs/audio_timelines.md",
    "content": "# AUDIO_TIMELINES API Documentation\n\n## 🌐 Language Switch\n[中文版](./audio_timelines.zh.md) | [English](./audio_timelines.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/audio_timelines\n```\n\n## Function Description\n\nCalculate timelines based on audio file durations. This interface analyzes the duration information of input audio files and automatically calculates and generates appropriate timeline configurations for precise time arrangement of audio materials in video editing.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"links\": [\n    {\n      \"url\": \"https://assets.jcaigc.cn/audio1.mp3\",\n      \"duration\": 5000000\n    },\n    {\n      \"url\": \"https://assets.jcaigc.cn/audio2.mp3\",\n      \"duration\": 3000000\n    }\n  ]\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| links | array[object] |✅ | - | Audio link information array |\n\n### links Array Structure\n\nEach links array element contains the following fields:\n\n| Field | Type | Required | Default | Description |\n|-------|------|----------|---------|-------------|\n| url | string |✅ | - | Audio file URL address |\n| duration | number |✅ | - | Audio duration (microseconds) |\n\n### Parameter Details\n\n#### url\n- **Type**: string\n- **Description**: Complete URL address of the audio file\n- **Example**: \"https://assets.jcaigc.cn/background.mp3\"\n\n#### duration\n- **Type**: number\n- **Description**: Duration of the audio file in microseconds (1 second = 1,000,000 microseconds)\n- **Example**: 5000000 (5 seconds)\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"timelines\": [\n    {\n      \"start\": 0,\n      \"end\": 5000000\n    },\n    {\n      \"start\": 5000000,\n      \"end\": 8000000\n    }\n  ],\n  \"all_timelines\": [\n    {\n      \"start\": 0,\n      \"end\": 8000000\n    }\n  ]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| timelines | array | Segmented audio timeline array |\n| all_timelines | array | Complete audio timeline array |\n| start | number | Start time of time segment (microseconds) |\n| end | number | End time of time segment (microseconds) |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Audio Timeline Calculation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/audio_timelines \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"links\": [\n      {\n        \"url\": \"https://assets.jcaigc.cn/intro.mp3\",\n        \"duration\": 3000000\n      },\n      {\n        \"url\": \"https://assets.jcaigc.cn/bgm.mp3\",\n        \"duration\": 15000000\n      }\n    ]\n  }'\n```\n\n#### 2. Multiple Audio Timeline Calculation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/audio_timelines \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"links\": [\n      {\n        \"url\": \"https://assets.jcaigc.cn/opening.mp3\",\n        \"duration\": 2000000\n      },\n      {\n        \"url\": \"https://assets.jcaigc.cn/content.mp3\",\n        \"duration\": 10000000\n      },\n      {\n        \"url\": \"https://assets.jcaigc.cn/ending.mp3\",\n        \"duration\": 3000000\n      }\n    ]\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | links is required | Missing audio link parameter | Provide valid links array |\n| 400 | links format error | Invalid JSON format | Check JSON array format |\n| 400 | url is required | Missing audio URL | Provide URL for each audio |\n| 400 | duration is required | Missing audio duration | Provide duration for each audio |\n| 400 | duration must be greater than 0 | Invalid duration parameter | Use duration value greater than 0 |\n| 404 | Audio resource not found | Audio URL inaccessible | Check if audio URL is accessible |\n| 500 | Audio timeline calculation failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n2. **Parameter Requirements**: links array is required, and each element needs url and duration\n3. **Duration Accuracy**: Ensure the provided duration parameter accurately reflects the actual audio duration\n4. **Network Access**: Audio URLs must be accessible (for verification)\n5. **Continuity**: Timelines are arranged continuously in audio order without gaps\n6. **Total Duration**: The end value of complete timeline equals the sum of all audio durations\n\n## Workflow\n\n1. Validate required parameter (links)\n2. Parse audio information from each element in links array\n3. Validate url and duration parameters for each audio\n4. Calculate time segments for each audio in order\n5. Generate segmented audio timeline array\n6. Generate complete audio timeline array\n7. Return timeline configuration result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Timelines](./timelines.md)\n- [Audio Infos](./audio_infos.md)\n- [Generate Video](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### Language Switch\n[中文版](./audio_timelines.zh.md) | [English](./audio_timelines.md)"
  },
  {
    "path": "docs/audio_timelines.zh.md",
    "content": "# AUDIO_TIMELINES API 接口文档\n\n## 🌐 语言切换\n[中文版](./audio_timelines.zh.md) | [English](./audio_timelines.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/audio_timelines\n```\n\n## 功能描述\n\n根据音频文件时长计算时间线。该接口通过分析输入音频文件的时长信息，自动计算并生成合适的时间线配置，用于视频编辑中音频素材的精确时间安排。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"links\": [\n    {\n      \"url\": \"https://assets.jcaigc.cn/audio1.mp3\",\n      \"duration\": 5000000\n    },\n    {\n      \"url\": \"https://assets.jcaigc.cn/audio2.mp3\",\n      \"duration\": 3000000\n    }\n  ]\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 |必 | | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| links | array[object] |✅ | - |音链接信息数组 |\n\n### links 数组结构\n\n每个links数组元素包含以下字段：\n\n| 字段名 | 类型 |必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| url | string |✅ | - |音频文件URL地址 |\n| duration | number |✅ | - | 音频时长(微秒) |\n\n### 参数详解\n\n#### url\n- **类型**: string\n- **说明**: 音频文件的完整URL地址\n- **示例**: \"https://assets.jcaigc.cn/background.mp3\"\n\n#### duration\n- **类型**: number\n- **说明**: 音频文件的时长，单位为微秒（1秒 = 1,000,000微秒）\n- **示例**: 5000000 (5秒)\n\n##响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"timelines\": [\n    {\n      \"start\": 0,\n      \"end\": 5000000\n    },\n    {\n      \"start\": 5000000,\n      \"end\": 8000000\n    }\n  ],\n  \"all_timelines\": [\n    {\n      \"start\": 0,\n      \"end\": 8000000\n    }\n  ]\n}\n```\n\n###响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| timelines | array | 分段音频时间线数组 |\n| all_timelines | array |完整音频时间线数组 |\n| start | number | 时间段开始时间(微秒) |\n| end | number | 时间段结束时间(微秒) |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本音频时间线计算\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/audio_timelines \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"links\": [\n      {\n        \"url\": \"https://assets.jcaigc.cn/intro.mp3\",\n        \"duration\": 3000000\n      },\n      {\n        \"url\": \"https://assets.jcaigc.cn/bgm.mp3\",\n        \"duration\": 15000000\n      }\n    ]\n  }'\n```\n\n#### 2.多音频时间线计算\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/audio_timelines \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"links\": [\n      {\n        \"url\": \"https://assets.jcaigc.cn/opening.mp3\",\n        \"duration\": 2000000\n      },\n      {\n        \"url\": \"https://assets.jcaigc.cn/content.mp3\",\n        \"duration\": 10000000\n      },\n      {\n        \"url\": \"https://assets.jcaigc.cn/ending.mp3\",\n        \"duration\": 3000000\n      }\n    ]\n  }'\n```\n\n##错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | links是必填项 |缺少音频链接参数 | 提供有效的links数组 |\n| 400 | links格式错误 | JSON格式不正确 |检查JSON数组格式 |\n| 400 | url是必填项 | 音频URL缺失 | 为每个音频提供URL |\n| 400 | duration是必填项 |音频时长缺失 | 为每个音频提供时长 |\n| 400 | duration必须大于0 | 时长参数无效 | 使用大于0的时长值 |\n| 404 | 音频资源不存在 |音频URL无法访问 |检查音频URL是否可访问 |\n| 500 |音频时间线计算失败 |内部处理错误 |联技术支持 |\n\n## 注意事项\n\n1. **时间单位**:所有时间参数使用微秒（1秒 = 1,000,000微秒）\n2. **参数要求**: links数组为必填参数，且每个元素都需要url和duration\n3. **时长准确性**:确保提供的duration参数准确反映音频实际时长\n4. **网络访问**: 音频URL必须可以正常访问（用于验证）\n5. **连续性**: 时间线按音频顺序连续排列，无间隔\n6. **总时长**:完整时间线的end值等于所有音频时长之和\n\n##工作流程\n\n1.验证必填参数（links）\n2. 解析links数组中的每个音频信息\n3.验证每个音频的url和duration参数\n4.按顺序计算每个音频的时间段\n5. 生成分段音频时间线数组\n6. 生成完整音频时间线数组\n7. 返回时间线配置结果\n\n##相关接口\n\n- [创建草稿](./create_draft.md)\n- [创建时间线](./timelines.md)\n- [音频信息](./audio_infos.md)\n- [生成视频](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./audio_timelines.zh.md) | [English](./audio_timelines.md)"
  },
  {
    "path": "docs/caption_infos.md",
    "content": "# CAPTION_INFOS API Documentation\n\n## 🌐 Language Switch\n[中文版](./caption_infos.zh.md) | [English](./caption_infos.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/caption_infos\n```\n\n## Function Description\n\nGenerate caption information based on text and timelines. This interface converts text content and timeline configurations into the caption information format required by Jianying drafts, supporting keyword highlighting, animation effects, and transition settings.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"texts\": [\"Welcome to watch\", \"This is an example\"],\n  \"timelines\": [\n    {\"start\": 0, \"end\": 3000000},\n    {\"start\": 3000000, \"end\": 6000000}\n  ],\n  \"font_size\": 24,\n  \"keyword_color\": \"#FF0000\",\n  \"keyword_font_size\": 28,\n  \"keywords\": [\"example\"],\n  \"in_animation\": \"fade_in\",\n  \"in_animation_duration\": 500000,\n  \"loop_animation\": \"bounce\",\n  \"loop_animation_duration\": 1000000,\n  \"out_animation\": \"fade_out\",\n  \"out_animation_duration\": 500000,\n  \"transition\": \"cross_fade\",\n  \"transition_duration\": 300000\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| texts | array[string] |✅ | - | Text content array |\n| timelines | array[object] |✅ | - | Timeline configuration array |\n| font_size | number |❌ | 24 | Font size |\n| keyword_color | string |❌ | \"#FF0000\" | Keyword color |\n| keyword_font_size | number |❌ | 28 | Keyword font size |\n| keywords | array[string] |❌ | [] | Keyword array |\n| in_animation | string |❌ | None | Entrance animation effect |\n| in_animation_duration | number |❌ | 500000 | Entrance animation duration (microseconds) |\n| loop_animation | string |❌ | None | Loop animation effect |\n| loop_animation_duration | number |❌ | 1000000 | Loop animation duration (microseconds) |\n| out_animation | string |❌ | None | Exit animation effect |\n| out_animation_duration | number |❌ | 500000 | Exit animation duration (microseconds) |\n| transition | string |❌ | None | Transition effect |\n| transition_duration | number |❌ | 300000 | Transition duration (microseconds) |\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"infos\": \"[{\\\"text\\\":\\\"Welcome to watch\\\",\\\"start\\\":0,\\\"end\\\":3000000,\\\"duration\\\":5000000,\\\"font_size\\\":24,\\\"keyword_color\\\":\\\"#FF0000\\\",\\\"keyword_font_size\\\":28,\\\"keywords\\\":[\\\"watch\\\"],\\\"in_animation\\\":\\\"fade_in\\\",\\\"in_animation_duration\\\":500000,\\\"loop_animation\\\":\\\"bounce\\\",\\\"loop_animation_duration\\\":1000000,\\\"out_animation\\\":\\\"fade_out\\\",\\\"out_animation_duration\\\":500000,\\\"transition\\\":\\\"cross_fade\\\",\\\"transition_duration\\\":300000},{\\\"text\\\":\\\"This is an example\\\",\\\"start\\\":3000000,\\\"end\\\":6000000,\\\"duration\\\":5000000,\\\"font_size\\\":24,\\\"keyword_color\\\":\\\"#FF0000\\\",\\\"keyword_font_size\\\":28,\\\"keywords\\\":[\\\"example\\\"],\\\"in_animation\\\":\\\"fade_in\\\",\\\"in_animation_duration\\\":500000,\\\"loop_animation\\\":\\\"bounce\\\",\\\"loop_animation_duration\\\":1000000,\\\"out_animation\\\":\\\"fade_out\\\",\\\"out_animation_duration\\\":500000,\\\"transition\\\":\\\"cross_fade\\\",\\\"transition_duration\\\":300000}]\"\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| infos | string | Caption information JSON string |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Caption Information Generation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/caption_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"texts\": [\"Hello World\"],\n    \"timelines\": [{\"start\": 0, \"end\": 3000000}],\n    \"font_size\": 28\n  }'\n```\n\n#### 2. Caption Information with Highlighting\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/caption_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"texts\": [\"Welcome to watch our video\", \"This is a wonderful example\"],\n    \"timelines\": [{\"start\": 0, \"end\": 3000000}, {\"start\": 3000000, \"end\": 6000000}],\n    \"keyword_color\": \"#FF5500\",\n    \"keywords\": [\"wonderful\", \"video\"],\n    \"in_animation\": \"fade_in\",\n    \"loop_animation\": \"bounce\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | texts is required | Missing text content parameter | Provide valid text content array |\n| 400 | timelines is required | Missing timeline parameter | Provide valid timeline array |\n| 400 | Array length mismatch | texts and timelines array lengths don't match | Ensure both arrays have the same length |\n| 400 | font_size must be greater than 0 | Invalid font size parameter | Use font size value greater than 0 |\n| 500 | Caption information generation failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Array Matching**: texts and timelines array lengths must be the same\n2. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n3. **Keyword Matching**: Keywords in keywords array will be highlighted in text\n4. **Animation Effects**: Support entrance animation, loop animation, exit animation, and transition effects\n5. **Color Format**: keyword_color uses hexadecimal color format (e.g., \"#FF0000\")\n6. **Font Size**: Font size is in pixels\n\n## Workflow\n\n1. Validate required parameters (texts, timelines)\n2. Check array length matching\n3. Validate timeline parameter validity\n4. Set font and color parameters\n5. Apply animation effect parameters\n6. Generate corresponding caption information for each text content\n7. Convert information to JSON string format\n8. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Captions](./add_captions.md)\n- [Timelines](./timelines.md)\n- [Save Draft](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### Language Switch\n[中文版](./caption_infos.zh.md) | [English](./caption_infos.md)"
  },
  {
    "path": "docs/caption_infos.zh.md",
    "content": "# CAPTION_INFOS API 接口文档\n\n## 🌐 语言切换\n[中文版](./caption_infos.zh.md) | [English](./caption_infos.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/caption_infos\n```\n\n## 功能描述\n\n根据文本和时间线生成字幕信息。该接口将文本内容和时间线配置转换为剪映草稿所需的字幕信息格式，支持关键词高亮、动画效果和转场设置。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"texts\": [\"欢迎观看\", \"这是一个示例\"],\n  \"timelines\": [\n    {\"start\": 0, \"end\": 3000000},\n    {\"start\": 3000000, \"end\": 6000000}\n  ],\n  \"font_size\": 24,\n  \"keyword_color\": \"#FF0000\",\n  \"keyword_font_size\": 28,\n  \"keywords\": [\"示例\"],\n  \"in_animation\": \"fade_in\",\n  \"in_animation_duration\": 500000,\n  \"loop_animation\": \"bounce\",\n  \"loop_animation_duration\": 1000000,\n  \"out_animation\": \"fade_out\",\n  \"out_animation_duration\": 500000,\n  \"transition\": \"cross_fade\",\n  \"transition_duration\": 300000\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 |必 | | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| texts | array[string] |✅ | - | 文本内容数组 |\n| timelines | array[object] |✅ | - | 时间线配置数组 |\n| font_size | number |❌ | 24 | 字体大小 |\n| keyword_color | string |❌ | \"#FF0000\" | 关键词颜色 |\n| keyword_font_size | number | ❌ | 28 | 关键词字体大小 |\n| keywords | array[string] | ❌ | [] | 关键词数组 |\n| in_animation | string | ❌ | None |入动画效果 |\n| in_animation_duration | number | ❌ | 500000 |入场动画时长(微秒) |\n| loop_animation | string | ❌ | None |循动画效果 |\n| loop_animation_duration | number | ❌ | 1000000 |循动画动画时长(微秒) |\n| out_animation | string | ❌ | None |出场动画效果 |\n| out_animation_duration | number | ❌ | 500000 |出场动画时长(微秒) |\n| transition | string | ❌ | None |效果 |\n| transition_duration | number | ❌ | 300000 |转时长(微秒) |\n\n##响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"infos\": \"[{\\\"text\\\":\\\"欢迎观看\\\",\\\"start\\\":0,\\\"end\\\":3000000,\\\"duration\\\":5000000,\\\"font_size\\\":24,\\\"keyword_color\\\":\\\"#FF0000\\\",\\\"keyword_font_size\\\":28,\\\"keywords\\\":[\\\"观看\\\"],\\\"in_animation\\\":\\\"fade_in\\\",\\\"in_animation_duration\\\":500000,\\\"loop_animation\\\":\\\"bounce\\\",\\\"loop_animation_duration\\\":1000000,\\\"out_animation\\\":\\\"fade_out\\\",\\\"out_animation_duration\\\":500000,\\\"transition\\\":\\\"cross_fade\\\",\\\"transition_duration\\\":300000},{\\\"text\\\":\\\"这是一个示例\\\",\\\"start\\\":3000000,\\\"end\\\":6000000,\\\"duration\\\":5000000,\\\"font_size\\\":24,\\\"keyword_color\\\":\\\"#FF0000\\\",\\\"keyword_font_size\\\":28,\\\"keywords\\\":[\\\"示例\\\"],\\\"in_animation\\\":\\\"fade_in\\\",\\\"in_animation_duration\\\":500000,\\\"loop_animation\\\":\\\"bounce\\\",\\\"loop_animation_duration\\\":1000000,\\\"out_animation\\\":\\\"fade_out\\\",\\\"out_animation_duration\\\":500000,\\\"transition\\\":\\\"cross_fade\\\",\\\"transition_duration\\\":300000}]\"\n}\n```\n\n###响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| infos | string | 字幕信息JSON字符串 |\n\n###错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本字幕信息生成\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/caption_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"texts\": [\"Hello World\"],\n    \"timelines\": [{\"start\": 0, \"end\": 3000000}],\n    \"font_size\": 28\n  }'\n```\n\n#### 2.带高亮的字幕信息\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/caption_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"texts\": [\"欢迎观看我们的视频\", \"这是一个精彩示例\"],\n    \"timelines\": [{\"start\": 0, \"end\": 3000000}, {\"start\": 3000000, \"end\": 6000000}],\n    \"keyword_color\": \"#FF5500\",\n    \"keywords\": [\"精彩\", \"视频\"],\n    \"in_animation\": \"fade_in\",\n    \"loop_animation\": \"bounce\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | texts是必填项 |缺少文本内容参数 | 提供有效的文本内容数组 |\n| 400 | timelines是必填项 |缺少时间线参数 | 提供有效的时间线数组 |\n| 400 | 数组长度不匹配 | texts和timelines长度不一致 |确保两个数组长度相同 |\n| 400 | font_size必须大于0 | 字体大小参数无效 | 使用大于0的字体大小值 |\n| 500 | 字幕信息生成失败 |内部处理错误 |联技术支持 |\n\n## 注意事项\n\n1. **数组匹配**: texts和timelines数组长度必须相同\n2. **时间单位**:所有时间参数使用微秒（1秒 = 1,000,000微秒）\n3. **关键词匹配**: keywords数组中的关键词将在文本中高亮显示\n4. **动画效果**:支持入场动画、循环动画、出场动画和转场效果\n5. **颜色格式**: keyword_color使用十六进制颜色格式（如\"#FF0000\"）\n6. **字体大小**: 字体大小以像素为单位\n\n##工作流程\n\n1.验证必填参数（texts, timelines）\n2. 检查数组长度匹配\n3.验证时间线参数有效性\n4. 设置字体和颜色参数\n5.应用动画效果参数\n6. 为每个文本内容生成对应的字幕信息\n7. 将信息转换为JSON字符串格式\n8. 返回处理结果\n\n##相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加字幕](./add_captions.md)\n- [时间线](./timelines.md)\n- [保存草稿](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./caption_infos.zh.md) | [English](./caption_infos.md)"
  },
  {
    "path": "docs/create_draft.md",
    "content": "# CREATE_DRAFT API Documentation\n\n## 🌐 Language Switch\n[中文版](./create_draft.zh.md) | [English](./create_draft.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/create_draft\n```\n\n## Function Description\n\nCreate a Jianying draft. This interface is used to create a new Jianying draft project, allowing customization of video width and height. After successful creation, it returns the draft URL and help document URL, providing the foundation for subsequent video editing operations.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"width\": 1920,\n  \"height\": 1080\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| width | number | ❌ | 1920 | Video width (pixels), must be greater than or equal to 1 |\n| height | number | ❌ | 1080 | Video height (pixels), must be greater than or equal to 1 |\n\n### Parameter Details\n\n#### Size Parameters\n\n- **width**: Width of the draft video\n  - Minimum: 1 pixel\n  - Recommended common values: 1920, 1280, 720\n  - Supports custom sizes\n\n- **height**: Height of the draft video\n  - Minimum: 1 pixel\n  - Recommended common values: 1080, 720, 480\n  - Supports custom sizes\n\n#### Common Resolutions\n\n| Resolution Name | Width | Height | Application Scenario |\n|-----------------|-------|--------|---------------------|\n| 1080P | 1920 | 1080 | HD video production |\n| 720P | 1280 | 720 | SD video production |\n| 4K | 3840 | 2160 | Ultra HD video production |\n| Vertical Short Video | 1080 | 1920 | Mobile short videos |\n| Square | 1080 | 1080 | Social media content |\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"draft_url\": \"https://cm.jcaigc.cn/openapi/v1/get_draft?draft_id=2025092811473036584258\",\n  \"tip_url\": \"https://help.assets.jcaigc.cn/draft-usage\"\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| draft_url | string | Newly created draft URL, used for subsequent editing operations |\n| tip_url | string | Draft usage help documentation URL |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## 💻 Usage Examples\n\n### cURL Examples\n\n#### 1. Create Draft with Default Resolution\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/create_draft \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}'\n```\n\n#### 2. Create Draft with Custom Resolution\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/create_draft \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"width\": 1280,\n    \"height\": 720\n  }'\n```\n\n#### 3. Create Vertical Short Video Draft\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/create_draft \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"width\": 1080,\n    \"height\": 1920\n  }'\n```\n\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | width must be greater than or equal to 1 | Invalid width parameter | Provide a width value greater than or equal to 1 |\n| 400 | height must be greater than or equal to 1 | Invalid height parameter | Provide a height value greater than or equal to 1 |\n| 400 | Parameter type error | Parameter type is incorrect | Ensure width and height are numeric types |\n| 500 | Draft creation failed | Internal service error | Contact technical support |\n| 503 | Service unavailable | System maintenance | Retry later |\n\n## Notes\n\n1. **Parameter Validation**: width and height must be positive integers\n2. **Resolution Recommendation**: Suggest using common video resolutions to ensure compatibility\n3. **Performance Consideration**: Ultra-high resolution may affect subsequent processing performance\n4. **Storage Usage**: High-resolution drafts will occupy more storage space\n5. **URL Validity**: The returned draft_url has a certain validity period\n\n## Workflow\n\n1. Receive and validate request parameters\n2. Create draft basic structure\n3. Set canvas size\n4. Generate draft URL\n5. Return draft information and help document link\n\n## Related Interfaces\n\n- [Add Videos](./add_videos.md)\n- [Add Audios](./add_audios.md)\n- [Add Images](./add_images.md)\n- [Save Draft](./save_draft.md)\n- [Generate Video](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n---"
  },
  {
    "path": "docs/create_draft.zh.md",
    "content": "# CREATE_DRAFT API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/create_draft\n```\n\n## 功能描述\n\n创建剪映草稿。该接口用于创建一个新的剪映草稿项目，可以自定义视频的宽度和高度。创建成功后会返回草稿URL和帮助文档URL，为后续的视频编辑操作提供基础。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"width\": 1920,\n  \"height\": 1080\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| width | number | ❌ | 1920 | 视频宽度(像素)，必须大于等于1 |\n| height | number | ❌ | 1080 | 视频高度(像素)，必须大于等于1 |\n\n### 参数详解\n\n#### 尺寸参数\n\n- **width**: 草稿视频的宽度\n  - 最小值：1像素\n  - 建议常用值：1920、1280、720\n  - 支持自定义尺寸\n\n- **height**: 草稿视频的高度\n  - 最小值：1像素\n  - 建议常用值：1080、720、480\n  - 支持自定义尺寸\n\n#### 常用分辨率\n\n| 分辨率名称 | 宽度 | 高度 | 适用场景 |\n|------------|------|------|----------|\n| 1080P | 1920 | 1080 | 高清视频制作 |\n| 720P | 1280 | 720 | 标清视频制作 |\n| 4K | 3840 | 2160 | 超高清视频制作 |\n| 竖屏短视频 | 1080 | 1920 | 手机短视频 |\n| 正方形 | 1080 | 1080 | 社交媒体内容 |\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"draft_url\": \"https://cm.jcaigc.cn/openapi/v1/get_draft?draft_id=2025092811473036584258\",\n  \"tip_url\": \"https://help.assets.jcaigc.cn/draft-usage\"\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| draft_url | string | 新创建的草稿URL，用于后续的编辑操作 |\n| tip_url | string | 草稿使用帮助文档URL |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 💻 使用示例\n\n### cURL 示例\n\n#### 1. 创建默认分辨率草稿\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/create_draft \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}'\n```\n\n#### 2. 创建自定义分辨率草稿\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/create_draft \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"width\": 1280,\n    \"height\": 720\n  }'\n```\n\n#### 3. 创建竖屏短视频草稿\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/create_draft \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"width\": 1080,\n    \"height\": 1920\n  }'\n```\n\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | width必须大于等于1 | 宽度参数无效 | 提供大于等于1的宽度值 |\n| 400 | height必须大于等于1 | 高度参数无效 | 提供大于等于1的高度值 |\n| 400 | 参数类型错误 | 参数类型不正确 | 确保width和height为数字类型 |\n| 500 | 草稿创建失败 | 内部服务错误 | 联系技术支持 |\n| 503 | 服务不可用 | 系统维护中 | 稍后重试 |\n\n## 注意事项\n\n1. **参数验证**: width和height必须为正整数\n2. **分辨率建议**: 建议使用常见的视频分辨率以确保兼容性\n3. **性能考虑**: 超高分辨率可能影响后续处理性能\n4. **存储占用**: 高分辨率草稿会占用更多存储空间\n5. **URL有效期**: 返回的draft_url具有一定的有效期\n\n## 工作流程\n\n1. 接收并验证请求参数\n2. 创建草稿基础结构\n3. 设置画布尺寸\n4. 生成草稿URL\n5. 返回草稿信息和帮助文档链接\n\n## 相关接口\n\n- [添加视频](./add_videos.md)\n- [添加音频](./add_audios.md)\n- [添加图片](./add_images.md)\n- [保存草稿](./save_draft.md)\n- [生成视频](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./create_draft.zh.md) | [English](./create_draft.md)"
  },
  {
    "path": "docs/easy_create_material.md",
    "content": "# EASY_CREATE_MATERIAL API Documentation\n\n## 🌐 Language Switch\n[中文版](./easy_create_material.zh.md) | [English](./easy_create_material.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/easy_create_material\n```\n\n## Function Description\n\nAdd multiple types of material content to existing drafts, including audio, video, images, and text. This interface can add multiple media materials to drafts at once, automatically handling material duration, dimensions, and other properties, and intelligently managing different types of media tracks. It is one of the core interfaces for video creation.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"audio_url\": \"https://assets.jcaigc.cn/audio.mp3\",\n  \"text\": \"Hello World\",\n  \"img_url\": \"https://s.coze.cn/t/JTa5Ne6_liY/\",\n  \"video_url\": \"https://assets.jcaigc.cn/video.mp4\",\n  \"text_color\": \"#ff0000\",\n  \"font_size\": 20,\n  \"text_transform_y\": 100\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| draft_url | string |✅ | - | Complete URL of the target draft |\n| audio_url | string |✅ | - | Audio file URL, cannot be empty or null |\n| text | string |❌ | null | Text content to add |\n| img_url | string |❌ | null | Image file URL |\n| video_url | string |❌ | null | Video file URL |\n| text_color | string |❌ | \"#ffffff\" | Text color (hexadecimal format) |\n| font_size | integer |❌ | 15 | Font size |\n| text_transform_y | integer |❌ | 0 | Text Y-axis position offset |\n\n### Parameter Details\n\n#### Required Parameters\n\n- **draft_url**: Complete URL of the target draft\n  - Format: Must be a valid Jianying draft URL\n  - Example: `\"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"`\n\n- **audio_url**: Audio file URL\n  - Required parameter, cannot be empty or \"null\"\n  - Supported formats: MP3, WAV, AAC and other common audio formats\n  - Note: Audio is a required parameter, other material types are optional\n\n#### Optional Parameters\n\n- **text**: Text content to add\n  - Type: UTF-8 text\n  - Default: null (no text added)\n  - Note: If provided, text material will be added to the draft\n\n- **img_url**: Image file URL\n  - Type: Valid image URL\n  - Default: null (no image added)\n  - Supported formats: JPEG, PNG, GIF and other common image formats\n  - Note: If provided, image material will be added to the draft\n\n- **video_url**: Video file URL\n  - Type: Valid video URL\n  - Default: null (no video added)\n  - Supported formats: MP4, AVI, MOV and other common video formats\n  - Note: If provided, video material will be added to the draft\n\n- **text_color**: Text color\n  - Type: Hexadecimal color code\n  - Default: `\"#ffffff\"` (white)\n  - Note: Set text color using standard hexadecimal format (e.g. #ffffff, #000000)\n\n- **font_size**: Font size\n  - Type: Integer\n  - Default: 15\n  - Note: Set text font size, recommended range 10-50\n\n- **text_transform_y**: Text Y-axis position offset\n  - Type: Integer\n  - Default: 0\n  - Note: Adjust vertical position of text in the frame, unit pixels\n\n#### Material Processing Rules\n\n- **Audio Processing**:\n  - Automatically parse audio duration\n  - Add to audio track\n  - Support multiple audio formats\n\n- **Video Processing**:\n  - Fixed display duration 5 seconds\n  - Maintain original resolution ratio\n  - Add to video track\n\n- **Image Processing**:\n  - Default display duration 3 seconds\n  - Automatically get image dimensions\n  - Add to image track\n\n- **Text Processing**:\n  - Default display duration 5 seconds\n  - Support color and font size settings\n  - Adjustable vertical position\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| draft_url | string | Updated draft URL |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Add All Types of Materials\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/easy_create_material \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"audio_url\": \"https://assets.jcaigc.cn/audio.mp3\",\n    \"text\": \"Hello World\",\n    \"img_url\": \"https://s.coze.cn/t/JTa5Ne6_liY/\",\n    \"video_url\": \"https://assets.jcaigc.cn/video.mp4\",\n    \"text_color\": \"#ff0000\",\n    \"font_size\": 20,\n    \"text_transform_y\": 100\n  }'\n```\n\n#### 2. Add Only Audio and Text\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/easy_create_material \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"audio_url\": \"https://assets.jcaigc.cn/background_music.mp3\",\n    \"text\": \"Welcome to watch\",\n    \"text_color\": \"#0066ff\",\n    \"font_size\": 18\n  }'\n```\n\n#### 3. Minimal Request (Audio Only)\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/easy_create_material \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"audio_url\": \"https://assets.jcaigc.cn/audio.wav\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | draft_url is required | Missing draft URL parameter | Provide a valid draft_url |\n| 400 | audio_url is required | Missing audio URL parameter | Provide a valid audio_url |\n| 400 | Invalid draft information, please check draft parameters | Draft parameter validation failed | Check if draft parameters meet requirements |\n| 404 | Draft does not exist | Specified draft URL invalid | Check if draft URL is correct |\n| 500 | Material creation failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Audio Required**: audio_url is a required parameter, cannot be empty or null\n2. **Material URLs**: Material URLs must be publicly accessible, HTTPS protocol recommended\n3. **Text Color**: text_color uses standard hexadecimal format (e.g. #ffffff, #000000)\n4. **Font Size**: font_size recommended range 10-50\n5. **Position Offset**: text_transform_y used to adjust vertical position of text in the frame\n6. **Duration Settings**: Different material types have different default display durations\n   - Audio: Automatically get original duration\n   - Video: Fixed 5 seconds\n   - Image: Default 3 seconds\n   - Text: Default 5 seconds\n7. **Track Management**: System automatically creates tracks for different types of materials\n8. **Performance Consideration**: Avoid adding large numbers of materials simultaneously\n\n## Workflow\n\n1. Validate required parameters (draft_url, audio_url)\n2. Get draft from cache\n3. Create audio track and add audio material\n4. If provided, create video track and add video material\n5. If provided, create image track and add image material\n6. If provided, create text track and add text material\n7. Save draft\n8. Return updated draft URL\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Videos](./add_videos.md)\n- [Add Audios](./add_audios.md)\n- [Add Images](./add_images.md)\n- [Save Draft](./save_draft.md)\n- [Generate Video](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/easy_create_material.zh.md",
    "content": "# EASY_CREATE_MATERIAL API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/easy_create_material\n```\n\n## 功能描述\n\n在现有草稿中添加多种类型的素材内容，包括音频、视频、图片和文字。该接口可以一次性向草稿添加多种媒体素材，自动处理素材的时长、尺寸等属性，并智能管理不同类型的媒体轨道。是视频创作的核心接口之一。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"audio_url\": \"https://assets.jcaigc.cn/audio.mp3\",\n  \"text\": \"Hello World\",\n  \"img_url\": \"https://s.coze.cn/t/JTa5Ne6_liY/\",\n  \"video_url\": \"https://assets.jcaigc.cn/video.mp4\",\n  \"text_color\": \"#ff0000\",\n  \"font_size\": 20,\n  \"text_transform_y\": 100\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| draft_url | string | ✅ | - | 目标草稿的完整URL |\n| audio_url | string | ✅ | - | 音频文件URL，不能为空或null |\n| text | string | ❌ | null | 要添加的文字内容 |\n| img_url | string | ❌ | null | 图片文件URL |\n| video_url | string | ❌ | null | 视频文件URL |\n| text_color | string | ❌ | \"#ffffff\" | 文字颜色（十六进制格式） |\n| font_size | integer | ❌ | 15 | 字体大小 |\n| text_transform_y | integer | ❌ | 0 | 文字Y轴位置偏移 |\n\n### 参数详解\n\n#### 必填参数\n\n- **draft_url**: 目标草稿的完整URL\n  - 格式：必须是有效的剪映草稿URL\n  - 示例：`\"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"`\n\n- **audio_url**: 音频文件URL\n  - 必填参数，不能为空或\"null\"\n  - 支持格式：MP3, WAV, AAC等常见音频格式\n  - 说明：音频是必填参数，其他素材类型都是可选的\n\n#### 可选参数\n\n- **text**: 要添加的文字内容\n  - 类型：UTF-8文本\n  - 默认值：null（不添加文字）\n  - 说明：如果提供，将添加文字素材到草稿中\n\n- **img_url**: 图片文件URL\n  - 类型：有效的图片URL\n  - 默认值：null（不添加图片）\n  - 支持格式：JPEG, PNG, GIF等常见图片格式\n  - 说明：如果提供，将添加图片素材到草稿中\n\n- **video_url**: 视频文件URL\n  - 类型：有效的视频URL\n  - 默认值：null（不添加视频）\n  - 支持格式：MP4, AVI, MOV等常见视频格式\n  - 说明：如果提供，将添加视频素材到草稿中\n\n- **text_color**: 文字颜色\n  - 类型：十六进制颜色代码\n  - 默认值：`\"#ffffff\"`（白色）\n  - 说明：设置文字颜色，使用标准十六进制格式（如 #ffffff、#000000）\n\n- **font_size**: 字体大小\n  - 类型：整数\n  - 默认值：15\n  - 说明：设置文字字体大小，建议范围10-50\n\n- **text_transform_y**: 文字Y轴位置偏移\n  - 类型：整数\n  - 默认值：0\n  - 说明：调整文字在画面中的垂直位置，单位为像素\n\n#### 素材处理规则\n\n- **音频处理**：\n  - 自动解析音频时长\n  - 添加到音频轨道\n  - 支持多种音频格式\n\n- **视频处理**：\n  - 固定显示时长5秒\n  - 保持原始分辨率比例\n  - 添加到视频轨道\n\n- **图片处理**：\n  - 默认显示时长3秒\n  - 自动获取图片尺寸\n  - 添加到图片轨道\n\n- **文字处理**：\n  - 默认显示时长5秒\n  - 支持颜色和字体大小设置\n  - 可调整垂直位置\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| draft_url | string | 更新后的草稿URL |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 添加所有类型素材\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/easy_create_material \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"audio_url\": \"https://assets.jcaigc.cn/audio.mp3\",\n    \"text\": \"Hello World\",\n    \"img_url\": \"https://s.coze.cn/t/JTa5Ne6_liY/\",\n    \"video_url\": \"https://assets.jcaigc.cn/video.mp4\",\n    \"text_color\": \"#ff0000\",\n    \"font_size\": 20,\n    \"text_transform_y\": 100\n  }'\n```\n\n#### 2. 仅添加音频和文字\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/easy_create_material \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"audio_url\": \"https://assets.jcaigc.cn/background_music.mp3\",\n    \"text\": \"欢迎观看\",\n    \"text_color\": \"#0066ff\",\n    \"font_size\": 18\n  }'\n```\n\n#### 3. 最简请求（仅音频）\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/easy_create_material \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\",\n    \"audio_url\": \"https://assets.jcaigc.cn/audio.wav\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | draft_url是必填项 | 缺少草稿URL参数 | 提供有效的draft_url |\n| 400 | audio_url是必填项 | 缺少音频URL参数 | 提供有效的audio_url |\n| 400 | 无效的草稿信息，请检查草稿参数是否正确 | 草稿参数校验失败 | 检查草稿参数是否符合要求 |\n| 404 | 草稿不存在 | 指定的草稿URL无效 | 检查草稿URL是否正确 |\n| 500 | 素材创建失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **音频必填**: audio_url是必填参数，不能为空或null\n2. **素材URL**: 素材URL必须可公开访问，建议使用HTTPS协议\n3. **文字颜色**: text_color使用标准十六进制格式（如 #ffffff、#000000）\n4. **字体大小**: font_size建议范围10-50\n5. **位置偏移**: text_transform_y用于调整文字在画面中的垂直位置\n6. **时长设置**: 不同素材类型有不同的默认显示时长\n   - 音频：自动获取原始时长\n   - 视频：固定5秒\n   - 图片：默认3秒\n   - 文字：默认5秒\n7. **轨道管理**: 系统自动创建不同类型素材的轨道\n8. **性能考虑**: 避免同时添加大量素材\n\n## 工作流程\n\n1. 验证必填参数（draft_url, audio_url）\n2. 从缓存中获取草稿\n3. 创建音频轨道并添加音频素材\n4. 如果提供，创建视频轨道并添加视频素材\n5. 如果提供，创建图片轨道并添加图片素材\n6. 如果提供，创建文字轨道并添加文字素材\n7. 保存草稿\n8. 返回更新后的草稿URL\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加视频](./add_videos.md)\n- [添加音频](./add_audios.md)\n- [添加图片](./add_images.md)\n- [保存草稿](./save_draft.md)\n- [生成视频](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/effect_infos.md",
    "content": "# EFFECT_INFOS API Documentation\n\n## 🌐 Language Switch\n[中文版](./effect_infos.zh.md) | [English](./effect_infos.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/effect_infos\n```\n\n## Function Description\n\nGenerate effect information based on effect names and timelines. This interface converts effect names and timeline configurations into the effect information format required by Jianying drafts.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"effects\": [\"blur\", \"vignette\"],\n  \"timelines\": [\n    {\"start\": 0, \"end\": 3000000},\n    {\"start\": 3000000, \"end\": 6000000}\n  ]\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| effects | array[string] |✅ | - | Effect name array |\n| timelines | array[object] |✅ | - | Timeline configuration array |\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"infos\": \"[{\\\"effect\\\":\\\"blur\\\",\\\"start\\\":0,\\\"end\\\":3000000,\\\"duration\\\":5000000},{\\\"effect\\\":\\\"vignette\\\",\\\"start\\\":3000000,\\\"end\\\":6000000,\\\"duration\\\":5000000}]\"\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| infos | string | Effect information JSON string |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Effect Information Generation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/effect_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"effects\": [\"blur\"],\n    \"timelines\": [{\"start\": 0, \"end\": 5000000}]\n  }'\n```\n\n#### 2. Multiple Effect Information Generation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/effect_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"effects\": [\"blur\", \"vignette\", \"sepia\"],\n    \"timelines\": [{\"start\": 0, \"end\": 2000000}, {\"start\": 2000000, \"end\": 4000000}, {\"start\": 4000000, \"end\": 6000000}]\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | effects is required | Missing effect name parameter | Provide valid effect name array |\n| 400 | timelines is required | Missing timeline parameter | Provide valid timeline array |\n| 400 | Array length mismatch | effects and timelines array lengths don't match | Ensure both arrays have the same length |\n| 500 | Effect information generation failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Array Matching**: effects and timelines array lengths must be the same\n2. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n3. **Effect Names**: Need to use system-supported effect names\n4. **Continuity**: Effects are applied in timeline order\n\n## Workflow\n\n1. Validate required parameters (effects, timelines)\n2. Check array length matching\n3. Validate timeline parameter validity\n4. Generate corresponding effect information for each effect name\n5. Convert information to JSON string format\n6. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Effects](./add_effects.md)\n- [Timelines](./timelines.md)\n- [Save Draft](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### Language Switch\n[中文版](./effect_infos.zh.md) | [English](./effect_infos.md)"
  },
  {
    "path": "docs/effect_infos.zh.md",
    "content": "# EFFECT_INFOS API 接口文档\n\n## 🌐 语言切换\n[中文版](./effect_infos.zh.md) | [English](./effect_infos.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/effect_infos\n```\n\n## 功能描述\n\n根据特效名称和时间线生成特效信息。该接口将特效名称和时间线配置转换为剪映草稿所需的特效信息格式。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"effects\": [\"blur\", \"vignette\"],\n  \"timelines\": [\n    {\"start\": 0, \"end\": 3000000},\n    {\"start\": 3000000, \"end\": 6000000}\n  ]\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 |必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| effects | array[string] |✅ | - |特名称数组 |\n| timelines | array[object] |✅ | - | 时间线配置数组 |\n\n##响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"infos\": \"[{\\\"effect\\\":\\\"blur\\\",\\\"start\\\":0,\\\"end\\\":3000000,\\\"duration\\\":5000000},{\\\"effect\\\":\\\"vignette\\\",\\\"start\\\":3000000,\\\"end\\\":6000000,\\\"duration\\\":5000000}]\"\n}\n```\n\n###响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| infos | string |特效信息JSON字符串 |\n\n###错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本特效信息生成\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/effect_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"effects\": [\"blur\"],\n    \"timelines\": [{\"start\": 0, \"end\": 5000000}]\n  }'\n```\n\n#### 2.多特效信息生成\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/effect_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"effects\": [\"blur\", \"vignette\", \"sepia\"],\n    \"timelines\": [{\"start\": 0, \"end\": 2000000}, {\"start\": 2000000, \"end\": 4000000}, {\"start\": 4000000, \"end\": 6000000}]\n  }'\n```\n\n##错误码说明\n\n|错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | effects是必填项 |缺少特效名称参数 | 提供有效的特效名称数组 |\n| 400 | timelines是必填项 |缺少时间线参数 | 提供有效的时间线数组 |\n| 400 | 数组长度不匹配 | effects和timelines长度不一致 |确保两个数组长度相同 |\n| 500 |特效信息生成失败 |内部处理错误 |联技术支持 |\n\n## 注意事项\n\n1. **数组匹配**: effects和timelines数组长度必须相同\n2. **时间单位**:所有时间参数使用微秒（1秒 = 1,000,000微秒）\n3. **特效名称**:需要使用系统支持的特效名称\n4. **连续性**:特效按时间线顺序应用\n\n##工作流程\n\n1.验证必填参数（effects, timelines）\n2.检查数组长度匹配\n3.验证时间线参数有效性\n4. 为每个特效名称生成对应的特效信息\n5.将信息转换为JSON字符串格式\n6. 返回处理结果\n\n##相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加特效](./add_effects.md)\n- [时间线](./timelines.md)\n- [保存草稿](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./effect_infos.zh.md) | [English](./effect_infos.md)"
  },
  {
    "path": "docs/filter_infos.md",
    "content": "# FILTER_INFOS API Documentation\n\n## 🌐 Language Switch\n[中文版](./filter_infos.zh.md) | [English](./filter_infos.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/filter_infos\n```\n\n## Function Description\n\nGenerate filter information based on filter names, timelines, and intensities. This interface converts filter names and timeline configurations into the filter information format required by Jianying drafts.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"filters\": [\"复古\", \"黑白\"],\n  \"timelines\": [\n    {\"start\": 0, \"end\": 3000000},\n    {\"start\": 3000000, \"end\": 6000000}\n  ],\n  \"intensities\": [80, 100]\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| filters | array[string] |✅ | - | Filter name array |\n| timelines | array[object] |✅ | - | Timeline configuration array |\n| intensities | array[number] | ❌ | 100 | Filter intensity array (0-100), optional, defaults to 100 for all |\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"infos\": \"[{\\\"filter_title\\\":\\\"复古\\\",\\\"start\\\":0,\\\"end\\\":3000000,\\\"intensity\\\":80},{\\\"filter_title\\\":\\\"黑白\\\",\\\"start\\\":3000000,\\\"end\\\":6000000,\\\"intensity\\\":100}]\"\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| infos | string | Filter information JSON string |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Filter Information Generation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/filter_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"filters\": [\"复古\"],\n    \"timelines\": [{\"start\": 0, \"end\": 5000000}]\n  }'\n```\n\n#### 2. Filter Information with Custom Intensity\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/filter_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"filters\": [\"黑白\"],\n    \"timelines\": [{\"start\": 0, \"end\": 5000000}],\n    \"intensities\": [60]\n  }'\n```\n\n#### 3. Multiple Filter Information Generation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/filter_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"filters\": [\"复古\", \"黑白\", \"电影感\"],\n    \"timelines\": [{\"start\": 0, \"end\": 2000000}, {\"start\": 2000000, \"end\": 4000000}, {\"start\": 4000000, \"end\": 6000000}],\n    \"intensities\": [80, 100, 90]\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | filters is required | Missing filter name parameter | Provide valid filter name array |\n| 400 | timelines is required | Missing timeline parameter | Provide valid timeline array |\n| 400 | Array length mismatch | filters, timelines, and intensities array lengths don't match | Ensure all arrays have the same length |\n| 400 | Intensity out of range | Intensity must be between 0-100 | Provide valid intensity values |\n| 500 | Filter information generation failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Array Matching**: filters and timelines array lengths must be the same; intensities length should also match if provided\n2. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n3. **Filter Names**: Need to use system-supported filter names\n4. **Intensity Range**: Intensity values must be between 0-100, default is 100\n5. **Continuity**: Filters are applied in timeline order\n\n## Workflow\n\n1. Validate required parameters (filters, timelines)\n2. Check array length matching\n3. Validate timeline parameter validity\n4. Validate intensity range (if provided)\n5. Generate corresponding filter information for each filter name\n6. Convert information to JSON string format\n7. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Filters](./add_filters.md)\n- [Timelines](./timelines.md)\n- [Save Draft](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### Language Switch\n[中文版](./filter_infos.zh.md) | [English](./filter_infos.md)\n"
  },
  {
    "path": "docs/filter_infos.zh.md",
    "content": "# FILTER_INFOS API 接口文档\n\n## 🌐 语言切换\n[中文版](./filter_infos.zh.md) | [English](./filter_infos.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/filter_infos\n```\n\n## 功能描述\n\n根据滤镜名称、时间线和强度生成滤镜信息。该接口将滤镜名称和时间线配置转换为剪映草稿所需的滤镜信息格式。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"filters\": [\"复古\", \"黑白\"],\n  \"timelines\": [\n    {\"start\": 0, \"end\": 3000000},\n    {\"start\": 3000000, \"end\": 6000000}\n  ],\n  \"intensities\": [80, 100]\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| filters | array[string] | ✅ | - | 滤镜名称数组 |\n| timelines | array[object] | ✅ | - | 时间线配置数组 |\n| intensities | array[number] | ❌ | 100 | 滤镜强度数组(0-100)，可选，默认全部为100 |\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"infos\": \"[{\\\"filter_title\\\":\\\"复古\\\",\\\"start\\\":0,\\\"end\\\":3000000,\\\"intensity\\\":80},{\\\"filter_title\\\":\\\"黑白\\\",\\\"start\\\":3000000,\\\"end\\\":6000000,\\\"intensity\\\":100}]\"\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| infos | string | 滤镜信息JSON字符串 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本滤镜信息生成\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/filter_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"filters\": [\"复古\"],\n    \"timelines\": [{\"start\": 0, \"end\": 5000000}]\n  }'\n```\n\n#### 2. 自定义强度的滤镜信息生成\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/filter_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"filters\": [\"黑白\"],\n    \"timelines\": [{\"start\": 0, \"end\": 5000000}],\n    \"intensities\": [60]\n  }'\n```\n\n#### 3. 多滤镜信息生成\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/filter_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"filters\": [\"复古\", \"黑白\", \"电影感\"],\n    \"timelines\": [{\"start\": 0, \"end\": 2000000}, {\"start\": 2000000, \"end\": 4000000}, {\"start\": 4000000, \"end\": 6000000}],\n    \"intensities\": [80, 100, 90]\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | filters是必填项 | 缺少滤镜名称参数 | 提供有效的滤镜名称数组 |\n| 400 | timelines是必填项 | 缺少时间线参数 | 提供有效的时间线数组 |\n| 400 | 数组长度不匹配 | filters、timelines、intensities长度不一致 | 确保所有数组长度相同 |\n| 400 | 强度范围无效 | intensity必须在0-100之间 | 提供有效的强度值 |\n| 500 | 滤镜信息生成失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **数组匹配**: filters和timelines数组长度必须相同；如果提供intensities，长度也应相同\n2. **时间单位**: 所有时间参数使用微秒（1秒 = 1,000,000微秒）\n3. **滤镜名称**: 需要使用系统支持的滤镜名称\n4. **强度范围**: 强度值必须在0-100之间，默认为100\n5. **连续性**: 滤镜按时间线顺序应用\n\n## 工作流程\n\n1. 验证必填参数（filters, timelines）\n2. 检查数组长度匹配\n3. 验证时间线参数有效性\n4. 验证强度范围（如果提供）\n5. 为每个滤镜名称生成对应的滤镜信息\n6. 将信息转换为JSON字符串格式\n7. 返回处理结果\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加滤镜](./add_filters.md)\n- [时间线](./timelines.md)\n- [保存草稿](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./filter_infos.zh.md) | [English](./filter_infos.md)\n"
  },
  {
    "path": "docs/gen_video.md",
    "content": "# GEN_VIDEO API Documentation\n\n## 🌐 Language Switch\n[中文版](./gen_video.zh.md) | [English](./gen_video.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/gen_video\n```\n\n## Function Description\n\nSubmit video generation task. This interface uses asynchronous processing mode, immediately returning task submission status, with video generation performed in the background. Supports task queuing to ensure system stability.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| draft_url | string | ✅ | - | Complete URL of the target draft |\n\n### Parameter Details\n\n#### Draft URL Parameter\n\n- **draft_url**: Complete URL address of the draft\n  - Format: `https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id={draft_ID}`\n  - Example: `\"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"`\n  - Acquisition Method: Obtained via [Create Draft](./create_draft.md) or [Save Draft](./save_draft.md) interfaces\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"message\": \"Video generation task submitted, please use draft_url to check progress\"\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| message | string | Response message |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Video Generation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/gen_video \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | draft_url is required | Missing draft URL parameter | Provide a valid draft_url |\n| 400 | Invalid draft_url format | URL format is incorrect | Check if URL format is correct |\n| 404 | Draft does not exist | Specified draft cannot be found | Confirm that draft URL is correct and exists |\n| 400 | Draft content is empty | Draft contains no exportable content | Ensure draft contains video, audio or image materials |\n| 400 | Material inaccessible | Material files in draft cannot be downloaded | Check if material URLs are valid |\n| 500 | Video rendering failed | Error occurred during video processing | Check draft content or contact technical support |\n| 500 | Audio processing failed | Error occurred during audio mixing | Check audio format or contact technical support |\n| 500 | Encoding failed | Final video encoding failed | Contact technical support |\n| 503 | Service busy | Rendering server overloaded | Retry later |\n| 504 | Processing timeout | Video generation timed out | Simplify draft content or retry later |\n| 500 | Video generation task submission failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Processing Time**: Video generation is time-consuming, may take minutes to tens of minutes\n2. **File Size**: Draft complexity and number of materials affect processing time\n3. **Network Stability**: Ensure material URLs are stably accessible\n4. **Timeout Settings**: Suggest setting longer timeout or using polling mechanism\n5. **Concurrency Limit**: Avoid generating large numbers of videos simultaneously\n6. **Storage Space**: Generated video files may be large, pay attention to storage space\n7. **URL Validity**: Generated video_url may have time-based restrictions\n8. **System Requirements**: Video generation feature only available on Windows systems\n\n## Workflow\n\n1. Validate draft_url parameter\n2. Parse draft configuration file\n3. Download all required material files\n4. Arrange and process materials according to timeline\n5. Apply visual effects and transitions\n6. Mix audio tracks\n7. Render final video\n8. Encode and upload video file\n9. Return video URL\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Save Draft](./save_draft.md)\n- [Add Videos](./add_videos.md)\n- [Add Audios](./add_audios.md)\n- [Add Images](./add_images.md)\n- [Get Draft](./get_draft.md)\n- [Query Video Generation Status](./gen_video_status.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### Language Switch\n[中文版](./gen_video.zh.md) | [English](./gen_video.md)"
  },
  {
    "path": "docs/gen_video.zh.md",
    "content": "# GEN_VIDEO API 接口文档\n\n## 🌐 语言切换\n[中文版](./gen_video.zh.md) | [English](./gen_video.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/gen_video\n```\n\n## 功能描述\n\n提交视频生成任务。该接口采用异步处理模式，立即返回任务提交状态，视频生成在后台进行。支持任务排队，确保系统稳定性。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| draft_url | string | ✅ | - | 目标草稿的完整URL |\n\n### 参数详解\n\n#### 草稿URL参数\n\n- **draft_url**: 草稿的完整URL地址\n  - 格式：`https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id={草稿ID}`\n  - 示例：`\"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"`\n  - 获取方式：通过[创建草稿](./create_draft.md)或[保存草稿](./save_draft.md)接口获取\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"message\": \"视频生成任务已提交，请使用draft_url查询进度\"\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| message | string | 响应消息 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本视频生成\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/gen_video \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | draft_url是必填项 | 缺少草稿URL参数 | 提供有效的draft_url |\n| 400 | draft_url格式无效 | URL格式不正确 | 检查URL格式是否正确 |\n| 404 | 草稿不存在 | 指定的草稿无法找到 | 确认草稿URL是否正确且存在 |\n| 400 | 草稿内容为空 | 草稿中没有可导出的内容 | 确保草稿包含视频、音频或图片素材 |\n| 400 | 素材无法访问 | 草稿中的素材文件无法下载 | 检查素材URL是否有效 |\n| 500 | 视频渲染失败 | 视频处理过程中出错 | 检查草稿内容或联系技术支持 |\n| 500 | 音频处理失败 | 音频混合过程中出错 | 检查音频格式或联系技术支持 |\n| 500 | 编码失败 | 最终视频编码失败 | 联系技术支持 |\n| 503 | 服务繁忙 | 渲染服务器负载过高 | 稍后重试 |\n| 504 | 处理超时 | 视频生成超时 | 简化草稿内容或稍后重试 |\n| 500 | 视频生成任务提交失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **处理时间**: 视频生成是耗时操作，可能需要几分钟到几十分钟\n2. **文件大小**: 草稿复杂度和素材数量会影响处理时间\n3. **网络稳定**: 确保素材URL可以稳定访问\n4. **超时设置**: 建议设置较长的超时时间或使用轮询机制\n5. **并发限制**: 避免同时生成大量视频\n6. **存储空间**: 生成的视频文件可能很大，注意存储空间\n7. **URL有效期**: 生成的video_url可能有时效性限制\n8. **系统要求**: 视频生成功能仅在Windows系统上可用\n\n## 工作流程\n\n1. 验证draft_url参数\n2. 解析草稿配置文件\n3. 下载所有必需的素材文件\n4. 按时间轴排列和处理素材\n5. 应用视觉效果和转场\n6. 混合音频轨道\n7. 渲染最终视频\n8. 编码并上传视频文件\n9. 返回视频URL\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n- [保存草稿](./save_draft.md)\n- [添加视频](./add_videos.md)\n- [添加音频](./add_audios.md)\n- [添加图片](./add_images.md)\n- [获取草稿](./get_draft.md)\n- [查询视频生成状态](./gen_video_status.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./gen_video.zh.md) | [English](./gen_video.md)"
  },
  {
    "path": "docs/gen_video_status.md",
    "content": "# GEN_VIDEO_STATUS API Documentation\n\n## 🌐 Language Switch\n[中文版](./gen_video_status.zh.md) | [English](./gen_video_status.md)\n\n## Interface Information\n\n```bash\nPOST /openapi/capcut-mate/v1/gen_video_status\n```\n\n## Function Description\n\nQuery the status and progress of video generation tasks. Used together with the [gen_video](./gen_video.md) interface to track the execution of video generation tasks in real-time, including task status, progress percentage, completion results, and other information.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| draft_url | string | ✅ | - | Draft URL, same as the URL used when submitting the task |\n\n### Parameter Details\n\n#### Draft URL Parameter\n\n- **draft_url**: Complete URL of the draft, used to identify the video generation task to query status for\n  - Format: Must be a valid URL format\n  - Example: `\"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"`\n  - Acquisition Method: draft_url returned after submitting task via [gen_video](./gen_video.md) interface\n\n## Response Format\n\n### Success Response (200)\n\n#### Task Waiting\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"status\": \"pending\",\n  \"progress\": 0,\n  \"video_url\": \"\",\n  \"error_message\": \"\",\n  \"created_at\": \"2024-09-24T10:30:00.000Z\",\n  \"started_at\": null,\n  \"completed_at\": null\n}\n```\n\n#### Task Processing\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\", \n  \"status\": \"processing\",\n  \"progress\": 65,\n  \"video_url\": \"\",\n  \"error_message\": \"\",\n  \"created_at\": \"2024-09-24T10:30:00.000Z\",\n  \"started_at\": \"2024-09-24T10:30:05.000Z\",\n  \"completed_at\": null\n}\n```\n\n#### Task Completed\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"status\": \"completed\",\n  \"progress\": 100,\n  \"video_url\": \"https://video-output.assets.jcaigc.cn/generated/video_abc123def456ghi789.mp4\",\n  \"error_message\": \"\",\n  \"created_at\": \"2024-09-24T10:30:00.000Z\",\n  \"started_at\": \"2024-09-24T10:30:05.000Z\",\n  \"completed_at\": \"2024-09-24T10:35:30.000Z\"\n}\n```\n\n#### Task Failed\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"status\": \"failed\",\n  \"progress\": 0,\n  \"video_url\": \"\",\n  \"error_message\": \"Export draft failed: Jianying export ended but target file was not generated, please check disk space or Jianying version\",\n  \"created_at\": \"2024-09-24T10:30:00.000Z\",\n  \"started_at\": \"2024-09-24T10:30:05.000Z\",\n  \"completed_at\": \"2024-09-24T10:32:15.000Z\"\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| draft_url | string | Draft URL |\n| status | string | Task status: pending/processing/completed/failed |\n| progress | integer | Task progress (0-100) |\n| video_url | string | Generated video URL (only has value in completed status) |\n| error_message | string | Error message (only has value in failed status) |\n| created_at | string | Task creation time (ISO format) |\n| started_at | string|null | Task start time (ISO format) |\n| completed_at | string|null | Task completion time (ISO format) |\n\n### Error Response (4xx/5xx)\n\n#### 404 Not Found - Task Does Not Exist\n\n```json\n{\n  \"detail\": \"Video generation task not found\"\n}\n```\n\n#### 500 Internal Server Error - Query Failed\n\n```json\n{\n  \"detail\": \"Video task status query failed\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Query Task Status\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/gen_video_status \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | draft_url is required | Missing draft URL parameter | Provide a valid draft_url |\n| 400 | Invalid draft URL | draft_url format is incorrect | Check if draft URL format is correct |\n| 404 | Video generation task not found | Specified draft URL has no corresponding video generation task | Confirm if task has been submitted via gen_video interface |\n| 500 | Video task status query failed | Internal processing error | Retry later or contact technical support |\n\n## Notes\n\n1. **Polling Interval**: Suggest querying task status every 5-10 seconds\n2. **Timeout Settings**: Suggest setting total timeout time (e.g. 10 minutes)\n3. **Status Handling**: Provide different user feedback based on different statuses\n4. **Error Handling**: Properly handle task failure situations\n5. **Progress Display**: Utilize progress field to display progress bar\n6. **Task Uniqueness**: Same draft URL can only have one ongoing task\n\n## Workflow\n\n1. Validate required parameters (draft_url)\n2. Query task status from task manager\n3. Convert internal status to API response format\n4. Return task status information\n\n## Related Interfaces\n\n- [gen_video](./gen_video.md) - Submit video generation task\n- [create_draft](./create_draft.md) - Create new draft file\n- [save_draft](./save_draft.md) - Save draft file\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### Language Switch\n[中文版](./gen_video_status.zh.md) | [English](./gen_video_status.md)"
  },
  {
    "path": "docs/gen_video_status.zh.md",
    "content": "# GEN_VIDEO_STATUS API 接口文档\n\n## 🌐 语言切换\n[中文版](./gen_video_status.zh.md) | [English](./gen_video_status.md)\n\n## 接口信息\n\n```bash\nPOST /openapi/capcut-mate/v1/gen_video_status\n```\n\n## 功能描述\n\n查询视频生成任务的状态和进度。配合 [gen_video](./gen_video.md) 接口使用，用于实时跟踪视频生成任务的执行情况，包括任务状态、进度百分比、完成结果等信息。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| draft_url | string | ✅ | - | 草稿URL，与提交任务时使用的URL相同 |\n\n### 参数详解\n\n#### 草稿URL参数\n\n- **draft_url**: 草稿的完整URL，用于标识要查询状态的视频生成任务\n  - 格式：必须是有效的URL格式\n  - 示例：`\"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"`\n  - 获取方式：通过 [gen_video](./gen_video.md) 接口提交任务后返回的draft_url\n\n## 响应格式\n\n### 成功响应 (200)\n\n#### 任务等待中\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"status\": \"pending\",\n  \"progress\": 0,\n  \"video_url\": \"\",\n  \"error_message\": \"\",\n  \"created_at\": \"2024-09-24T10:30:00.000Z\",\n  \"started_at\": null,\n  \"completed_at\": null\n}\n```\n\n#### 任务处理中\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\", \n  \"status\": \"processing\",\n  \"progress\": 65,\n  \"video_url\": \"\",\n  \"error_message\": \"\",\n  \"created_at\": \"2024-09-24T10:30:00.000Z\",\n  \"started_at\": \"2024-09-24T10:30:05.000Z\",\n  \"completed_at\": null\n}\n```\n\n#### 任务已完成\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"status\": \"completed\",\n  \"progress\": 100,\n  \"video_url\": \"https://video-output.assets.jcaigc.cn/generated/video_abc123def456ghi789.mp4\",\n  \"error_message\": \"\",\n  \"created_at\": \"2024-09-24T10:30:00.000Z\",\n  \"started_at\": \"2024-09-24T10:30:05.000Z\",\n  \"completed_at\": \"2024-09-24T10:35:30.000Z\"\n}\n```\n\n#### 任务失败\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\",\n  \"status\": \"failed\",\n  \"progress\": 0,\n  \"video_url\": \"\",\n  \"error_message\": \"导出草稿失败: 剪映导出结束但目标文件未生成，请检查磁盘空间或剪映版本\",\n  \"created_at\": \"2024-09-24T10:30:00.000Z\",\n  \"started_at\": \"2024-09-24T10:30:05.000Z\",\n  \"completed_at\": \"2024-09-24T10:32:15.000Z\"\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| draft_url | string | 草稿URL |\n| status | string | 任务状态：pending/processing/completed/failed |\n| progress | integer | 任务进度（0-100） |\n| video_url | string | 生成的视频URL（仅在completed状态时有值） |\n| error_message | string | 错误信息（仅在failed状态时有值） |\n| created_at | string | 任务创建时间（ISO格式） |\n| started_at | string|null | 任务开始时间（ISO格式） |\n| completed_at | string|null | 任务完成时间（ISO格式） |\n\n### 错误响应 (4xx/5xx)\n\n#### 404 Not Found - 任务不存在\n\n```json\n{\n  \"detail\": \"视频生成任务未找到\"\n}\n```\n\n#### 500 Internal Server Error - 查询失败\n\n```json\n{\n  \"detail\": \"视频任务状态查询失败\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 查询任务状态\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/gen_video_status \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"YOUR_DRAFT_URL\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | draft_url是必填项 | 缺少草稿URL参数 | 提供有效的draft_url |\n| 400 | 无效的草稿URL | draft_url格式不正确 | 检查草稿URL格式是否正确 |\n| 404 | 视频生成任务未找到 | 指定的草稿URL没有对应的视频生成任务 | 确认是否已通过gen_video接口提交任务 |\n| 500 | 视频任务状态查询失败 | 内部处理错误 | 稍后重试或联系技术支持 |\n\n## 注意事项\n\n1. **轮询间隔**: 建议每5-10秒查询一次任务状态\n2. **超时设置**: 建议设置总超时时间（如10分钟）\n3. **状态处理**: 根据不同状态提供不同的用户反馈\n4. **错误处理**: 妥善处理任务失败情况\n5. **进度显示**: 利用progress字段显示进度条\n6. **任务唯一性**: 同一草稿URL只能有一个进行中的任务\n\n## 工作流程\n\n1. 验证必填参数（draft_url）\n2. 从任务管理器中查询任务状态\n3. 将内部状态转换为API响应格式\n4. 返回任务状态信息\n\n## 相关接口\n\n- [gen_video](./gen_video.md) - 提交视频生成任务\n- [create_draft](./create_draft.md) - 创建新的草稿文件\n- [save_draft](./save_draft.md) - 保存草稿文件\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./gen_video_status.zh.md) | [English](./gen_video_status.md)"
  },
  {
    "path": "docs/get_audio_duration.md",
    "content": "# GET_AUDIO_DURATION API Documentation\n\n## 🌐 Language Switch\n[中文版](./get_audio_duration.zh.md) | [English](./get_audio_duration.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/get_audio_duration\n```\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Function Description\n\nGet the duration of audio files, supporting various common audio formats. Use FFprobe tool for precise audio analysis, returning the accurate duration of audio files in microseconds.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"mp3_url\": \"https://assets.jcaigc.cn/audio/sample.mp3\"\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| mp3_url | string |✅ | - | Audio file URL, supporting mp3, wav, m4a and other common audio formats |\n\n### Parameter Details\n\n#### Audio URL Parameter\n\n- **mp3_url**: Complete URL address of the audio file\n  - Supported formats: mp3, wav, aac, flac, m4a and other common audio formats\n  - Need to ensure URL is accessible and file is complete\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"duration\": 2325333\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| duration | number | Audio duration, unit: microseconds |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Audio Duration Retrieval\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_audio_duration \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mp3_url\": \"https://assets.jcaigc.cn/audio/sample.mp3\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | mp3_url is required | Missing audio URL parameter | Provide a valid mp3_url |\n| 404 | Audio file cannot be accessed | Specified audio URL invalid | Check if audio URL is correct |\n| 500 | Audio duration retrieval failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Time Unit**: Returned duration uses microseconds (1 second = 1,000,000 microseconds)\n2. **Audio Formats**: Support mp3, wav, aac, flac, m4a and other common audio formats\n3. **File Size**: Recommended to control within reasonable range, overly large files may cause timeout\n4. **Network Access**: Ensure provided audio URL can be accessed normally\n\n## Workflow\n\n1. Validate required parameter (mp3_url)\n2. Download audio file to temporary directory\n3. Use ffprobe to analyze audio file and get duration\n4. Clean up temporary files\n5. Return audio duration information\n\n## Related Interfaces\n\n- [Add Audios](./add_audios.md)\n- [Add Videos](./add_videos.md)\n- [Create Draft](./create_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/get_audio_duration.zh.md",
    "content": "# GET_AUDIO_DURATION API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/get_audio_duration\n```\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 功能描述\n\n获取音频文件的时长，支持各种常见的音频格式。使用FFprobe工具进行精确的音频分析，返回音频文件的准确时长，单位为微秒。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"mp3_url\": \"https://assets.jcaigc.cn/audio/sample.mp3\"\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| mp3_url | string | ✅ | - | 音频文件URL，支持mp3、wav、m4a等常见音频格式 |\n\n### 参数详解\n\n#### 音频URL参数\n\n- **mp3_url**: 音频文件的完整URL地址\n  - 支持格式：mp3、wav、aac、flac、m4a等常见音频格式\n  - 需要确保URL可访问且文件完整\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"duration\": 2325333\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| duration | number | 音频时长，单位：微秒 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本获取音频时长\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_audio_duration \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mp3_url\": \"https://assets.jcaigc.cn/audio/sample.mp3\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | mp3_url是必填项 | 缺少音频URL参数 | 提供有效的mp3_url |\n| 404 | 音频文件无法访问 | 指定的音频URL无效 | 检查音频URL是否正确 |\n| 500 | 音频时长获取失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **时间单位**: 返回的时长使用微秒（1秒 = 1,000,000微秒）\n2. **音频格式**: 支持mp3、wav、aac、flac、m4a等常见音频格式\n3. **文件大小**: 建议控制在合理范围内，过大的文件可能导致处理超时\n4. **网络访问**: 确保提供的音频URL可以正常访问\n\n## 工作流程\n\n1. 验证必填参数（mp3_url）\n2. 下载音频文件到临时目录\n3. 使用ffprobe分析音频文件获取时长\n4. 清理临时文件\n5. 返回音频时长信息\n\n## 相关接口\n\n- [添加音频](./add_audios.md)\n- [添加视频](./add_videos.md)\n- [创建草稿](./create_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/get_draft.md",
    "content": "# GET_DRAFT API Documentation\n\n## 🌐 Language Switch\n[中文版](./get_draft.zh.md) | [English](./get_draft.md)\n\n## Interface Information\n\n```\nGET /openapi/capcut-mate/v1/get_draft\n```\n\n## Function Description\n\nGet draft file list. This interface is used to get all file lists corresponding to the specified draft ID, allowing you to view material files, configuration files, etc. in the draft. Usually used for draft content preview, file management or status checking.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n### Query Parameters\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| draft_id | string | ✅ | - | Draft ID, length 20-32 characters |\n\n### Parameter Details\n\n#### draft_id\n\n- **Type**: String\n- **Required**: Yes\n- **Length**: 20-32 characters\n- **Format**: Usually UUID format or similar unique identifier\n- **Example**: `2f52a63b-8c6a-4417-8b01-1b2a569ccb6c`\n- **Acquisition Method**: Usually extracted from draft_url or returned by create_draft interface\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"files\": [\n    \"2f52a63b-8c6a-4417-8b01-1b2a569ccb6c.json\",\n    \"video_123456789.mp4\",\n    \"audio_987654321.mp3\",\n    \"image_555666777.jpg\",\n    \"thumbnail_888999000.png\"\n  ]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| files | array | List of files related to the draft |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Get Draft File List\n\n```bash\ncurl -X GET \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2f52a63b-8c6a-4417-8b01-1b2a569ccb6c\" \\\n  -H \"Content-Type: application/json\"\n```\n\n#### 2. Using Complete draft_id\n\n```bash\ncurl -X GET \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=7e8f9a0b-1c2d-3e4f-5g6h-7i8j9k0l1m2n\" \\\n  -H \"Content-Type: application/json\"\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | draft_id is required | Missing draft_id parameter | Provide a valid draft_id |\n| 400 | Invalid draft_id length | draft_id length not within 20-32 characters range | Check if draft_id format is correct |\n| 400 | Invalid draft_id format | draft_id format is incorrect | Ensure using correct draft ID format |\n| 404 | Draft does not exist | Specified draft ID cannot be found | Confirm that draft ID is correct and exists |\n| 500 | Failed to get file list | Internal service error | Contact technical support or retry later |\n| 503 | Service unavailable | System maintenance | Retry later |\n\n## Notes\n\n1. **Parameter Format**: Ensure draft_id format is correct and length is between 20-32 characters\n2. **ID Extraction**: Correctly extract draft_id from draft_url\n3. **File Types**: Returned file list contains multiple types of files\n4. **Permission Verification**: Ensure permission to access specified draft\n5. **Timeliness**: File list may not be updated in real-time, with some delay\n6. **File Status**: Files in the list may be in different processing states\n\n## Workflow\n\n1. Validate draft_id parameter\n2. Check draft_id format and length\n3. Find specified draft\n4. Get all files associated with the draft\n5. Return file list\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Save Draft](./save_draft.md)\n- [Add Videos](./add_videos.md)\n- [Add Audios](./add_audios.md)\n- [Add Images](./add_images.md)\n- [Generate Video](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### Language Switch\n[中文版](./get_draft.zh.md) | [English](./get_draft.md)"
  },
  {
    "path": "docs/get_draft.zh.md",
    "content": "# GET_DRAFT API 接口文档\n\n## 🌐 语言切换\n[中文版](./get_draft.zh.md) | [English](./get_draft.md)\n\n## 接口信息\n\n```\nGET /openapi/capcut-mate/v1/get_draft\n```\n\n## 功能描述\n\n获取草稿文件列表。该接口用于获取指定草稿ID对应的所有文件列表，可以查看草稿中包含的素材文件、配置文件等信息。通常用于草稿内容的预览、文件管理或状态检查。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n### Query参数\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| draft_id | string | ✅ | - | 草稿ID，长度为20-32位字符 |\n\n### 参数详解\n\n#### draft_id\n\n- **类型**: 字符串\n- **必填**: 是\n- **长度**: 20-32位字符\n- **格式**: 通常为UUID格式或类似的唯一标识符\n- **示例**: `2f52a63b-8c6a-4417-8b01-1b2a569ccb6c`\n- **获取方式**: 通常从draft_url中提取或由create_draft接口返回\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"files\": [\n    \"2f52a63b-8c6a-4417-8b01-1b2a569ccb6c.json\",\n    \"video_123456789.mp4\",\n    \"audio_987654321.mp3\",\n    \"image_555666777.jpg\",\n    \"thumbnail_888999000.png\"\n  ]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| files | array | 草稿相关的文件列表 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本获取草稿文件列表\n\n```bash\ncurl -X GET \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2f52a63b-8c6a-4417-8b01-1b2a569ccb6c\" \\\n  -H \"Content-Type: application/json\"\n```\n\n#### 2. 使用完整的draft_id\n\n```bash\ncurl -X GET \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=7e8f9a0b-1c2d-3e4f-5g6h-7i8j9k0l1m2n\" \\\n  -H \"Content-Type: application/json\"\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | draft_id是必填项 | 缺少draft_id参数 | 提供有效的draft_id |\n| 400 | draft_id长度无效 | draft_id长度不在20-32位范围内 | 检查draft_id格式是否正确 |\n| 400 | draft_id格式无效 | draft_id格式不正确 | 确保使用正确的草稿ID格式 |\n| 404 | 草稿不存在 | 指定的草稿ID无法找到 | 确认草稿ID是否正确且存在 |\n| 500 | 获取文件列表失败 | 内部服务错误 | 联系技术支持或稍后重试 |\n| 503 | 服务不可用 | 系统维护中 | 稍后重试 |\n\n## 注意事项\n\n1. **参数格式**: 确保draft_id格式正确且长度在20-32位之间\n2. **ID提取**: 从draft_url正确提取draft_id\n3. **文件类型**: 返回的文件列表包含多种类型的文件\n4. **权限验证**: 确保有权限访问指定的草稿\n5. **实时性**: 文件列表可能不是实时更新的，存在一定延迟\n6. **文件状态**: 列表中的文件可能处于不同的处理状态\n\n## 工作流程\n\n1. 验证draft_id参数\n2. 检查draft_id格式和长度\n3. 查找指定的草稿\n4. 获取草稿关联的所有文件\n5. 返回文件列表\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n- [保存草稿](./save_draft.md)\n- [添加视频](./add_videos.md)\n- [添加音频](./add_audios.md)\n- [添加图片](./add_images.md)\n- [生成视频](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./get_draft.zh.md) | [English](./get_draft.md)"
  },
  {
    "path": "docs/get_image_animations.md",
    "content": "# GET_IMAGE_ANIMATIONS API Documentation\n\n## 🌐 Language Switch\n[中文版](./get_image_animations.zh.md) | [English](./get_image_animations.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/get_image_animations\n```\n\n## Function Description\n\nGet image entrance/exit animation list, returning all supported and qualified image entrance/exit animations. Support filtering based on animation type (entrance, exit, loop) and membership mode (all, VIP, free).\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"mode\": 0,\n  \"type\": \"in\"\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| mode | integer |❌ | 0 | Animation mode: 0=all, 1=VIP, 2=free |\n| type | string |✅ | - | Animation type: in=entrance, out=exit, loop=loop |\n\n### Parameter Details\n\n#### Animation Mode Parameter\n\n- **mode**: Animation filtering mode\n  - 0 = All animations (including VIP and free)\n  - 1 = VIP animations only\n  - 2 = Free animations only\n  - Default: 0\n\n#### Animation Type Parameter\n\n- **type**: Animation type (required)\n  - \"in\" = Entrance animation (effect when image appears)\n  - \"out\" = Exit animation (effect when image disappears)\n  - \"loop\" = Loop animation (continuous effect while image plays)\n\n#### Animation Mode Description\n\n| Mode Value | Mode Name | Description |\n|------------|-----------|-------------|\n| 0 | All | Return all animations (including VIP and free) |\n| 1 | VIP | Return VIP animations only |\n| 2 | Free | Return free animations only |\n\n#### Animation Type Description\n\n| Type Value | Type Name | Description |\n|------------|-----------|-------------|\n| in | Entrance Animation | Animation effect when image appears |\n| out | Exit Animation | Animation effect when image disappears |\n| loop | Loop Animation | Continuous loop animation effect while image plays |\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"effects\": [\n    {\n      \"resource_id\": \"7314291622525538844\",\n      \"type\": \"in\",\n      \"category_id\": \"pic_ruchang\",\n      \"category_name\": \"图片入场\",\n      \"duration\": 600000,\n      \"id\": \"35395179\",\n      \"name\": \"渐显出现\",\n      \"request_id\": \"\",\n      \"start\": 0,\n      \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/fade_in_pic_icon\",\n      \"material_type\": \"sticker\",\n      \"panel\": \"\",\n      \"path\": \"\",\n      \"platform\": \"all\"\n    }\n  ]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| effects | array | Image animation object array |\n\n#### Single Animation Object Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| resource_id | string | Animation resource ID |\n| type | string | Animation type (in/out/loop) |\n| category_id | string | Animation category ID |\n| category_name | string | Animation category name |\n| duration | integer | Animation duration (microseconds) |\n| id | string | Animation unique identifier ID |\n| name | string | Animation name |\n| request_id | string | Request ID (usually empty) |\n| start | integer | Animation start time |\n| icon_url | string | Animation icon URL |\n| material_type | string | Material type (usually \"sticker\") |\n| panel | string | Panel information |\n| path | string | Path information |\n| platform | string | Supported platform (usually \"all\") |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Get All Entrance Animations\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_image_animations \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mode\": 0,\n    \"type\": \"in\"\n  }'\n```\n\n#### 2. Get VIP Exit Animations\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_image_animations \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mode\": 1,\n    \"type\": \"out\"\n  }'\n```\n\n#### 3. Get Free Loop Animations\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_image_animations \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mode\": 2,\n    \"type\": \"loop\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | type parameter must be in, out, or loop | Invalid animation type parameter | Use correct type values: \"in\", \"out\", or \"loop\" |\n| 400 | mode parameter must be 0, 1, or 2 | Invalid animation mode parameter | Use correct mode values: 0, 1, or 2 |\n| 500 | Failed to get image animations | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **type parameter**: Required parameter, can only choose one from \"in\", \"out\", \"loop\"\n2. **mode parameter**: Optional parameter, default is 0 (all animations)\n3. **Response data**: Different from text animations, image animations have specialized categories and effects\n4. **Animation duration**: Unit is microseconds (1 second = 1,000,000 microseconds)\n5. **VIP identification**: Some animations may require VIP permissions to use\n\n## Workflow\n\n1. Validate required parameter (type)\n2. Validate optional parameter (mode) validity\n3. Filter image animation data based on type and mode\n4. Return animation object array meeting conditions\n5. Server automatically handles data formatting\n\n## Related Interfaces\n\n- [Add Images](./add_images.md)\n- [Get Text Animations](./get_text_animations.md)\n- [Add Effects](./add_effects.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/get_image_animations.zh.md",
    "content": "# GET_IMAGE_ANIMATIONS API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/get_image_animations\n```\n\n## 功能描述\n\n获取图片出入场动画列表，返回所有支持的且满足条件的图片出入场动画。支持根据动画类型（入场、出场、循环）和会员模式（所有、VIP、免费）进行筛选。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"mode\": 0,\n  \"type\": \"in\"\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| mode | integer | ❌ | 0 | 动画模式：0=所有，1=VIP，2=免费 |\n| type | string | ✅ | - | 动画类型：in=入场，out=出场，loop=循环 |\n\n### 参数详解\n\n#### 动画模式参数\n\n- **mode**: 动画筛选模式\n  - 0 = 所有动画（包括VIP和免费）\n  - 1 = 仅VIP动画\n  - 2 = 仅免费动画\n  - 默认值：0\n\n#### 动画类型参数\n\n- **type**: 动画类型（必填）\n  - \"in\" = 入场动画（图片出现时的效果）\n  - \"out\" = 出场动画（图片消失时的效果）\n  - \"loop\" = 循环动画（图片持续播放的效果）\n\n#### 动画模式说明\n\n| 模式值 | 模式名称 | 描述 |\n|--------|----------|------|\n| 0 | 所有 | 返回所有动画（包括VIP和免费） |\n| 1 | VIP | 仅返回VIP动画 |\n| 2 | 免费 | 仅返回免费动画 |\n\n#### 动画类型说明\n\n| 类型值 | 类型名称 | 描述 |\n|--------|----------|------|\n| in | 入场动画 | 图片出现时的动画效果 |\n| out | 出场动画 | 图片消失时的动画效果 |\n| loop | 循环动画 | 图片持续播放的循环动画效果 |\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"effects\": [\n    {\n      \"resource_id\": \"7314291622525538844\",\n      \"type\": \"in\",\n      \"category_id\": \"pic_ruchang\",\n      \"category_name\": \"图片入场\",\n      \"duration\": 600000,\n      \"id\": \"35395179\",\n      \"name\": \"渐显出现\",\n      \"request_id\": \"\",\n      \"start\": 0,\n      \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/fade_in_pic_icon\",\n      \"material_type\": \"sticker\",\n      \"panel\": \"\",\n      \"path\": \"\",\n      \"platform\": \"all\"\n    }\n  ]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| effects | array | 图片动画对象数组 |\n\n#### 单个动画对象字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| resource_id | string | 动画资源ID |\n| type | string | 动画类型（in/out/loop） |\n| category_id | string | 动画分类ID |\n| category_name | string | 动画分类名称 |\n| duration | integer | 动画时长（微秒） |\n| id | string | 动画唯一标识ID |\n| name | string | 动画名称 |\n| request_id | string | 请求ID（通常为空） |\n| start | integer | 动画开始时间 |\n| icon_url | string | 动画图标URL |\n| material_type | string | 素材类型（通常为\"sticker\"） |\n| panel | string | 面板信息 |\n| path | string | 路径信息 |\n| platform | string | 支持平台（通常为\"all\"） |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 获取所有入场动画\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_image_animations \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mode\": 0,\n    \"type\": \"in\"\n  }'\n```\n\n#### 2. 获取VIP出场动画\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_image_animations \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mode\": 1,\n    \"type\": \"out\"\n  }'\n```\n\n#### 3. 获取免费循环动画\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_image_animations \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mode\": 2,\n    \"type\": \"loop\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | type 参数必须为 in、out 或 loop | 动画类型参数无效 | 使用正确的type值：\"in\"、\"out\"或\"loop\" |\n| 400 | mode 参数必须为 0、1 或 2 | 动画模式参数无效 | 使用正确的mode值：0、1或2 |\n| 500 | 获取图片动画失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **type参数**：必填参数，只能选择 \"in\"、\"out\"、\"loop\" 中的一个\n2. **mode参数**：可选参数，默认为0（所有动画）\n3. **响应数据**：与文字动画不同，图片动画有专门的分类和效果\n4. **动画时长**：单位为微秒（1秒 = 1,000,000微秒）\n5. **VIP标识**：部分动画可能需要VIP权限才能使用\n\n## 工作流程\n\n1. 验证必填参数（type）\n2. 验证可选参数（mode）的有效性\n3. 根据type和mode筛选图片动画数据\n4. 返回符合条件的动画对象数组\n5. 服务端自动处理数据格式化\n\n## 相关接口\n\n- [添加图片](./add_images.md)\n- [获取文字动画](./get_text_animations.md)\n- [添加特效](./add_effects.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/get_text_animations.md",
    "content": "# GET_TEXT_ANIMATIONS API Documentation\n\n## 🌐 Language Switch\n[中文版](./get_text_animations.zh.md) | [English](./get_text_animations.md)\n\n## Interface Information\n\n```bash\nPOST /openapi/capcut-mate/v1/get_text_animations\n```\n\n## Function Description\n\nGet text entrance/exit animation list, returning all supported and qualified text entrance/exit animations. Support filtering based on animation type (entrance, exit, loop) and membership mode (all, VIP, free).\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"mode\": 0,\n  \"type\": \"in\"\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| mode | integer |❌ | 0 | Animation mode: 0=all, 1=VIP, 2=free |\n| type | string |✅ | - | Animation type: in=entrance, out=exit, loop=loop |\n\n### Parameter Details\n\n#### Animation Mode Parameter\n\n- **mode**: Animation filtering mode\n  - 0 = Return all animations (including VIP and free)\n  - 1 = VIP animations only\n  - 2 = Free animations only\n  - Default: 0\n\n#### Animation Type Parameter\n\n- **type**: Animation type, required parameter\n  - \"in\" = Entrance animation (animation effect when text appears)\n  - \"out\" = Exit animation (animation effect when text disappears)\n  - \"loop\" = Loop animation (continuous loop animation effect while text plays)\n\n#### Animation Mode Description\n\n| Mode Value | Mode Name | Description |\n|------------|-----------|-------------|\n| 0 | All | Return all animations (including VIP and free) |\n| 1 | VIP | VIP animations only |\n| 2 | Free | Free animations only |\n\n#### Animation Type Description\n\n| Type Value | Type Name | Description |\n|------------|-----------|-------------|\n| in | Entrance Animation | Animation effect when text appears |\n| out | Exit Animation | Animation effect when text disappears |\n| loop | Loop Animation | Continuous loop animation effect while text plays |\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"effects\": [\n    {\n      \"resource_id\": \"7314291622525538843\",\n      \"type\": \"in\",\n      \"category_id\": \"ruchang\",\n      \"category_name\": \"入场\",\n      \"duration\": 500000,\n      \"id\": \"35395178\",\n      \"name\": \"冰雪飘动\",\n      \"request_id\": \"\",\n      \"start\": 0,\n      \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/459c196951cadbd024456a63db89481f\",\n      \"material_type\": \"sticker\",\n      \"panel\": \"\",\n      \"path\": \"\",\n      \"platform\": \"all\"\n    },\n    {\n      \"resource_id\": \"7397306443147252233\",\n      \"type\": \"in\",\n      \"category_id\": \"ruchang\",\n      \"category_name\": \"入场\",\n      \"duration\": 500000,\n      \"id\": \"77035159\",\n      \"name\": \"变色输入\",\n      \"request_id\": \"\",\n      \"start\": 0,\n      \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/c15f5c313f8170c558043abf300a0692\",\n      \"material_type\": \"sticker\",\n      \"panel\": \"\",\n      \"path\": \"\",\n      \"platform\": \"all\"\n    }\n  ]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| effects | array | Text entrance/exit animation object array |\n\n#### Animation Object Structure\n\nEach animation object contains the following fields:\n\n| Field | Type | Description |\n|-------|------|-------------|\n| resource_id | string | Animation resource ID |\n| type | string | Animation type (in/out/loop) |\n| category_id | string | Animation category ID |\n| category_name | string | Animation category name |\n| duration | integer | Animation duration (microseconds) |\n| id | string | Animation unique identifier ID |\n| name | string | Animation name |\n| request_id | string | Request ID (usually empty) |\n| start | integer | Animation start time |\n| icon_url | string | Animation icon URL |\n| material_type | string | Material type (usually \"sticker\") |\n| panel | string | Panel information |\n| path | string | Path information |\n| platform | string | Supported platform (usually \"all\") |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Get All Entrance Animations\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_text_animations \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mode\": 0,\n    \"type\": \"in\"\n  }'\n```\n\n#### 2. Get VIP Exit Animations\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_text_animations \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mode\": 1,\n    \"type\": \"out\"\n  }'\n```\n\n#### 3. Get Free Loop Animations\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_text_animations \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mode\": 2,\n    \"type\": \"loop\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | type is required | Missing animation type parameter | Provide a valid type parameter |\n| 400 | Invalid mode parameter | mode parameter out of range | Use 0, 1, or 2 as mode value |\n| 400 | Invalid type parameter | type parameter value incorrect | Use in, out, or loop as type value |\n| 500 | Failed to get text animations | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Parameter Requirements**: type parameter is required, mode parameter is optional\n2. **Animation Types**: type parameter can only be one of \"in\", \"out\", \"loop\"\n3. **Animation Modes**: mode parameter can only be one of 0, 1, 2\n4. **Response Format**: Different from old version, current version directly returns object array instead of JSON string\n5. **Data Source**: Currently using mock data, in production environment should get from database or API\n\n## Workflow\n\n1. Validate required parameter (type)\n2. Validate parameter validity (type and mode)\n3. Filter animation data based on type and mode\n4. Return animation list meeting conditions\n\n## Related Interfaces\n\n- [Add Captions](./add_captions.md)\n- [Create Text Style](./add_text_style.md)\n- [Get Image Animations](./get_image_animations.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/get_text_animations.zh.md",
    "content": "# GET_TEXT_ANIMATIONS API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```bash\nPOST /openapi/capcut-mate/v1/get_text_animations\n```\n\n## 功能描述\n\n获取文字出入场动画列表，返回所有支持的且满足条件的文字出入场动画。支持根据动画类型（入场、出场、循环）和会员模式（所有、VIP、免费）进行筛选。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"mode\": 0,\n  \"type\": \"in\"\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| mode | integer | ❌ | 0 | 动画模式：0=所有，1=VIP，2=免费 |\n| type | string | ✅ | - | 动画类型：in=入场，out=出场，loop=循环 |\n\n### 参数详解\n\n#### 动画模式参数\n\n- **mode**: 动画筛选模式\n  - 0 = 返回所有动画（包括VIP和免费）\n  - 1 = 仅返回VIP动画\n  - 2 = 仅返回免费动画\n  - 默认值：0\n\n#### 动画类型参数\n\n- **type**: 动画类型，必填参数\n  - \"in\" = 入场动画（文字出现时的动画效果）\n  - \"out\" = 出场动画（文字消失时的动画效果）\n  - \"loop\" = 循环动画（文字持续播放的循环动画效果）\n\n#### 动画模式说明\n\n| 模式值 | 模式名称 | 描述 |\n|--------|----------|------|\n| 0 | 所有 | 返回所有动画（包括VIP和免费） |\n| 1 | VIP | 仅返回VIP动画 |\n| 2 | 免费 | 仅返回免费动画 |\n\n#### 动画类型说明\n\n| 类型值 | 类型名称 | 描述 |\n|--------|----------|------|\n| in | 入场动画 | 文字出现时的动画效果 |\n| out | 出场动画 | 文字消失时的动画效果 |\n| loop | 循环动画 | 文字持续播放的循环动画效果 |\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"effects\": [\n    {\n      \"resource_id\": \"7314291622525538843\",\n      \"type\": \"in\",\n      \"category_id\": \"ruchang\",\n      \"category_name\": \"入场\",\n      \"duration\": 500000,\n      \"id\": \"35395178\",\n      \"name\": \"冰雪飘动\",\n      \"request_id\": \"\",\n      \"start\": 0,\n      \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/459c196951cadbd024456a63db89481f\",\n      \"material_type\": \"sticker\",\n      \"panel\": \"\",\n      \"path\": \"\",\n      \"platform\": \"all\"\n    },\n    {\n      \"resource_id\": \"7397306443147252233\",\n      \"type\": \"in\",\n      \"category_id\": \"ruchang\",\n      \"category_name\": \"入场\",\n      \"duration\": 500000,\n      \"id\": \"77035159\",\n      \"name\": \"变色输入\",\n      \"request_id\": \"\",\n      \"start\": 0,\n      \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/c15f5c313f8170c558043abf300a0692\",\n      \"material_type\": \"sticker\",\n      \"panel\": \"\",\n      \"path\": \"\",\n      \"platform\": \"all\"\n    }\n  ]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| effects | array | 文字出入场动画对象数组 |\n\n#### 动画对象结构\n\n每个动画对象包含以下字段：\n\n| 字段名 | 类型 | 描述 |\n|--------|------|------|\n| resource_id | string | 动画资源ID |\n| type | string | 动画类型（in/out/loop） |\n| category_id | string | 动画分类ID |\n| category_name | string | 动画分类名称 |\n| duration | integer | 动画时长（微秒） |\n| id | string | 动画唯一标识ID |\n| name | string | 动画名称 |\n| request_id | string | 请求ID（通常为空） |\n| start | integer | 动画开始时间 |\n| icon_url | string | 动画图标URL |\n| material_type | string | 素材类型（通常为\"sticker\"） |\n| panel | string | 面板信息 |\n| path | string | 路径信息 |\n| platform | string | 支持平台（通常为\"all\"） |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 获取所有入场动画\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_text_animations \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mode\": 0,\n    \"type\": \"in\"\n  }'\n```\n\n#### 2. 获取VIP出场动画\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_text_animations \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mode\": 1,\n    \"type\": \"out\"\n  }'\n```\n\n#### 3. 获取免费循环动画\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_text_animations \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"mode\": 2,\n    \"type\": \"loop\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | type是必填项 | 缺少动画类型参数 | 提供有效的type参数 |\n| 400 | mode参数无效 | mode参数超出范围 | 使用0、1或2作为mode值 |\n| 400 | type参数无效 | type参数值不正确 | 使用in、out或loop作为type值 |\n| 500 | 获取文字动画失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **参数要求**: type参数为必填项，mode参数为可选项\n2. **动画类型**: type参数只能是\"in\"、\"out\"、\"loop\"中的一个\n3. **动画模式**: mode参数只能是0、1、2中的一个\n4. **响应格式**: 与旧版本不同，当前版本直接返回对象数组而非JSON字符串\n5. **数据来源**: 当前使用模拟数据，生产环境中应从数据库或API获取\n\n## 工作流程\n\n1. 验证必填参数（type）\n2. 验证参数有效性（type和mode）\n3. 根据type和mode筛选动画数据\n4. 返回符合条件的动画列表\n\n## 相关接口\n\n- [添加字幕](./add_captions.md)\n- [创建文本样式](./add_text_style.md)\n- [获取图片动画](./get_image_animations.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/get_text_effects.md",
    "content": "# 获取花字效果列表 API 文档\n\n## 📖 接口说明\n\n获取所有支持的花字效果列表，支持按 VIP/免费进行筛选。\n\n本接口参考 `get_filters` 的实现模式，提供 RESTful 风格的 POST 请求方式。\n\n## 🔗 接口信息\n\n- **路径**: `/get_text_effects`\n- **方法**: POST\n- **版本**: v1\n\n## 📥 请求参数\n\n### 请求体 (JSON)\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| mode | int | 否 | 0 | 花字效果模式：0=所有，1=VIP，2=免费 |\n\n### 请求示例\n\n#### 1. 获取所有花字效果\n\n```bash\ncurl -X POST \"http://localhost:8000/get_text_effects\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"mode\": 0}'\n```\n\n#### 2. 获取 VIP 花字效果\n\n```bash\ncurl -X POST \"http://localhost:8000/get_text_effects\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"mode\": 1}'\n```\n\n#### 3. 获取免费花字效果\n\n```bash\ncurl -X POST \"http://localhost:8000/get_text_effects\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"mode\": 2}'\n```\n\n## 📤 响应参数\n\n### 响应体 (JSON)\n\n```json\n{\n  \"text_effects\": [\n    {\n      \"name\": \"红黄火焰综艺花字\",\n      \"is_vip\": false,\n      \"resource_id\": \"7539407429763796249\",\n      \"effect_id\": \"7539407429763796249\"\n    },\n    {\n      \"name\": \"综艺 - 黑暗斑驳红色\",\n      \"is_vip\": false,\n      \"resource_id\": \"7351316503771368713\",\n      \"effect_id\": \"7351316503771368713\"\n    }\n    // ... 更多花字效果\n  ]\n}\n```\n\n### 字段说明\n\n#### TextEffectItem 对象\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| name | string | 花字效果名称 |\n| is_vip | boolean | 是否为 VIP 效果 |\n| resource_id | string | 资源 ID |\n| effect_id | string | 效果 ID |\n\n## 📊 统计数据\n\n根据当前数据源 (`config\\data.ts`) 的统计:\n\n- **总花字数**: 1,673 个\n- **VIP 效果**: 0 个\n- **免费效果**: 1,673 个\n- **提取率**: 100%\n\n## 💡 使用场景\n\n### 1. 在客户端展示花字效果选择器\n\n```javascript\n// 获取所有花字效果\nconst response = await fetch('/get_text_effects', {\n  method: 'POST',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify({ mode: 0 })\n});\n\nconst data = await response.json();\n\n// 渲染花字效果列表\ndata.text_effects.forEach(effect => {\n  console.log(`${effect.name} (ID: ${effect.effect_id})`);\n});\n```\n\n### 2. 仅展示免费花字效果\n\n```javascript\n// 获取免费花字效果\nconst response = await fetch('/get_text_effects', {\n  method: 'POST',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify({ mode: 2 })\n});\n\nconst data = await response.json();\n// data.text_effects 只包含免费花字\n```\n\n### 3. 配合 add_captions API 使用\n\n```javascript\n// 1. 先获取花字效果列表\nconst effectsResponse = await fetch('/get_text_effects', {\n  method: 'POST',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify({ mode: 0 })\n});\nconst effects = await effectsResponse.json();\n\n// 2. 用户选择一个花字效果\nconst selectedEffect = effects.text_effects[0];\n\n// 3. 在添加字幕时使用该花字\nawait fetch('/add_captions', {\n  method: 'POST',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify({\n    draft_id: \"your_draft_id\",\n    captions: [...],\n    text_effect: selectedEffect.name  // 或 selectedEffect.effect_id\n  })\n});\n```\n\n## 🔍 错误处理\n\n### 错误码\n\n| 错误码 | 说明 |\n|--------|------|\n| filter_get_failed | 获取花字效果列表失败 |\n\n### 错误响应示例\n\n```json\n{\n  \"code\": \"filter_get_failed\",\n  \"message\": \"获取花字效果列表失败\",\n  \"detail\": null\n}\n```\n\n## ⚙️ 参数模式说明\n\n### mode = 0 (所有)\n\n返回所有花字效果，包括 VIP 和免费效果。\n\n**适用场景**: \n- 完整的花字效果选择器\n- 管理后台查看所有效果\n\n### mode = 1 (VIP)\n\n仅返回 VIP 花字效果。\n\n**适用场景**:\n- VIP 专属效果展示\n- 付费效果推广\n\n### mode = 2 (免费)\n\n仅返回免费花字效果。\n\n**适用场景**:\n- 免费版客户端\n- 免费效果筛选\n\n## 📝 注意事项\n\n1. **性能考虑**: 首次加载可能需要较长时间（1,673 个效果），建议使用缓存机制\n2. **数据更新**: 花字效果数据来自 `config\\data.ts`，如需更新请重新运行提取脚本\n3. **重名处理**: 部分花字效果因名称重复，在映射表中添加了 `_effect_id` 后缀\n4. **兼容性**: 即使没有 VIP 效果，接口也会正常返回空数组，不会报错\n\n## 🛠️ 相关接口\n\n- **添加字幕**: `/add_captions` - 可使用本接口返回的花字效果\n- **获取滤镜列表**: `/get_filters` - 类似的滤镜效果列表接口\n- **获取特效列表**: `/get_effects` - 视频特效列表接口\n\n## 📦 技术实现\n\n### Service 层\n\n文件：`src/service/get_text_effects.py`\n\n主要函数:\n- `get_text_effects(mode: int)` - 主接口函数\n- `resolve_text_effect(effect_identifier: str)` - 解析花字效果标识符\n- `_get_text_effects_by_mode(mode: int)` - 根据模式获取效果\n\n### Schema 层\n\n文件：`src/schemas/get_text_effects.py`\n\nPydantic 模型:\n- `GetTextEffectsRequest` - 请求参数\n- `TextEffectItem` - 单个花字效果项\n- `GetTextEffectsResponse` - 响应参数\n\n### Router 层\n\n文件：`src/router/v1.py`\n\n路由定义:\n```python\n@router.post(path=\"/get_text_effects\", response_model=GetTextEffectsResponse)\ndef get_text_effects(gter: GetTextEffectsRequest) -> GetTextEffectsResponse:\n```\n\n## 🧪 测试\n\n运行测试脚本验证接口功能:\n\n```bash\npython tests\\test_get_text_effects.py\n```\n\n测试覆盖:\n- ✅ 获取所有花字效果 (mode=0)\n- ✅ 获取 VIP 花字效果 (mode=1)\n- ✅ 获取免费花字效果 (mode=2)\n- ✅ 无效模式处理 (mode=3)\n\n---\n\n**最后更新**: 2026-03-31  \n**API 版本**: v1  \n**数据来源**: config\\data.ts (1,673 个花字效果)\n"
  },
  {
    "path": "docs/get_url.md",
    "content": "# GET_URL API Documentation\n\n## 🌐 Language Switch\n[中文版](./get_url.zh.md) | [English](./get_url.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/get_url\n```\n\n## Function Description\n\nExtract links. This interface is used to extract link information from input content, converting multiple values into single value return.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"output\": \"[魂牵梦萦https://sf.com；中国人https://jcaigc.cn],\\\"[]\\\"\"\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| output | string |✅ | - | Content to extract |\n\n### Parameter Details\n\n#### output\n\n- **Type**: string\n- **Description**: Content from which to extract links\n- **Example**: `\"[魂牵梦萦https://sf.com；中国人https://jcaigc.cn],\\\"[]\\\"\"`\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"output\": \"[魂牵梦萦https://sf.com；中国人https://jcaigc.cn],\\\"[]\\\"\"\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| output | string | Extraction result |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Usage\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_url \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"output\": \"[魂牵梦萦https://sf.com；中国人https://jcaigc.cn],\\\"[]\\\"\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | output is required | Missing output parameter | Provide a valid output parameter |\n| 500 | Link extraction failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Parameter Requirements**: output parameter is required\n2. **Return Value**: Current version directly returns input content without additional processing\n\n## Workflow\n\n1. Validate required parameter (output)\n2. Call service layer to handle business logic\n3. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/get_url.zh.md",
    "content": "# GET_URL API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/get_url\n```\n\n## 功能描述\n\n提取链接。该接口用于提取输入内容中的链接信息，用于多值返回变成单值返回。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"output\": \"[魂牵梦萦https://sf.com；中国人https://jcaigc.cn],\\\"[]\\\"\"\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| output | string | ✅ | - | 提取内容 |\n\n### 参数详解\n\n#### output\n\n- **类型**: string\n- **说明**: 需要提取链接的内容\n- **示例**: `\"[魂牵梦萦https://sf.com；中国人https://jcaigc.cn],\\\"[]\\\"\"`\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"output\": \"[魂牵梦萦https://sf.com；中国人https://jcaigc.cn],\\\"[]\\\"\"\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| output | string | 提取结果 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本使用\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_url \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"output\": \"[魂牵梦萦https://sf.com；中国人https://jcaigc.cn],\\\"[]\\\"\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | output是必填项 | 缺少output参数 | 提供有效的output参数 |\n| 500 | 提取链接失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **参数要求**: output参数为必填项\n2. **返回值**: 当前版本直接返回输入的内容，不做额外处理\n\n## 工作流程\n\n1. 验证必填参数（output）\n2. 调用服务层处理业务逻辑\n3. 返回处理结果\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/imgs_infos.md",
    "content": "# IMGS_INFOS API Documentation\n\n## 🌐 Language Switch\n[中文版](./imgs_infos.zh.md) | [English](./imgs_infos.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/imgs_infos\n```\n\n## Function Description\n\nGenerate image information based on image URLs and timelines. This interface converts image file URLs and timeline configurations into the image information format required by Jianying drafts, supporting animation effects and transition settings.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"imgs\": [\"https://assets.jcaigc.cn/img1.jpg\", \"https://assets.jcaigc.cn/img2.png\"],\n  \"timelines\": [\n    {\"start\": 0, \"end\": 3000000},\n    {\"start\": 3000000, \"end\": 6000000}\n  ],\n  \"height\": 1080,\n  \"width\": 1920,\n  \"in_animation\": \"fade_in\",\n  \"in_animation_duration\": 500000,\n  \"loop_animation\": \"bounce\",\n  \"loop_animation_duration\": 1000000,\n  \"out_animation\": \"fade_out\",\n  \"out_animation_duration\": 500000,\n  \"transition\": \"cross_fade\",\n  \"transition_duration\": 300000\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| imgs | array[string] |✅ | - | Image file URL array |\n| timelines | array[object] |✅ | - | Timeline configuration array |\n| height | number |❌ | 1080 | Image height |\n| width | number |❌ | 1920 | Image width |\n| in_animation | string |❌ | None | Entrance animation effect |\n| in_animation_duration | number |❌ | 500000 | Entrance animation duration (microseconds) |\n| loop_animation | string |❌ | None | Loop animation effect |\n| loop_animation_duration | number |❌ | 1000000 | Loop animation duration (microseconds) |\n| out_animation | string |❌ | None | Exit animation effect |\n| out_animation_duration | number |❌ | 500000 | Exit animation duration (microseconds) |\n| transition | string |❌ | None | Transition effect |\n| transition_duration | number |❌ | 300000 | Transition duration (microseconds) |\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"infos\": \"[{\\\"img_url\\\":\\\"https://assets.jcaigc.cn/img1.jpg\\\",\\\"start\\\":0,\\\"end\\\":3000000,\\\"duration\\\":5000000,\\\"height\\\":1080,\\\"width\\\":1920,\\\"in_animation\\\":\\\"fade_in\\\",\\\"in_animation_duration\\\":500000,\\\"loop_animation\\\":\\\"bounce\\\",\\\"loop_animation_duration\\\":1000000,\\\"out_animation\\\":\\\"fade_out\\\",\\\"out_animation_duration\\\":500000,\\\"transition\\\":\\\"cross_fade\\\",\\\"transition_duration\\\":300000},{\\\"img_url\\\":\\\"https://assets.jcaigc.cn/img2.png\\\",\\\"start\\\":3000000,\\\"end\\\":6000000,\\\"duration\\\":5000000,\\\"height\\\":1080,\\\"width\\\":1920,\\\"in_animation\\\":\\\"fade_in\\\",\\\"in_animation_duration\\\":500000,\\\"loop_animation\\\":\\\"bounce\\\",\\\"loop_animation_duration\\\":1000000,\\\"out_animation\\\":\\\"fade_out\\\",\\\"out_animation_duration\\\":500000,\\\"transition\\\":\\\"cross_fade\\\",\\\"transition_duration\\\":300000}]\"\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| infos | string | Image information JSON string |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Image Information Generation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/imgs_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"imgs\": [\"https://assets.jcaigc.cn/cover.jpg\"],\n    \"timelines\": [{\"start\": 0, \"end\": 5000000}],\n    \"height\": 1080,\n    \"width\": 1920\n  }'\n```\n\n#### 2. Image Information with Animation Effects\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/imgs_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"imgs\": [\"https://assets.jcaigc.cn/slide1.jpg\", \"https://assets.jcaigc.cn/slide2.jpg\"],\n    \"timelines\": [{\"start\": 0, \"end\": 3000000}, {\"start\": 3000000, \"end\": 6000000}],\n    \"in_animation\": \"fade_in\",\n    \"loop_animation\": \"bounce\",\n    \"out_animation\": \"fade_out\",\n    \"transition\": \"cross_fade\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | imgs is required | Missing image URL parameter | Provide valid image URL array |\n| 400 | timelines is required | Missing timeline parameter | Provide valid timeline array |\n| 400 | Array length mismatch | imgs and timelines array lengths don't match | Ensure both arrays have the same length |\n| 404 | Image resource not found | Image URL inaccessible | Check if image URL is accessible |\n| 500 | Image information generation failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Array Matching**: imgs and timelines array lengths must be the same\n2. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n3. **Resolution Settings**: height and width parameters are used to set image display resolution\n4. **Animation Effects**: Support entrance animation, loop animation, exit animation, and transition effects\n5. **Network Access**: Image URLs must be accessible\n6. **Format Support**: Support common image formats (JPG, PNG, GIF, etc.)\n\n## Workflow\n\n1. Validate required parameters (imgs, timelines)\n2. Check array length matching\n3. Validate timeline parameter validity\n4. Set image resolution parameters\n5. Apply animation effect parameters\n6. Generate corresponding image information for each image URL\n7. Convert information to JSON string format\n8. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Images](./add_images.md)\n- [Timelines](./timelines.md)\n- [Save Draft](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### Language Switch\n[中文版](./imgs_infos.zh.md) | [English](./imgs_infos.md)"
  },
  {
    "path": "docs/imgs_infos.zh.md",
    "content": "# IMGS_INFOS API 接口文档\n\n## 🌐 语言切换\n[中文版](./imgs_infos.zh.md) | [English](./imgs_infos.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/imgs_infos\n```\n\n## 功能描述\n\n根据图片URL和时间线生成图片信息。该接口将图片文件URL和时间线配置转换为剪映草稿所需的图片信息格式，支持动画效果和转场设置。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"imgs\": [\"https://assets.jcaigc.cn/img1.jpg\", \"https://assets.jcaigc.cn/img2.png\"],\n  \"timelines\": [\n    {\"start\": 0, \"end\": 3000000},\n    {\"start\": 3000000, \"end\": 6000000}\n  ],\n  \"height\": 1080,\n  \"width\": 1920,\n  \"in_animation\": \"fade_in\",\n  \"in_animation_duration\": 500000,\n  \"loop_animation\": \"bounce\",\n  \"loop_animation_duration\": 1000000,\n  \"out_animation\": \"fade_out\",\n  \"out_animation_duration\": 500000,\n  \"transition\": \"cross_fade\",\n  \"transition_duration\": 300000\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 |必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| imgs | array[string] |✅ | - | 图片文件URL数组 |\n| timelines | array[object] |✅ | - | 时间线配置数组 |\n| height | number |❌ | 1080 |图片高度 |\n| width | number |❌ | 1920 |图片宽度 |\n| in_animation | string |❌ | None |入动画效果 |\n| in_animation_duration | number |❌ | 500000 |入时长(微秒) |\n| loop_animation | string |❌ | None |循动画效果 |\n| loop_animation_duration | number |❌ | 1000000 |循动画时长(微秒) |\n| out_animation | string |❌ | None |出动画效果 |\n| out_animation_duration | number |❌ | 500000 |出动画时长(微秒) |\n| transition | string |❌ | None |转场效果 |\n| transition_duration | number |❌ | 300000 |转场时长(微秒) |\n\n##响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"infos\": \"[{\\\"img_url\\\":\\\"https://assets.jcaigc.cn/img1.jpg\\\",\\\"start\\\":0,\\\"end\\\":3000000,\\\"duration\\\":5000000,\\\"height\\\":1080,\\\"width\\\":1920,\\\"in_animation\\\":\\\"fade_in\\\",\\\"in_animation_duration\\\":500000,\\\"loop_animation\\\":\\\"bounce\\\",\\\"loop_animation_duration\\\":1000000,\\\"out_animation\\\":\\\"fade_out\\\",\\\"out_animation_duration\\\":500000,\\\"transition\\\":\\\"cross_fade\\\",\\\"transition_duration\\\":300000},{\\\"img_url\\\":\\\"https://assets.jcaigc.cn/img2.png\\\",\\\"start\\\":3000000,\\\"end\\\":6000000,\\\"duration\\\":5000000,\\\"height\\\":1080,\\\"width\\\":1920,\\\"in_animation\\\":\\\"fade_in\\\",\\\"in_animation_duration\\\":500000,\\\"loop_animation\\\":\\\"bounce\\\",\\\"loop_animation_duration\\\":1000000,\\\"out_animation\\\":\\\"fade_out\\\",\\\"out_animation_duration\\\":500000,\\\"transition\\\":\\\"cross_fade\\\",\\\"transition_duration\\\":300000}]\"\n}\n```\n\n###响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| infos | string | 图片信息JSON字符串 |\n\n###错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1.基本图片信息生成\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/imgs_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"imgs\": [\"https://assets.jcaigc.cn/cover.jpg\"],\n    \"timelines\": [{\"start\": 0, \"end\": 5000000}],\n    \"height\": 1080,\n    \"width\": 1920\n  }'\n```\n\n#### 2.带动画效果的图片信息\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/imgs_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"imgs\": [\"https://assets.jcaigc.cn/slide1.jpg\", \"https://assets.jcaigc.cn/slide2.jpg\"],\n    \"timelines\": [{\"start\": 0, \"end\": 3000000}, {\"start\": 3000000, \"end\": 6000000}],\n    \"in_animation\": \"fade_in\",\n    \"loop_animation\": \"bounce\",\n    \"out_animation\": \"fade_out\",\n    \"transition\": \"cross_fade\"\n  }'\n```\n\n##错误码说明\n\n|错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | imgs是必填项 |缺少图片URL参数 | 提供有效的图片URL数组 |\n| 400 | timelines是必填项 |缺少时间线参数 | 提供有效的时间线数组 |\n| 400 | 数组长度不匹配 | imgs和timelines长度不一致 |确保两个数组长度相同 |\n| 404 | 图片资源不存在 |图片URL无法访问 |检查图片URL是否可访问 |\n| 500 | 图片信息生成失败 |内部处理错误 |联技术支持 |\n\n## 注意事项\n\n1. **数组匹配**: imgs和timelines数组长度必须相同\n2. **时间单位**:所有时间参数使用微秒（1秒 = 1,000,000微秒）\n3. **分辨率设置**: height和width参数用于设置图片显示分辨率\n4. **动画效果**:支持入动画、循环动画、出动画和转场效果\n5. **网络访问**: 图片URL必须可以正常访问\n6. **格式支持**:支持常见的图片格式（JPG、PNG、GIF等）\n\n##工作流程\n\n1.验证必填参数（imgs, timelines）\n2.检查数组长度匹配\n3.验证时间线参数有效性\n4. 设置图片分辨率参数\n5.应用动画效果参数\n6.为每图片URL生成对应的图片信息\n7.将信息转换为JSON字符串格式\n8.返回处理结果\n\n##相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加图片](./add_images.md)\n- [时间线](./timelines.md)\n- [保存草稿](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./imgs_infos.zh.md) | [English](./imgs_infos.md)"
  },
  {
    "path": "docs/keyframes_infos.md",
    "content": "# KEYFRAMES_INFOS API Documentation\n\n## 🌐 Language Switch\n[中文版](./keyframes_infos.zh.md) | [English](./keyframes_infos.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/keyframes_infos\n```\n\n## Function Description\n\nGenerate keyframe information based on keyframe type, position ratios, and values. This interface converts keyframe configurations into the keyframe information format required by Jianying drafts.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"ctype\": \"position\",\n  \"offsets\": [0.0, 0.5, 1.0],\n  \"values\": [0.0, 0.5, 1.0],\n  \"segment_infos\": [\n    {\"id\": \"segment1\", \"start\": 0, \"end\": 5000000}\n  ],\n  \"height\": 1080,\n  \"width\": 1920\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| ctype | string |✅ | - | Keyframe type |\n| offsets | array[number] |✅ | - | Position ratio array |\n| values | array[number] |✅ | - | Value array |\n| segment_infos | array[object] |✅ | - | Segment information array |\n| height | number |❌ | 1080 | Height |\n| width | number |❌ | 1920 | Width |\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"keyframes_infos\": \"[{\\\"ctype\\\":\\\"position\\\",\\\"offset\\\":0.0,\\\"value\\\":0.0,\\\"segment_id\\\":\\\"segment1\\\",\\\"height\\\":1080,\\\"width\\\":1920},{\\\"ctype\\\":\\\"position\\\",\\\"offset\\\":0.5,\\\"value\\\":0.5,\\\"segment_id\\\":\\\"segment1\\\",\\\"height\\\":1080,\\\"width\\\":1920},{\\\"ctype\\\":\\\"position\\\",\\\"offset\\\":1.0,\\\"value\\\":1.0,\\\"segment_id\\\":\\\"segment1\\\",\\\"height\\\":1080,\\\"width\\\":1920}]\"\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| keyframes_infos | string | Keyframe information JSON string |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Keyframe Information Generation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/keyframes_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"ctype\": \"scale\",\n    \"offsets\": [0.0, 1.0],\n    \"values\": [0.5, 1.5],\n    \"segment_infos\": [{\"id\": \"segment1\", \"start\": 0, \"end\": 5000000}]\n  }'\n```\n\n#### 2. Position Keyframe Information\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/keyframes_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"ctype\": \"position\",\n    \"offsets\": [0.0, 0.3, 0.7, 1.0],\n    \"values\": [0.0, 0.2, 0.8, 1.0],\n    \"segment_infos\": [{\"id\": \"segment1\", \"start\": 0, \"end\": 10000000}],\n    \"height\": 1080,\n    \"width\": 1920\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | ctype is required | Missing keyframe type parameter | Provide valid keyframe type |\n| 400 | offsets is required | Missing position ratio parameter | Provide valid position ratio array |\n| 400 | values is required | Missing value parameter | Provide valid value array |\n| 400 | segment_infos is required | Missing segment information parameter | Provide valid segment information array |\n| 400 | Array length mismatch | offsets and values array lengths don't match | Ensure both arrays have the same length |\n| 500 | Keyframe information generation failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Array Matching**: offsets and values array lengths must be the same\n2. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n3. **Keyframe Types**: Support position, scale, rotation, etc.\n4. **Position Ratios**: offsets values should be in range 0.0-1.0\n5. **Resolution Settings**: height and width parameters are used to set coordinate system\n\n## Workflow\n\n1. Validate required parameters (ctype, offsets, values, segment_infos)\n2. Check array length matching\n3. Validate parameter validity\n4. Generate corresponding keyframe information for each offset\n5. Apply resolution parameters\n6. Convert information to JSON string format\n7. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Keyframes](./add_keyframes.md)\n- [Save Draft](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### Language Switch\n[中文版](./keyframes_infos.zh.md) | [English](./keyframes_infos.md)"
  },
  {
    "path": "docs/keyframes_infos.zh.md",
    "content": "# KEYFRAMES_INFOS API 接口文档\n\n## 🌐 语言切换\n[中文版](./keyframes_infos.zh.md) | [English](./keyframes_infos.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/keyframes_infos\n```\n\n## 功能描述\n\n根据关键帧类型、位置比例和值生成关键帧信息。该接口将关键帧配置转换为剪映草稿所需的关键帧信息格式。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"ctype\": \"position\",\n  \"offsets\": [0.0, 0.5, 1.0],\n  \"values\": [0.0, 0.5, 1.0],\n  \"segment_infos\": [\n    {\"id\": \"segment1\", \"start\": 0, \"end\": 5000000}\n  ],\n  \"height\": 1080,\n  \"width\": 1920\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 |必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| ctype | string |✅ | - |关键帧类型 |\n| offsets | array[number] |✅ | - | 位置比例数组 |\n| values | array[number] |✅ | - |值数组 |\n| segment_infos | array[object] |✅ | - |片信息数组 |\n| height | number |❌ | 1080 |高度 |\n| width | number |❌ | 1920 |宽 |\n\n\n\n##响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"keyframes_infos\": \"[{\\\"ctype\\\":\\\"position\\\",\\\"offset\\\":0.0,\\\"value\\\":0.0,\\\"segment_id\\\":\\\"segment1\\\",\\\"height\\\":1080,\\\"width\\\":1920},{\\\"ctype\\\":\\\"position\\\",\\\"offset\\\":0.5,\\\"value\\\":0.5,\\\"segment_id\\\":\\\"segment1\\\",\\\"height\\\":1080,\\\"width\\\":1920},{\\\"ctype\\\":\\\"position\\\",\\\"offset\\\":1.0,\\\"value\\\":1.0,\\\"segment_id\\\":\\\"segment1\\\",\\\"height\\\":1080,\\\"width\\\":1920}]\"\n}\n```\n\n###响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| keyframes_infos | string |关键帧信息JSON字符串 |\n\n###错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1.基本关键帧信息生成\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/keyframes_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"ctype\": \"scale\",\n    \"offsets\": [0.0, 1.0],\n    \"values\": [0.5, 1.5],\n    \"segment_infos\": [{\"id\": \"segment1\", \"start\": 0, \"end\": 5000000}]\n  }'\n```\n\n#### 2.位置关键帧信息\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/keyframes_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"ctype\": \"position\",\n    \"offsets\": [0.0, 0.3, 0.7, 1.0],\n    \"values\": [0.0, 0.2, 0.8, 1.0],\n    \"segment_infos\": [{\"id\": \"segment1\", \"start\": 0, \"end\": 10000000}],\n    \"height\": 1080,\n    \"width\": 1920\n  }'\n```\n\n##错误码说明\n\n|错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | ctype是必填项 |缺少关键帧类型参数 | 提供有效的关键帧类型 |\n| 400 | offsets是必填项 |缺少位置比例参数 | 提供有效的位置比例数组 |\n| 400 | values是必填项 |缺少值参数 | 提供有效的值数组 |\n| 400 | segment_infos是必填项 |缺少片段信息参数 | 提供有效的片段信息数组 |\n| 400 | 数组长度不匹配 | offsets和values长度不一致 |确保两个数组长度相同 |\n| 500 |关键帧信息生成失败 |内部处理错误 |联技术支持 |\n\n## 注意事项\n\n1. **数组匹配**: offsets和values数组长度必须相同\n2. **时间单位**:所有时间参数使用微秒（1秒 = 1,000,000微秒）\n3. **关键帧类型**:支持position、scale、rotation等类型\n4. **位置比例**: offsets值应在0.0-1.0范围内\n5. **分辨率设置**: height和width参数用于设置坐标系\n\n##工作流程\n\n1.验证必填参数（ctype, offsets, values, segment_infos）\n2. 检查数组长度匹配\n3.验证参数有效性\n4. 为每个offset生成对应的关键帧信息\n5.应用分辨率参数\n6.将信息转换为JSON字符串格式\n7. 返回处理结果\n\n##相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加关键帧](./add_keyframes.md)\n- [保存草稿](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./keyframes_infos.zh.md) | [English](./keyframes_infos.md)"
  },
  {
    "path": "docs/objs_to_str_list.md",
    "content": "# OBJS_TO_STR_LIST API Documentation\n\n## 🌐 Language Switch\n[中文版](./objs_to_str_list.zh.md) | [English](./objs_to_str_list.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/objs_to_str_list\n```\n\n## Function Description\n\nConvert object list to string list. This interface is used to convert input object list to string list format.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"outputs\": [\n    {\n      \"output\": \"https://assets.jcaigc.cn/min.mp4\"\n    },\n    {\n      \"output\": \"https://assets.jcaigc.cn/max.mp4\"\n    }\n  ]\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| outputs | array[object] |✅ | - | Data objects |\n\n### Parameter Details\n\n#### outputs\n\n- **Type**: array[object]\n- **Description**: Object list to convert\n- **Example**: `[{\"output\": \"https://assets.jcaigc.cn/min.mp4\"}, {\"output\": \"https://assets.jcaigc.cn/max.mp4\"}]`\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"infos\": [\n    \"https://assets.jcaigc.cn/min.mp4\",\n    \"https://assets.jcaigc.cn/max.mp4\"\n  ]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| infos | array[string] | String list |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Usage\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/objs_to_str_list \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"outputs\": [\n      {\n        \"output\": \"https://assets.jcaigc.cn/min.mp4\"\n      },\n      {\n        \"output\": \"https://assets.jcaigc.cn/max.mp4\"\n      }\n    ]\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | outputs is required | Missing outputs parameter | Provide a valid outputs parameter |\n| 500 | Object list conversion failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Parameter Requirements**: outputs parameter is required\n2. **Return Value**: Extract output fields from input object list to form string list\n\n## Workflow\n\n1. Validate required parameter (outputs)\n2. Call service layer to handle business logic\n3. Return converted string list\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/objs_to_str_list.zh.md",
    "content": "# OBJS_TO_STR_LIST API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/objs_to_str_list\n```\n\n## 功能描述\n\n对象列表转化成字符串列表。该接口用于将输入的对象列表转换为字符串列表格式。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"outputs\": [\n    {\n      \"output\": \"https://assets.jcaigc.cn/min.mp4\"\n    },\n    {\n      \"output\": \"https://assets.jcaigc.cn/max.mp4\"\n    }\n  ]\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| outputs | array[object] | ✅ | - | 数据对象 |\n\n### 参数详解\n\n#### outputs\n\n- **类型**: array[object]\n- **说明**: 需要转换的对象列表\n- **示例**: `[{\"output\": \"https://assets.jcaigc.cn/min.mp4\"}, {\"output\": \"https://assets.jcaigc.cn/max.mp4\"}]`\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"infos\": [\n    \"https://assets.jcaigc.cn/min.mp4\",\n    \"https://assets.jcaigc.cn/max.mp4\"\n  ]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| infos | array[string] | 字符串列表 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本使用\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/objs_to_str_list \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"outputs\": [\n      {\n        \"output\": \"https://assets.jcaigc.cn/min.mp4\"\n      },\n      {\n        \"output\": \"https://assets.jcaigc.cn/max.mp4\"\n      }\n    ]\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | outputs是必填项 | 缺少outputs参数 | 提供有效的outputs参数 |\n| 500 | 对象列表转换失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **参数要求**: outputs参数为必填项\n2. **返回值**: 将输入的对象列表中的output字段提取出来组成字符串列表\n\n## 工作流程\n\n1. 验证必填参数（outputs）\n2. 调用服务层处理业务逻辑\n3. 返回转换后的字符串列表\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/save_draft.md",
    "content": "# SAVE_DRAFT API Documentation\n\n## 🌐 Language Switch\n[中文版](./save_draft.zh.md) | [English](./save_draft.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/save_draft\n```\n\n## Function Description\n\nSave Jianying draft. This interface is used to save the current draft state, ensuring that edited content is persistently stored. Usually called after completing a series of editing operations to prevent loss of edited content.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| draft_url | string | ✅ | - | Draft URL to be saved |\n\n### Parameter Details\n\n#### draft_url\n\n- **Type**: String\n- **Required**: Yes\n- **Format**: Complete draft URL, usually returned by create_draft interface\n- **Example**: `https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258`\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| draft_url | string | Saved draft URL, usually the same as the URL in the request |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Save Draft\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/save_draft \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | draft_url is required | Missing draft URL parameter | Provide a valid draft_url |\n| 400 | Invalid draft_url format | URL format is incorrect | Check if URL format is correct |\n| 404 | Draft does not exist | Specified draft cannot be found | Confirm that draft URL is correct and exists |\n| 500 | Save failed | Internal service error | Contact technical support or retry later |\n| 503 | Service unavailable | System maintenance | Retry later |\n\n## Notes\n\n1. **URL Validity**: Ensure the passed draft_url is valid and exists\n2. **Network Stability**: Save operation requires stable network connection\n3. **Frequency Control**: Avoid overly frequent save operations\n4. **Concurrency Safety**: Concurrent saves of the same draft may cause conflicts\n\n## Workflow\n\n1. Validate draft_url parameter\n2. Check if draft exists\n3. Get current draft state\n4. Persistently save draft data\n5. Return save result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Videos](./add_videos.md)\n- [Add Audios](./add_audios.md)\n- [Add Images](./add_images.md)\n- [Generate Video](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### Language Switch\n[中文版](./save_draft.zh.md) | [English](./save_draft.md)"
  },
  {
    "path": "docs/save_draft.zh.md",
    "content": "# SAVE_DRAFT API 接口文档\n\n## 🌐 语言切换\n[中文版](./save_draft.zh.md) | [English](./save_draft.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/save_draft\n```\n\n## 功能描述\n\n保存剪映草稿。该接口用于保存当前的草稿状态，确保编辑的内容得到持久化存储。通常在完成一系列编辑操作后调用此接口，以防止编辑内容丢失。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| draft_url | string | ✅ | - | 要保存的草稿URL |\n\n### 参数详解\n\n#### draft_url\n\n- **类型**: 字符串\n- **必填**: 是\n- **格式**: 完整的草稿URL，通常由create_draft接口返回\n- **示例**: `https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258`\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| draft_url | string | 保存后的草稿URL，通常与请求中的URL相同 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本保存草稿\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/save_draft \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | draft_url是必填项 | 缺少草稿URL参数 | 提供有效的draft_url |\n| 400 | draft_url格式无效 | URL格式不正确 | 检查URL格式是否正确 |\n| 404 | 草稿不存在 | 指定的草稿无法找到 | 确认草稿URL是否正确且存在 |\n| 500 | 保存失败 | 内部服务错误 | 联系技术支持或稍后重试 |\n| 503 | 服务不可用 | 系统维护中 | 稍后重试 |\n\n## 注意事项\n\n1. **URL有效性**: 确保传入的draft_url是有效且存在的\n2. **网络稳定性**: 保存操作需要稳定的网络连接\n3. **频率控制**: 避免过于频繁的保存操作\n4. **并发安全**: 同一草稿的并发保存可能导致冲突\n\n## 工作流程\n\n1. 验证draft_url参数\n2. 检查草稿是否存在\n3. 获取当前草稿状态\n4. 持久化保存草稿数据\n5. 返回保存结果\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加视频](./add_videos.md)\n- [添加音频](./add_audios.md)\n- [添加图片](./add_images.md)\n- [生成视频](./gen_video.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./save_draft.zh.md) | [English](./save_draft.md)"
  },
  {
    "path": "docs/search_sticker.md",
    "content": "# SEARCH_STICKER API Documentation\n\n## 🌐 Language Switch\n[中文版](./search_sticker.zh.md) | [English](./search_sticker.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/search_sticker\n```\n\n## Function Description\n\nSearch stickers by keywords. This interface is used to search for related sticker materials based on keywords provided by users, returning a list of matching stickers, including detailed information such as image URLs, dimensions, types, etc.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"keyword\": \"人\"\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| keyword | string |✅ | - | Search keyword |\n\n### Parameter Details\n\n#### keyword\n\n- **Type**: string\n- **Description**: Keyword to search for stickers\n- **Example**: \"人\", \"花\", \"动物\"\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"data\": [\n    {\n      \"sticker\": {\n        \"large_image\": {\n          \"image_url\": \"https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/29351205dbd943658d94c8feb17e5ed4~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=r18I9uLQzgm%2FcvF8WNLbgw8BRwg%3D\"\n        },\n        \"preview_cover\": \"\",\n        \"sticker_package\": {\n          \"height_per_frame\": 540,\n          \"size\": 305932,\n          \"width_per_frame\": 540\n        },\n        \"sticker_type\": 1,\n        \"track_thumbnail\": \"https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/29351205dbd943658d94c8feb17e5ed4~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=NqeKYGyeqIjCzF0Ls07ctnP%2BehI%3D&format=.png\"\n      },\n      \"sticker_id\": \"7521200021564427545\",\n      \"title\": \"大笑\"\n    }\n  ]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| data | array | Sticker data list |\n| sticker | object | Detailed sticker information |\n| large_image | object | Large image information |\n| image_url | string | Image URL |\n| preview_cover | string | Preview cover |\n| sticker_package | object | Sticker package information |\n| height_per_frame | number | Height per frame |\n| size | number | Sticker package size |\n| width_per_frame | number | Width per frame |\n| sticker_type | number | Sticker type |\n| track_thumbnail | string | Track thumbnail |\n| sticker_id | string | Sticker ID |\n| title | string | Sticker title |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Search Stickers with Keyword \"人\"\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/search_sticker \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"人\"\n  }'\n```\n\n#### 2. Search Stickers with Keyword \"动物\"\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/search_sticker \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"动物\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | keyword is required | Missing keyword parameter | Provide a valid keyword parameter |\n\n## Notes\n\n1. **Keyword Matching**: Current implementation uses simple title matching, can be extended to full-text search in actual applications\n2. **Data Source**: Currently returns mock data, in actual applications should connect to sticker database or call external APIs\n3. **Performance Consideration**: For large sticker datasets, should consider pagination and caching mechanisms\n\n## Workflow\n\n1. Validate required parameter (keyword)\n2. Call service layer to search for stickers\n3. Return matching sticker list\n\n## Related Interfaces\n\n- [Add Sticker](./add_sticker.md)\n- [Create Draft](./create_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/search_sticker.zh.md",
    "content": "# SEARCH_STICKER API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/search_sticker\n```\n\n## 功能描述\n\n根据关键词搜索贴纸。该接口用于根据用户提供的关键词搜索相关的贴纸素材，返回匹配的贴纸列表，包括贴纸的详细信息如图片URL、尺寸、类型等。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"keyword\": \"人\"\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| keyword | string | ✅ | - | 搜索关键词 |\n\n### 参数详解\n\n#### keyword\n\n- **类型**: string\n- **说明**: 搜索贴纸的关键词\n- **示例**: \"人\", \"花\", \"动物\"\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"data\": [\n    {\n      \"sticker\": {\n        \"large_image\": {\n          \"image_url\": \"https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/29351205dbd943658d94c8feb17e5ed4~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=r18I9uLQzgm%2FcvF8WNLbgw8BRwg%3D\"\n        },\n        \"preview_cover\": \"\",\n        \"sticker_package\": {\n          \"height_per_frame\": 540,\n          \"size\": 305932,\n          \"width_per_frame\": 540\n        },\n        \"sticker_type\": 1,\n        \"track_thumbnail\": \"https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/29351205dbd943658d94c8feb17e5ed4~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=NqeKYGyeqIjCzF0Ls07ctnP%2BehI%3D&format=.png\"\n      },\n      \"sticker_id\": \"7521200021564427545\",\n      \"title\": \"大笑\"\n    }\n  ]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| data | array | 贴纸数据列表 |\n| sticker | object | 贴纸详细信息 |\n| large_image | object | 大图信息 |\n| image_url | string | 图片URL |\n| preview_cover | string | 预览封面 |\n| sticker_package | object | 贴纸包信息 |\n| height_per_frame | number | 每帧高度 |\n| size | number | 贴纸包大小 |\n| width_per_frame | number | 每帧宽度 |\n| sticker_type | number | 贴纸类型 |\n| track_thumbnail | string | 轨道缩略图 |\n| sticker_id | string | 贴纸ID |\n| title | string | 贴纸标题 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 搜索关键词为\"人\"的贴纸\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/search_sticker \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"人\"\n  }'\n```\n\n#### 2. 搜索关键词为\"动物\"的贴纸\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/search_sticker \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"动物\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | keyword是必填项 | 缺少关键词参数 | 提供有效的keyword参数 |\n\n## 注意事项\n\n1. **关键词匹配**: 当前实现为简单的标题匹配，实际应用中可以扩展为全文搜索\n2. **数据来源**: 当前返回的是模拟数据，实际应用中应该连接贴纸数据库或调用外部API\n3. **性能考虑**: 对于大量贴纸数据，应考虑分页和缓存机制\n\n## 工作流程\n\n1. 验证必填参数（keyword）\n2. 调用服务层搜索贴纸\n3. 返回匹配的贴纸列表\n\n## 相关接口\n\n- [添加贴纸](./add_sticker.md)\n- [创建草稿](./create_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/str_list_to_objs.md",
    "content": "# STR_LIST_TO_OBJS API Documentation\n\n## 🌐 Language Switch\n[中文版](./str_list_to_objs.zh.md) | [English](./str_list_to_objs.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/str_list_to_objs\n```\n\n## Function Description\n\nConvert string list to object list. This interface is used to convert input string list to object list format.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"infos\": [\n    \"https://assets.jcaigc.cn/min.mp4\",\n    \"https://assets.jcaigc.cn/max.mp4\"\n  ]\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| infos | array[string] |✅ | - | String list |\n\n### Parameter Details\n\n#### infos\n\n- **Type**: array[string]\n- **Description**: String list to convert\n- **Example**: `[\"https://assets.jcaigc.cn/min.mp4\", \"https://assets.jcaigc.cn/max.mp4\"]`\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"infos\": [\n    {\n      \"output\": \"https://assets.jcaigc.cn/min.mp4\"\n    },\n    {\n      \"output\": \"https://assets.jcaigc.cn/max.mp4\"\n    }\n  ]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| infos | array[object] | Object list |\n| output | string | URL address |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Usage\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/str_list_to_objs \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"infos\": [\n      \"https://assets.jcaigc.cn/min.mp4\",\n      \"https://assets.jcaigc.cn/max.mp4\"\n    ]\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | infos is required | Missing infos parameter | Provide a valid infos parameter |\n| 500 | String list conversion failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Parameter Requirements**: infos parameter is required\n2. **Return Value**: Convert input string list to object list containing output fields\n\n## Workflow\n\n1. Validate required parameter (infos)\n2. Call service layer to handle business logic\n3. Return converted object list\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/str_list_to_objs.zh.md",
    "content": "# STR_LIST_TO_OBJS API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/str_list_to_objs\n```\n\n## 功能描述\n\n字符串列表转化成对象列表。该接口用于将输入的字符串列表转换为对象列表格式。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"infos\": [\n    \"https://assets.jcaigc.cn/min.mp4\",\n    \"https://assets.jcaigc.cn/max.mp4\"\n  ]\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| infos | array[string] | ✅ | - | 字符串列表 |\n\n### 参数详解\n\n#### infos\n\n- **类型**: array[string]\n- **说明**: 需要转换的字符串列表\n- **示例**: `[\"https://assets.jcaigc.cn/min.mp4\", \"https://assets.jcaigc.cn/max.mp4\"]`\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"infos\": [\n    {\n      \"output\": \"https://assets.jcaigc.cn/min.mp4\"\n    },\n    {\n      \"output\": \"https://assets.jcaigc.cn/max.mp4\"\n    }\n  ]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| infos | array[object] | 对象列表 |\n| output | string | URL地址 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本使用\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/str_list_to_objs \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"infos\": [\n      \"https://assets.jcaigc.cn/min.mp4\",\n      \"https://assets.jcaigc.cn/max.mp4\"\n    ]\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | infos是必填项 | 缺少infos参数 | 提供有效的infos参数 |\n| 500 | 字符串列表转换失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **参数要求**: infos参数为必填项\n2. **返回值**: 将输入的字符串列表转换为包含output字段的对象列表\n\n## 工作流程\n\n1. 验证必填参数（infos）\n2. 调用服务层处理业务逻辑\n3. 返回转换后的对象列表\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/str_to_list.md",
    "content": "# STR_TO_LIST API Documentation\n\n## 🌐 Language Switch\n[中文版](./str_to_list.zh.md) | [English](./str_to_list.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/str_to_list\n```\n\n## Function Description\n\nConvert string to list. This interface is used to convert input string to list format.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"obj\": \"{   \\\"infos\\\": [     \\\"https://assets.jcaigc.cn/min.mp4\\\",     \\\"https://assets.jcaigc.cn/max.mp4\\\"   ] }\"\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| obj | string |✅ | - | Object content |\n\n### Parameter Details\n\n#### obj\n\n- **Type**: string\n- **Description**: String content to convert\n- **Example**: `\"{   \\\"infos\\\": [     \\\"https://assets.jcaigc.cn/min.mp4\\\",     \\\"https://assets.jcaigc.cn/max.mp4\\\"   ] }\"`\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"infos\": [\n    \"{   \\\"infos\\\": [     \\\"https://assets.jcaigc.cn/min.mp4\\\",     \\\"https://assets.jcaigc.cn/max.mp4\\\"   ] }\"\n  ]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| infos | array[string] | String list |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Usage\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/str_to_list \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"obj\": \"{   \\\"infos\\\": [     \\\"https://assets.jcaigc.cn/min.mp4\\\",     \\\"https://assets.jcaigc.cn/max.mp4\\\"   ] }\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | obj is required | Missing obj parameter | Provide a valid obj parameter |\n| 500 | String to list conversion failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Parameter Requirements**: obj parameter is required\n2. **Return Value**: Put input string as single element in list and return\n\n## Workflow\n\n1. Validate required parameter (obj)\n2. Call service layer to handle business logic\n3. Return converted string list\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/str_to_list.zh.md",
    "content": "# STR_TO_LIST API 接口文档\n\n## 🌐 语言切换\n[中文版](./add_audios.zh.md) | [English](./add_audios.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/str_to_list\n```\n\n## 功能描述\n\n字符转列表。该接口用于将输入的字符串转换为列表格式。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"obj\": \"{   \\\"infos\\\": [     \\\"https://assets.jcaigc.cn/min.mp4\\\",     \\\"https://assets.jcaigc.cn/max.mp4\\\"   ] }\"\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 | 必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| obj | string | ✅ | - | 对象内容 |\n\n### 参数详解\n\n#### obj\n\n- **类型**: string\n- **说明**: 需要转换的字符串内容\n- **示例**: `\"{   \\\"infos\\\": [     \\\"https://assets.jcaigc.cn/min.mp4\\\",     \\\"https://assets.jcaigc.cn/max.mp4\\\"   ] }\"`\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"infos\": [\n    \"{   \\\"infos\\\": [     \\\"https://assets.jcaigc.cn/min.mp4\\\",     \\\"https://assets.jcaigc.cn/max.mp4\\\"   ] }\"\n  ]\n}\n```\n\n### 响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| infos | array[string] | 字符串列表 |\n\n### 错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本使用\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/str_to_list \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"obj\": \"{   \\\"infos\\\": [     \\\"https://assets.jcaigc.cn/min.mp4\\\",     \\\"https://assets.jcaigc.cn/max.mp4\\\"   ] }\"\n  }'\n```\n\n## 错误码说明\n\n| 错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | obj是必填项 | 缺少obj参数 | 提供有效的obj参数 |\n| 500 | 字符转列表失败 | 内部处理错误 | 联系技术支持 |\n\n## 注意事项\n\n1. **参数要求**: obj参数为必填项\n2. **返回值**: 将输入的字符串作为单个元素放入列表中返回\n\n## 工作流程\n\n1. 验证必填参数（obj）\n2. 调用服务层处理业务逻辑\n3. 返回转换后的字符串列表\n\n## 相关接口\n\n- [创建草稿](./create_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>"
  },
  {
    "path": "docs/timelines.md",
    "content": "# TIMELINES API Documentation\n\n## 🌐 Language Switch\n[中文版](./timelines.zh.md) | [English](./timelines.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/timelines\n```\n\n## Function Description\n\nCreate timelines based on specified duration and quantity. This interface is used to generate timeline configurations needed for video editing, supporting multiple timeline types and start time settings, providing time reference for subsequent material addition and editing.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"duration\": 10000000,\n  \"num\": 3,\n  \"start\": 0,\n  \"type\": \"equal\"\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| duration | number |✅ | - | Total duration (microseconds) |\n| num | number |✅ | - | Number of time segments |\n| start | number |❌ | 0 | Start time (microseconds) |\n| type | string |❌ | \"equal\" | Timeline type |\n\n### Parameter Details\n\n#### duration\n- **Type**: number\n- **Description**: Total duration in microseconds (1 second = 1,000,000 microseconds)\n- **Example**: 10000000 (10 seconds)\n\n#### num\n- **Type**: number\n- **Description**: Number of time segments to create\n- **Example**: 3 (Create 3 time segments)\n\n#### start\n- **Type**: number\n- **Description**: Start time of the timeline in microseconds\n- **Default**: 0\n- **Example**: 2000000 (Start from 2 seconds)\n\n#### type\n- **Type**: string\n- **Description**: Timeline segmentation type\n- **Options**: \n  - \"equal\" - Equal division timeline\n  - \"custom\" - Custom timeline\n- **Default**: \"equal\"\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"timelines\": [\n    {\n      \"start\": 0,\n      \"end\": 3333333\n    },\n    {\n      \"start\": 3333333,\n      \"end\": 6666666\n    },\n    {\n      \"start\": 6666666,\n      \"end\": 10000000\n    }\n  ],\n  \"all_timelines\": [\n    {\n      \"start\": 0,\n      \"end\": 10000000\n    }\n  ]\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| timelines | array | Array of segmented timelines |\n| all_timelines | array | Array of complete timelines |\n| start | number | Start time of time segment (microseconds) |\n| end | number | End time of time segment (microseconds) |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Timeline Creation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/timelines \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"duration\": 15000000,\n    \"num\": 5,\n    \"start\": 0,\n    \"type\": \"equal\"\n  }'\n```\n\n#### 2. Timeline with Start Time\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/timelines \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"duration\": 20000000,\n    \"num\": 4,\n    \"start\": 5000000,\n    \"type\": \"equal\"\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | duration is required | Missing total duration parameter | Provide valid duration parameter |\n| 400 | num is required | Missing time segment count parameter | Provide valid num parameter |\n| 400 | duration must be greater than 0 | Invalid duration parameter | Use duration value greater than 0 |\n| 400 | num must be greater than 0 | Invalid count parameter | Use count value greater than 0 |\n| 400 | Invalid timeline type | Unsupported type parameter | Use supported timeline type |\n| 500 | Timeline calculation failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n2. **Parameter Requirements**: duration and num are required parameters\n3. **Time Range**: Ensure start + (duration/num) * num <= total duration\n4. **Type Selection**: Choose appropriate timeline type based on actual needs\n5. **Precision Consideration**: Microsecond-level time precision is suitable for precise video editing\n\n## Workflow\n\n1. Validate required parameters (duration, num)\n2. Check parameter validity (positive numbers, reasonable range)\n3. Calculate timeline segmentation method based on type\n4. Generate segmented timeline array\n5. Generate complete timeline array\n6. Return timeline configuration result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Audio Timelines](./audio_timelines.md)\n- [Video Infos](./video_infos.md)\n- [Images Infos](./imgs_infos.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### Language Switch\n[中文版](./timelines.zh.md) | [English](./timelines.md)"
  },
  {
    "path": "docs/timelines.zh.md",
    "content": "# TIMELINES API 接口文档\n\n## 🌐 语言切换\n[中文版](./timelines.zh.md) | [English](./timelines.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/timelines\n```\n\n## 功能描述\n\n根据指定的时长和数量创建时间线。该接口用于生成视频编辑所需的时间线配置，支持多种时间线类型和起始时间设置，为后续的素材添加和编辑提供时间参考。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"duration\": 10000000,\n  \"num\": 3,\n  \"start\": 0,\n  \"type\": \"equal\"\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 |必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| duration | number |✅ | - |总时长(微秒) |\n| num | number |✅ | - | 时间段数量 |\n| start | number |❌ | 0 |时间(微秒) |\n| type | string |❌ | \"equal\" | 时间线类型 |\n\n### 参数详解\n\n#### duration\n- **类型**: number\n- **说明**:总时长，单位为微秒（1秒 = 1,000,000微秒）\n- **示例**: 10000000 (10秒)\n\n#### num\n- **类型**: number\n- **说明**:需要创建的时间段数量\n- **示例**: 3 (创建3个时间段)\n\n#### start\n- **类型**: number\n- **说明**: 时间线的起始时间，单位为微秒\n- **默认值**: 0\n- **示例**: 2000000 (从2秒开始)\n\n#### type\n- **类型**: string\n- **说明**: 时间线分割类型\n- **可选值**: \n  - \"equal\" -等分时间线\n  - \"custom\" - 自定义时间线\n- **默认值**: \"equal\"\n\n## 响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"timelines\": [\n    {\n      \"start\": 0,\n      \"end\": 3333333\n    },\n    {\n      \"start\": 3333333,\n      \"end\": 6666666\n    },\n    {\n      \"start\": 6666666,\n      \"end\": 10000000\n    }\n  ],\n  \"all_timelines\": [\n    {\n      \"start\": 0,\n      \"end\": 10000000\n    }\n  ]\n}\n```\n\n###响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| timelines | array | 分段时间线数组 |\n| all_timelines | array |完整时间线数组 |\n| start | number | 时间段开始时间(微秒) |\n| end | number | 时间段结束时间(微秒) |\n\n###错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1.基本时间线创建\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/timelines \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"duration\": 15000000,\n    \"num\": 5,\n    \"start\": 0,\n    \"type\": \"equal\"\n  }'\n```\n\n#### 2.带始时间的时间线\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/timelines \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"duration\": 20000000,\n    \"num\": 4,\n    \"start\": 5000000,\n    \"type\": \"equal\"\n  }'\n```\n\n##错误码说明\n\n| 错误码 |错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | duration是必填项 |缺少总时长参数 | 提供有效的duration参数 |\n| 400 | num是必填项 |缺少时间段数量参数 | 提供有效的num参数 |\n| 400 | duration必须大于0 | 时长参数无效 | 使用大于0的时长值 |\n| 400 | num必须大于0 | 数量参数无效 | 使用大于0的数量值 |\n| 400 | 时间线类型无效 | type参数不支持 | 使用支持的时间线类型 |\n| 500 | 时间线计算失败 |内部处理错误 |联技术支持术支持 |\n\n## 注意事项\n\n1. **时间单位**:所有时间参数使用微秒（1秒 = 1,000,000微秒）\n2. **参数要求**: duration和num为必填参数\n3. **时间范围**:确保start + (duration/num) * num <=总时长\n4. **类型选择**:根据实际需求选择合适的时间线类型\n5. **精度考虑**:微秒级别的时间精度适合精确的视频编辑\n\n##工作流程\n\n1.验证必填参数（duration, num）\n2.检查参数有效性（正数、合理范围）\n3.根据type类型计算时间线分割方式\n4. 生成分段时间线数组\n5. 生成完整时间线数组\n6. 返回时间线配置结果\n\n##相关接口\n\n- [创建草稿](./create_draft.md)\n- [音频时间线](./audio_timelines.md)\n- [视频信息](./video_infos.md)\n- [图片信息](./imgs_infos.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./timelines.zh.md) | [English](./timelines.md)"
  },
  {
    "path": "docs/video_infos.md",
    "content": "# VIDEO_INFOS API Documentation\n\n## 🌐 Language Switch\n[中文版](./video_infos.zh.md) | [English](./video_infos.md)\n\n## Interface Information\n\n```\nPOST /openapi/capcut-mate/v1/video_infos\n```\n\n## Function Description\n\nGenerate video information based on video URLs and timelines. This interface converts video file URLs and timeline configurations into the video information format required by Jianying drafts, supporting mask and transition settings.\n\n## More Documentation\n\n📖 For more detailed documentation and tutorials, please visit: [https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## Request Parameters\n\n```json\n{\n  \"video_urls\": [\"https://assets.jcaigc.cn/video1.mp4\", \"https://assets.jcaigc.cn/video2.mp4\"],\n  \"timelines\": [\n    {\"start\": 0, \"end\": 3000000},\n    {\"start\": 3000000, \"end\": 6000000}\n  ],\n  \"height\": 1080,\n  \"width\": 1920,\n  \"mask\": \"circle\",\n  \"transition\": \"cross_fade\",\n  \"transition_duration\": 300000,\n  \"volume\": 1.0\n}\n```\n\n### Parameter Description\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| video_urls | array[string] |✅ | - | Video file URL array |\n| timelines | array[object] |✅ | - | Timeline configuration array |\n| height | number |❌ | 1080 | Video height |\n| width | number |❌ | 1920 | Video width |\n| mask | string |❌ | None | Mask type |\n| transition | string |❌ | None | Transition effect |\n| transition_duration | number |❌ | 300000 | Transition duration (microseconds) |\n| volume | number |❌ | 1.0 | Volume level (0.0-2.0) |\n\n## Response Format\n\n### Success Response (200)\n\n```json\n{\n  \"infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video1.mp4\\\",\\\"start\\\":0,\\\"end\\\":3000000,\\\"duration\\\":5000000,\\\"height\\\":1080,\\\"width\\\":1920,\\\"mask\\\":\\\"circle\\\",\\\"transition\\\":\\\"cross_fade\\\",\\\"transition_duration\\\":300000,\\\"volume\\\":1.0},{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video2.mp4\\\",\\\"start\\\":3000000,\\\"end\\\":6000000,\\\"duration\\\":5000000,\\\"height\\\":1080,\\\"width\\\":1920,\\\"mask\\\":\\\"circle\\\",\\\"transition\\\":\\\"cross_fade\\\",\\\"transition_duration\\\":300000,\\\"volume\\\":1.0}]\"\n}\n```\n\n### Response Field Description\n\n| Field | Type | Description |\n|-------|------|-------------|\n| infos | string | Video information JSON string |\n\n### Error Response (4xx/5xx)\n\n```json\n{\n  \"detail\": \"Error message description\"\n}\n```\n\n## Usage Examples\n\n### cURL Examples\n\n#### 1. Basic Video Information Generation\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/video_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"video_urls\": [\"https://assets.jcaigc.cn/intro.mp4\"],\n    \"timelines\": [{\"start\": 0, \"end\": 5000000}],\n    \"height\": 1080,\n    \"width\": 1920\n  }'\n```\n\n#### 2. Video Information with Mask and Transition\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/video_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"video_urls\": [\"https://assets.jcaigc.cn/clip1.mp4\", \"https://assets.jcaigc.cn/clip2.mp4\"],\n    \"timelines\": [{\"start\": 0, \"end\": 3000000}, {\"start\": 3000000, \"end\": 6000000}],\n    \"mask\": \"circle\",\n    \"transition\": \"cross_fade\",\n    \"volume\": 0.8\n  }'\n```\n\n## Error Code Description\n\n| Error Code | Error Message | Description | Solution |\n|------------|---------------|-------------|----------|\n| 400 | video_urls is required | Missing video URL parameter | Provide valid video URL array |\n| 400 | timelines is required | Missing timeline parameter | Provide valid timeline array |\n| 400 | Array length mismatch | video_urls and timelines array lengths don't match | Ensure both arrays have the same length |\n| 400 | Invalid volume value | Volume not in range 0.0-2.0 | Use volume value between 0.0-2.0 |\n| 404 | Video resource not found | Video URL inaccessible | Check if video URL is accessible |\n| 500 | Video information generation failed | Internal processing error | Contact technical support |\n\n## Notes\n\n1. **Array Matching**: video_urls and timelines array lengths must be the same\n2. **Time Unit**: All time parameters use microseconds (1 second = 1,000,000 microseconds)\n3. **Resolution Settings**: height and width parameters are used to set video display resolution\n4. **Mask Types**: Support circle, rectangle, etc. mask types\n5. **Volume Range**: volume value must be between 0.0-2.0\n6. **Network Access**: Video URLs must be accessible\n\n## Workflow\n\n1. Validate required parameters (video_urls, timelines)\n2. Check array length matching\n3. Validate timeline parameter validity\n4. Set video resolution parameters\n5. Apply mask and transition parameters\n6. Generate corresponding video information for each video URL\n7. Convert information to JSON string format\n8. Return processing result\n\n## Related Interfaces\n\n- [Create Draft](./create_draft.md)\n- [Add Videos](./add_videos.md)\n- [Timelines](./timelines.md)\n- [Save Draft](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **Project Resources**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### Language Switch\n[中文版](./video_infos.zh.md) | [English](./video_infos.md)"
  },
  {
    "path": "docs/video_infos.zh.md",
    "content": "# VIDEO_INFOS API 接口文档\n\n## 🌐 语言切换\n[中文版](./video_infos.zh.md) | [English](./video_infos.md)\n\n## 接口信息\n\n```\nPOST /openapi/capcut-mate/v1/video_infos\n```\n\n## 功能描述\n\n根据视频URL和时间线生成视频信息。该接口将视频文件URL和时间线配置转换为剪映草稿所需的视频信息格式，支持遮罩和转场设置。\n\n## 更多文档\n\n📖 更多详细文档和教程请访问：[https://docs.jcaigc.cn](https://docs.jcaigc.cn)\n\n## 请求参数\n\n```json\n{\n  \"video_urls\": [\"https://assets.jcaigc.cn/video1.mp4\", \"https://assets.jcaigc.cn/video2.mp4\"],\n  \"timelines\": [\n    {\"start\": 0, \"end\": 3000000},\n    {\"start\": 3000000, \"end\": 6000000}\n  ],\n  \"height\": 1080,\n  \"width\": 1920,\n  \"mask\": \"circle\",\n  \"transition\": \"cross_fade\",\n  \"transition_duration\": 300000,\n  \"volume\": 1.0\n}\n```\n\n### 参数说明\n\n| 参数名 | 类型 |必填 | 默认值 | 说明 |\n|--------|------|------|--------|------|\n| video_urls | array[string] |✅ | - |视频文件URL数组 |\n| timelines | array[object] |✅ | - | 时间线配置数组 |\n| height | number |❌ | 1080 |视频高度 |\n| width | number |❌ | 1920 |视频宽度 |\n| mask | string |❌ | None |遮罩类型 |\n| transition | string |❌ | None |转场效果 |\n| transition_duration | number |❌ | 300000 |转场时长(微秒) |\n| volume | number |❌ | 1.0 |音量大小(0.0-2.0) |\n\n##响应格式\n\n### 成功响应 (200)\n\n```json\n{\n  \"infos\": \"[{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video1.mp4\\\",\\\"start\\\":0,\\\"end\\\":3000000,\\\"duration\\\":5000000,\\\"height\\\":1080,\\\"width\\\":1920,\\\"mask\\\":\\\"circle\\\",\\\"transition\\\":\\\"cross_fade\\\",\\\"transition_duration\\\":300000,\\\"volume\\\":1.0},{\\\"video_url\\\":\\\"https://assets.jcaigc.cn/video2.mp4\\\",\\\"start\\\":3000000,\\\"end\\\":6000000,\\\"duration\\\":5000000,\\\"height\\\":1080,\\\"width\\\":1920,\\\"mask\\\":\\\"circle\\\",\\\"transition\\\":\\\"cross_fade\\\",\\\"transition_duration\\\":300000,\\\"volume\\\":1.0}]\"\n}\n```\n\n###响应字段说明\n\n| 字段名 | 类型 | 说明 |\n|--------|------|------|\n| infos | string |视频信息JSON字符串 |\n\n###错误响应 (4xx/5xx)\n\n```json\n{\n  \"detail\": \"错误信息描述\"\n}\n```\n\n## 使用示例\n\n### cURL 示例\n\n#### 1. 基本视频信息生成\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/video_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"video_urls\": [\"https://assets.jcaigc.cn/intro.mp4\"],\n    \"timelines\": [{\"start\": 0, \"end\": 5000000}],\n    \"height\": 1080,\n    \"width\": 1920\n  }'\n```\n\n#### 2.带遮罩和转场的视频信息\n\n```bash\ncurl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/video_infos \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"video_urls\": [\"https://assets.jcaigc.cn/clip1.mp4\", \"https://assets.jcaigc.cn/clip2.mp4\"],\n    \"timelines\": [{\"start\": 0, \"end\": 3000000}, {\"start\": 3000000, \"end\": 6000000}],\n    \"mask\": \"circle\",\n    \"transition\": \"cross_fade\",\n    \"volume\": 0.8\n  }'\n```\n\n##错误码说明\n\n|错误码 | 错误信息 | 说明 | 解决方案 |\n|--------|----------|------|----------|\n| 400 | video_urls是必填项 |缺少视频URL参数 | 提供有效的视频URL数组 |\n| 400 | timelines是必填项 |缺少时间线参数 | 提供有效的时间线数组 |\n| 400 | 数组长度不匹配 | video_urls和timelines长度不一致 |确保两个数组长度相同 |\n| 400 | volume值无效 |音量不在0.0-2.0范围内 | 使用0.0-2.0之间的音量值 |\n| 404 |视频资源不存在 |视频URL无法访问 |检查视频URL是否可访问 |\n| 500 |视频信息生成失败 |内部处理错误 |联技术支持 |\n\n## 注意事项\n\n1. **数组匹配**: video_urls和timelines数组长度必须相同\n2. **时间单位**:所有时间参数使用微秒（1秒 = 1,000,000微秒）\n3. **分辨率设置**: height和width参数用于设置视频显示分辨率\n4. **遮罩类型**:支持circle、rectangle等遮罩类型\n5. **音量范围**: volume值必须在0.0-2.0范围内\n6. **网络访问**:视频URL必须可以正常访问\n\n##工作流程\n\n1.验证必填参数（video_urls, timelines）\n2.检查数组长度匹配\n3.验证时间线参数有效性\n4. 设置视频分辨率参数\n5.应用遮罩和转场参数\n6. 为每个视频URL生成对应的视频信息\n7.将信息转换为JSON字符串格式\n8. 返回处理结果\n\n##相关接口\n\n- [创建草稿](./create_draft.md)\n- [添加视频](./add_videos.md)\n- [时间线](./timelines.md)\n- [保存草稿](./save_draft.md)\n\n---\n\n<div align=\"right\">\n\n📚 **项目资源**  \n**GitHub**: [https://github.com/Hommy-master/capcut-mate](https://github.com/Hommy-master/capcut-mate)  \n**Gitee**: [https://gitee.com/taohongmin-gitee/capcut-mate](https://gitee.com/taohongmin-gitee/capcut-mate)\n\n</div>\n\n### 语言切换\n[中文版](./video_infos.zh.md) | [English](./video_infos.md)"
  },
  {
    "path": "exceptions.py",
    "content": "from enum import Enum\n\n# 自定义错误码\nclass CustomError(Enum):\n    \"\"\"错误码枚举类（支持中英文）\"\"\"\n    \n    # ===== 基础错误码 (1000-1999) =====\n    SUCCESS = (0, \"成功\", \"Success\")\n    PARAM_VALIDATION_FAILED = (1001, \"参数校验失败\", \"Parameter validation failed\")\n    RESOURCE_NOT_FOUND = (1002, \"资源不存在\", \"Resource not found\")\n    PERMISSION_DENIED = (1003, \"权限不足\", \"Permission denied\")\n    AUTHENTICATION_FAILED = (1004, \"认证失败\", \"Authentication failed\")\n    \n    # ===== 业务错误码 (2000-2999) =====\n    INVALID_DRAFT_URL = (2001, \"无效的草稿URL\", \"Invalid draft URL\")\n    DRAFT_CREATE_FAILED = (2002, \"草稿创建失败\", \"Draft creation failed\")\n    INVALID_VIDEO_INFO = (2003, \"无效的视频信息，请检查video_infos字段值是否正确\", \"Invalid video information, please check if the value of the video_infos field is correct.\")\n    FILE_SIZE_LIMIT_EXCEEDED = (2004, \"文件大小超出限制\", \"File size exceeds the limit\")\n    DOWNLOAD_FILE_FAILED = (2005, \"下载文件失败\", \"Download file failed\")\n    VIDEO_ADD_FAILED = (2006, \"视频添加失败\", \"Video addition failed\")\n    INVALID_AUDIO_INFO = (2007, \"无效的音频信息，请检查audio_infos字段值是否正确\", \"Invalid audio information, please check if the value of the audio_infos field is correct.\")\n    AUDIO_ADD_FAILED = (2008, \"音频添加失败\", \"Audio addition failed\")\n    INVALID_IMAGE_INFO = (2009, \"无效的图片信息，请检查image_infos字段值是否正确\", \"Invalid image information, please check if the value of the image_infos field is correct.\")\n    IMAGE_ADD_FAILED = (2010, \"图片添加失败\", \"Image addition failed\")\n    INVALID_STICKER_INFO = (2011, \"无效的贴纸信息，请检查贴纸参数是否正确\", \"Invalid sticker information, please check if sticker parameters are correct.\")\n    STICKER_ADD_FAILED = (2012, \"贴纸添加失败\", \"Sticker addition failed\")\n    INVALID_KEYFRAME_INFO = (2013, \"无效的关键帧信息，请检查keyframes字段值是否正确\", \"Invalid keyframe information, please check if the value of the keyframes field is correct.\")\n    KEYFRAME_ADD_FAILED = (2014, \"关键帧添加失败\", \"Keyframe addition failed\")\n    SEGMENT_NOT_FOUND = (2015, \"片段未找到，请检查segment_id是否正确\", \"Segment not found, please check if the segment_id is correct.\")\n    INVALID_SEGMENT_TYPE = (2016, \"无效的片段类型，该片段不支持关键帧\", \"Invalid segment type, this segment does not support keyframes.\")\n    INVALID_KEYFRAME_PROPERTY = (2017, \"无效的关键帧属性类型\", \"Invalid keyframe property type.\")\n    INVALID_CAPTION_INFO = (2018, \"无效的字幕信息，请检查captions字段值是否正确\", \"Invalid caption information, please check if the value of the captions field is correct.\")\n    CAPTION_ADD_FAILED = (2019, \"字幕添加失败\", \"Caption addition failed\")\n    INVALID_EFFECT_INFO = (2020, \"无效的特效信息，请检查effect_infos字段值是否正确\", \"Invalid effect information, please check if the value of the effect_infos field is correct.\")\n    EFFECT_ADD_FAILED = (2021, \"特效添加失败\", \"Effect addition failed\")\n    EFFECT_NOT_FOUND = (2022, \"特效未找到，请检查特效名称是否正确\", \"Effect not found, please check if the effect name is correct.\")\n    INVALID_MASK_INFO = (2023, \"无效的遮罩信息，请检查遮罩参数是否正确\", \"Invalid mask information, please check if mask parameters are correct.\")\n    MASK_ADD_FAILED = (2024, \"遮罩添加失败\", \"Mask addition failed\")\n    MASK_NOT_FOUND = (2025, \"遮罩类型未找到，请检查遮罩名称是否正确\", \"Mask type not found, please check if the mask name is correct.\")\n    INVALID_TEXT_STYLE_INFO = (2026, \"无效的文本样式信息，请检查文本或关键词参数\", \"Invalid text style information, please check text or keyword parameters.\")\n    TEXT_STYLE_CREATE_FAILED = (2027, \"文本样式创建失败\", \"Text style creation failed\")\n    MATERIAL_CREATE_FAILED = (2028, \"素材创建失败\", \"Material creation failed\")\n    TEXT_ANIMATION_GET_FAILED = (2029, \"获取文字动画失败\", \"Get text animation failed\")\n    VIDEO_GENERATION_SUBMIT_FAILED = (2030, \"视频生成任务提交失败\", \"Video generation task submit failed\")\n    VIDEO_TASK_NOT_FOUND = (2031, \"视频生成任务未找到\", \"Video generation task not found\")\n    VIDEO_STATUS_QUERY_FAILED = (2032, \"视频任务状态查询失败\", \"Video task status query failed\")\n    IMAGE_ANIMATION_GET_FAILED = (2033, \"获取图片动画失败\", \"Get image animation failed\")\n    AUDIO_DURATION_GET_FAILED = (2034, \"获取音频时长失败\", \"Get audio duration failed\")\n    INSUFFICIENT_ACCOUNT_BALANCE = (2035, \"账户余额不足，当前积分需大于 1 才可继续使用服务，请完成充值后重试\", \"Insufficient account balance. A minimum of 1 point is required to continue using the service. Please recharge and try again.\")\n    INVALID_APIKEY = (2036, \"无效的 apiKey\", \"Invalid apiKey\")\n    INVALID_FILTER_INFO = (2037, \"无效的滤镜信息，请检查 filter_infos 字段值是否正确\", \"Invalid filter information, please check if the value of the filter_infos field is correct.\")\n    FILTER_ADD_FAILED = (2038, \"滤镜添加失败\", \"Filter addition failed\")\n    FILTER_NOT_FOUND = (2039, \"滤镜未找到，请检查滤镜名称是否正确\", \"Filter not found, please check if the filter name is correct.\")\n    FILTER_GET_FAILED = (2040, \"获取滤镜列表失败\", \"Get filter list failed\")\n    EFFECT_GET_FAILED = (2041, \"获取特效列表失败\", \"Get effect list failed\")\n    DRAFT_LOCK_TIMEOUT = (2042, \"草稿锁获取超时，同一时间只允许一个操作\", \"Draft lock acquisition timeout, only one operation allowed at a time\")\n\n    # ===== 系统错误码 (9000-9999) =====\n    INTERNAL_SERVER_ERROR = (9998, \"系统内部错误\", \"Internal server error\")\n    UNKNOWN_ERROR = (9999, \"未知异常\", \"Unknown error\")\n\n    def __init__(self, code: int, cn_message: str, en_message: str) -> None:\n        self.code = code\n        self.cn_message = cn_message\n        self.en_message = en_message\n\n    def as_dict(self, detail: str = \"\", lang: str = 'zh') -> dict:\n        \"\"\"转换为API响应格式，支持中英文\"\"\"\n        message = self.cn_message if lang == 'zh' else self.en_message\n        if detail:\n            message += f\"({detail})\"\n        return {\"code\": self.code, \"message\": message}\n\n\n# 自定义异常类\nclass CustomException(Exception):\n    \"\"\"自定义业务异常类\"\"\"\n    def __init__(self, err: CustomError, detail: str = \"\") -> None:\n        self.err = err\n        self.detail = detail\n        super().__init__(err.cn_message)\n"
  },
  {
    "path": "main.py",
    "content": "import asyncio\nfrom contextlib import asynccontextmanager, suppress\n\nfrom fastapi import FastAPI\nfrom src.router import v1_router\nfrom src.utils.draft_downloader import download_draft\nfrom src.utils.logger import logger\nfrom src.middlewares import PrepareMiddleware, ResponseMiddleware, TraceContextMiddleware\n\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n    from src.utils.draft_cleanup import draft_cleanup_background_loop\n\n    cleanup_task = asyncio.create_task(draft_cleanup_background_loop())\n    try:\n        yield\n    finally:\n        cleanup_task.cancel()\n        with suppress(asyncio.CancelledError):\n            await cleanup_task\n\n\n# 1. 创建 FastAPI 应用\napp: FastAPI = FastAPI(title=\"CapCut Mate API\", version=\"1.0\", lifespan=lifespan)\n\n# 2. 注册路由\napp.include_router(router=v1_router, prefix=\"/openapi/capcut-mate\", tags=[\"capcut-mate\"])\n\n# 3. 添加中间件（最后注册的 TraceContextMiddleware 最先处理请求，用于 W3C trace_id）\napp.add_middleware(middleware_class=PrepareMiddleware)\napp.add_middleware(middleware_class=ResponseMiddleware)\napp.add_middleware(middleware_class=TraceContextMiddleware)\n\n# 4. 打印所有路由\nfor r in app.routes:\n    # 1. 取 HTTP 方法列表\n    methods = getattr(r, \"methods\", None) or [getattr(r, \"method\", \"WS\")]\n    # 2. 安全地取路径\n    path = getattr(r, \"path\", \"<unknown>\")\n    # 3. 安全地取函数名\n    name = getattr(r, \"name\", \"<unnamed>\")\n    logger.info(\"Route: %s %s -> %s\", \",\".join(sorted(methods)), path, name)\n\nlogger.info(\"CapCut Mate API\")\n\n# 5. 启动\nif __name__ == \"__main__\":\n    import uvicorn\n    uvicorn.run(app, host=\"0.0.0.0\", port=30000, log_config=None, log_level=\"info\")"
  },
  {
    "path": "openapi.yaml",
    "content": "components:\n    examples:\n        add_audios:\n            value:\n                ReqExample:\n                    audio_infos: '[{\"audio_url\":\"https://www.jcaigc.cn/output/upload/2025-10-27-23/20251027234830.mp3\",\"duration\":23184000,\"end\":23184000,\"start\":0}]'\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=202511262111301f5fceff\n                RespExample:\n                    audio_ids:\n                        - 9000bc9efb744c3196fb1d225993f43d\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=202511262111301f5fceff\n                    track_id: a2d21e5a343c4f1eba3c9234bea16658\n        add_captions:\n            value:\n                ReqExample:\n                    alignment: 1\n                    alpha: 1\n                    bold: false\n                    captions: '[{\"start\":0,\"end\":10000000,\"text\":\"你好，剪映\",\"keyword\":\"好\",\"keyword_color\":\"#457616\",\"keyword_font_size\":15}]'\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=20251216104033617e9734\n                    font_size: 15\n                    has_shadow: false\n                    italic: false\n                    letter_spacing: 0\n                    line_spacing: 0\n                    scale_x: 1\n                    scale_y: 1\n                    style_text: 0\n                    text_color: '#ffffff'\n                    transform_x: 0\n                    transform_y: 0\n                    underline: false\n                RespExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=20251216104033617e9734\n                    segment_ids:\n                        - 1b1102e3d2d14b9eabac064bbe64d2bf\n                    segment_infos:\n                        - end: 10000000\n                          id: 1b1102e3d2d14b9eabac064bbe64d2bf\n                          start: 0\n                    text_ids:\n                        - 52ae035e01584adf8d052533d83948ed\n                    track_id: 7ffdf0f7d67e4d8caff5531f5873d26f\n        add_effects:\n            value:\n                ReqExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=202511262337379d98b90e\n                    effect_infos: '[{\"effect_title\": \"录制边框 III\",\"start\": 0,\"end\": 5000000}]'\n                RespExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=202511262337379d98b90e\n                    effect_ids:\n                        - 34c70fba3619444fa897110b40b39386\n                    segment_ids:\n                        - 23e0c0900c69427f82e44243183706c9\n                    track_id: 2ffea3839d304f83ae29dadc43a18227\n        add_filters:\n            value:\n                ReqExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=20260319205519ce52b6b7\n                    filter_infos: '[{\"filter_title\": \"清透感\", \"start\": 0, \"end\": 5000000, \"intensity\": 100.0}]'\n                RespExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=20260319205519ce52b6b7\n                    filter_ids:\n                        - 5dc1f01ad54a4ff3bc95e689dfc6177b\n                    segment_ids:\n                        - a52328e0df4e4ff9aef4733489e41488\n                    track_id: 90ce51176b89486ebddca926d51af67c\n        add_images:\n            value:\n                ReqExample:\n                    alpha: 1\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=202511262111301f5fceff\n                    image_infos: '[{\"image_url\":\"https://assets.jcaigc.cn/demo.png\",\"width\":1920,\"height\":1080,\"start\":0,\"end\":5000000,\"duration\":5000000,\"animation\":\"淡入淡出\",\"transition\":\"溶解\",\"transition_duration\":500000}]'\n                    scale_x: 1\n                    scale_y: 1\n                    transform_x: 0\n                    transform_y: 0\n                RespExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=202511262111301f5fceff\n                    image_ids:\n                        - fa67760440104ca3adacdfd694fc25da\n                    segment_ids:\n                        - 2d19f38d5f544eecad18847e5eac1745\n                    segment_infos:\n                        - end: 5000000\n                          id: 2d19f38d5f544eecad18847e5eac1745\n                          start: 0\n                    track_id: 38c8dfee92374137998715329494a8f9\n        add_keyframes:\n            value:\n                ReqExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=20251210224255e23f7146\n                    keyframes: '[{\"segment_id\":\"e1933f126437421bb52abdc56f062266\",\"property\":\"KFTypePositionX\",\"offset\":0.5,\"value\":-0.1}]'\n                RespExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=20251210224255e23f7146\n        add_masks:\n            value:\n                ReqExample:\n                    draft_url: 线性\n                    name: 线性\n                    segment_ids:\n                        - beb4adbea83d41d08021cf4e8f219206\n                RespExample: {}\n        add_sticker:\n            value:\n                ReqExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=202511262337379d98b90e\n                    end: 5000000\n                    scale: 1\n                    start: 0\n                    sticker_id: \"7326810673609018675\"\n                    transform_x: 0\n                    transform_y: 0\n                RespExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=202511262337379d98b90e\n                    duration: 5000000\n                    segment_id: 7902e009fcfb44768f6f73e9432b5d5b\n                    sticker_id: \"7326810673609018675\"\n                    track_id: 10b612824bcd4dd882ab764d145dd7ce\n        add_text_style:\n            value:\n                ReqExample:\n                    font_size: 15\n                    keyword: 五个快乐到死的顶级思维\n                    keyword_color: '#ff7100'\n                    keyword_font_size: 15\n                    text: 快乐|顶级思维\n                RespExample:\n                    text_style: '{\"text\":\"快乐|顶级思维\",\"styles\":[{\"fill\":{\"content\":{\"solid\":{\"color\":[1.0,1.0,1.0]}}},\"range\":[0,7],\"size\":15,\"font\":{\"id\":\"\",\"path\":\"\"}}]}'\n        add_videos:\n            value:\n                ReqExample:\n                    alpha: 1\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=202511262111301f5fceff\n                    scale_x: 1\n                    scale_y: 1\n                    scene_timelines: []\n                    transform_x: 0\n                    transform_y: 0\n                    video_infos: '[{\"video_url\": \"https://assets.jcaigc.cn/min.mp4\",\"width\": 1920,\"height\": 1080,\"start\": 0,\"end\": 3000000,\"duration\": 6000000,\"mask\": \"\",\"transition\": \"\",\"transition_duration\": 500000,\"volume\": 1}]'\n                RespExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=202511262111301f5fceff\n                    segment_ids:\n                        - 20285056b4194e2c8944b587ceb592a7\n                    track_id: 720274203a11442280b64570caf362c4\n                    video_ids:\n                        - 9b9f47126f384a6f95434cdc3fed5b7c\n        audio_infos:\n            value:\n                ReqExample:\n                    mp3_urls:\n                        - https://assets.jcaigc.cn/test1.mp3\n                        - https://assets.jcaigc.cn/test2.mp3\n                    timelines:\n                        - end: 284891428\n                          start: 0\n                        - end: 579578774\n                          start: 284891428\n                RespExample:\n                    infos: '[{\"audio_url\": \"https://assets.jcaigc.cn/test1.mp3\", \"start\": 0, \"end\": 284891428}, {\"audio_url\": \"https://assets.jcaigc.cn/test2.mp3\", \"start\": 284891428, \"end\": 579578774}]'\n        audio_timelines:\n            value:\n                ReqExample:\n                    links:\n                        - https://assets.jcaigc.cn/test1.mp3\n                        - https://assets.jcaigc.cn/test2.mp3\n                RespExample:\n                    all_timelines:\n                        - end: 579578776\n                          start: 0\n                    timelines:\n                        - end: 284891429\n                          start: 0\n                        - end: 579578776\n                          start: 284891429\n        caption_infos:\n            value:\n                ReqExample:\n                    font_size: 12\n                    keyword_border_color: '#ff0000'\n                    keyword_color: '#ffef00'\n                    keyword_font_size: 12\n                    keywords:\n                        - '[\"明月\"]'\n                    texts:\n                        - '[\"床前明月光\"]'\n                    timelines:\n                        - end: 5000000\n                          start: 0\n                RespExample:\n                    infos: '[{\"start\": 0, \"end\": 5000000, \"text\": \"[\\\"床前明月光\\\"]\", \"keyword\": \"[\\\"明月\\\"]\", \"keyword_color\": \"#ffef00\", \"keyword_border_color\": \"#ff0000\", \"keyword_font_size\": 12, \"font_size\": 12}]'\n        create_draft:\n            value:\n                ReqExample:\n                    height: 1920\n                    width: 1080\n                RespExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=20251230140504254f511b\n                    tip_url: \"\"\n        easy_create_material:\n            value:\n                ReqExample:\n                    audio_url: https://assets.jcaigc.cn/test1.mp3\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=202511262348074813d881\n                    font_size: 15\n                    img_url: https://assets.jcaigc.cn/demp.png\n                    text: 简创AIGC官网：www.jcaigc.cn\n                    text_color: '#ffffff'\n                    text_transform_y: 0\n                    video_url: https://assets.jcaigc.cn/min.mp4\n                RespExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=202511262348074813d881\n                    message: 成功\n        effect_infos:\n            value:\n                ReqExample:\n                    effects:\n                        - 红包来了\n                        - 雪花\n                    timelines:\n                        - end: 284891428\n                          start: 0\n                        - end: 579578774\n                          start: 284891428\n                RespExample:\n                    infos: '[{\"effect_title\": \"红包来了\", \"start\": 0, \"end\": 284891428}, {\"effect_title\": \"雪花\", \"start\": 284891428, \"end\": 579578774}]'\n        filter_infos:\n            value:\n                ReqExample:\n                    filters:\n                        - 清透感\n                    timelines:\n                        - end: 5000000\n                          start: 0\n                RespExample:\n                    infos: '[{\"filter_title\": \"清透感\", \"start\": 0, \"end\": 5000000, \"intensity\": 100.0}]'\n        gen_video:\n            value:\n                ReqExample:\n                    apiKey: 559a84a5-a9e9-4ade-a26b-e80b732754d6\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025120421372636a27729\n                RespExample:\n                    code: 0\n                    message: 视频生成任务已提交，请使用draft_url查询进度\n        gen_video_status:\n            value:\n                ReqExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025120421372636a27729\n                RespExample:\n                    code: 0\n                    completed_at: 2026-01-31T21:10:10.398727\n                    created_at: 2026-01-31T21:09:15.104249\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025120421372636a27729\n                    error_message: '导出草稿失败: 未在编辑窗口中找到导出按钮'\n                    message: 成功\n                    progress: 0\n                    started_at: 2026-01-31T21:09:15.549183\n                    status: failed\n                    video_url: \"\"\n        get_audio_duration:\n            value:\n                ReqExample:\n                    mp3_url: https://assets.jcaigc.cn/test1.mp3\n                RespExample:\n                    duration: 284891429\n                    message: 成功\n        get_effects:\n            value:\n                ReqExample:\n                    mode: 0\n                RespExample:\n                    effects:\n                        - effect_id: \"1183068\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: \"1998\"\n                          resource_id: \"6981791065204331044\"\n                        - effect_id: \"634717\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 70s\n                          resource_id: \"6706773500792689165\"\n                        - effect_id: \"634889\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 90s画质\n                          resource_id: \"6760946510910722564\"\n                        - effect_id: \"4007303\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: CCD闪光\n                          resource_id: \"7130585796020539941\"\n                        - effect_id: \"934600\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: DV录制框\n                          resource_id: \"6878115805498708493\"\n                        - effect_id: \"1164160\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: DV界面\n                          resource_id: \"6974600764027048462\"\n                        - effect_id: \"972753\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: I Lose You\n                          resource_id: \"6899746903735407117\"\n                        - effect_id: \"972754\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: I Love You\n                          resource_id: \"6899746786294895112\"\n                        - effect_id: \"2254788\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: JVC\n                          resource_id: \"7102302420310430215\"\n                        - effect_id: \"1181892\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: List边框\n                          resource_id: \"6981463637676266020\"\n                        - effect_id: \"1033288\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: MV封面\n                          resource_id: \"6925314612204147214\"\n                        - effect_id: \"1483460\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: New Year\n                          resource_id: \"7041771617315197453\"\n                        - effect_id: \"884226\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: PS边框\n                          resource_id: \"6860306184595837448\"\n                        - effect_id: \"1025970\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: RGB描边\n                          resource_id: \"6922698007653650957\"\n                        - effect_id: \"931458\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: VCR\n                          resource_id: \"6876012864679711245\"\n                        - effect_id: \"634719\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: X-Signal\n                          resource_id: \"6709706971638927875\"\n                        - effect_id: \"1162978\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: X开幕\n                          resource_id: \"6974024838000153096\"\n                        - effect_id: \"14578173\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: betamax\n                          resource_id: \"7239937281937642041\"\n                        - effect_id: \"1647776\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: emoji钻石\n                          resource_id: \"7078694071245476366\"\n                        - effect_id: \"635133\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: ins界面\n                          resource_id: \"6761646727142314509\"\n                        - effect_id: \"1380488\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: ins风放大镜\n                          resource_id: \"6992465511455920676\"\n                        - effect_id: \"693883\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: kirakira\n                          resource_id: \"6706773500142555656\"\n                        - effect_id: \"634197\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: ktv灯光\n                          resource_id: \"6771299914891661832\"\n                        - effect_id: \"1054906\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: ktv灯光 II\n                          resource_id: \"6934938159763427876\"\n                        - effect_id: \"1169934\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: windows弹窗关闭\n                          resource_id: \"6976562270071427598\"\n                        - effect_id: \"1169728\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: windows弹窗打开\n                          resource_id: \"6976538396290191880\"\n                        - effect_id: \"768190\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 丁达尔光线\n                          resource_id: \"6834008866137575950\"\n                        - effect_id: \"1405514\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 万圣emoji\n                          resource_id: \"7021363005052948999\"\n                        - effect_id: \"951616\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 万圣夜\n                          resource_id: \"6888280327949652493\"\n                        - effect_id: \"635029\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 三屏\n                          resource_id: \"6706773500209664515\"\n                        - effect_id: \"635007\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 三格漫画\n                          resource_id: \"6795825532668744206\"\n                        - effect_id: \"635039\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 下雨\n                          resource_id: \"6734619419890160131\"\n                        - effect_id: \"1068128\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 不对劲\n                          resource_id: \"6940134524642660895\"\n                        - effect_id: \"898673\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 不规则黑框\n                          resource_id: \"6865921530488951309\"\n                        - effect_id: \"635025\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 两屏\n                          resource_id: \"6706773500796867075\"\n                        - effect_id: \"1100950\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 中枪了\n                          resource_id: \"6950894972291781127\"\n                        - effect_id: \"1113160\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 乌鸦飞过\n                          resource_id: \"6955028776094798366\"\n                        - effect_id: \"635011\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 九屏\n                          resource_id: \"6719657094741496333\"\n                        - effect_id: \"635031\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 九屏跑马灯\n                          resource_id: \"6726773973683540491\"\n                        - effect_id: \"1535868\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 五彩纸屑\n                          resource_id: \"7055567263029531143\"\n                        - effect_id: \"1543542\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 五彩缤纷\n                          resource_id: \"7055594981683106312\"\n                        - effect_id: \"634129\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 亮片\n                          resource_id: \"6715209448521994755\"\n                        - effect_id: \"634199\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 人鱼滤镜\n                          resource_id: \"6766876614862049795\"\n                        - effect_id: \"634173\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 仙女变身\n                          resource_id: \"6746483363567112707\"\n                        - effect_id: \"634171\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 仙女变身 II\n                          resource_id: \"6747515070114173447\"\n                        - effect_id: \"35504704\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 仙女棒\n                          resource_id: \"7314565034586149403\"\n                        - effect_id: \"1133662\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 仙尘闪闪\n                          resource_id: \"6963476143370408485\"\n                        - effect_id: \"703237\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 低像素\n                          resource_id: \"6810945511005098509\"\n                        - effect_id: \"703239\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 低像素 II\n                          resource_id: \"6811399125544735245\"\n                        - effect_id: \"1521390\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 倒计时 II\n                          resource_id: \"7051887173276013093\"\n                        - effect_id: \"1663132\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 像素画\n                          resource_id: \"7081557169539125791\"\n                        - effect_id: \"634785\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 像素纹理\n                          resource_id: \"6763903685983474189\"\n                        - effect_id: \"28151372\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 光斑虚化\n                          resource_id: \"7297154514262430259\"\n                        - effect_id: \"972749\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 光斑飘落\n                          resource_id: \"6899747276718084622\"\n                        - effect_id: \"634095\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 光晕\n                          resource_id: \"6714239617916211716\"\n                        - effect_id: \"634093\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 光晕 II\n                          resource_id: \"6709701759398318604\"\n                        - effect_id: \"634079\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 全剧终\n                          resource_id: \"6710109932122804750\"\n                        - effect_id: \"635013\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 六屏\n                          resource_id: \"6719657243039502851\"\n                        - effect_id: \"634277\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 关月亮\n                          resource_id: \"6774656266833760780\"\n                        - effect_id: \"1398372\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 冰冷实验室\n                          resource_id: \"7019265849047388680\"\n                        - effect_id: \"966514\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 冰霜\n                          resource_id: \"6896417042090430989\"\n                        - effect_id: \"1499080\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 冰霜 II\n                          resource_id: \"7047048873897890334\"\n                        - effect_id: \"1146394\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 冲击波\n                          resource_id: \"6967180577875169799\"\n                        - effect_id: \"635003\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 冲刺\n                          resource_id: \"6790536507905020430\"\n                        - effect_id: \"635001\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 冲刺 II\n                          resource_id: \"6781392637216690700\"\n                        - effect_id: \"634981\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 冲刺 III\n                          resource_id: \"6774324121783243271\"\n                        - effect_id: \"875969\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 冲屏闪粉\n                          resource_id: \"6858138911487562248\"\n                        - effect_id: \"1113134\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 凄凉\n                          resource_id: \"6955021464684728846\"\n                        - effect_id: \"920550\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 几何图形\n                          resource_id: \"6871054818241155592\"\n                        - effect_id: \"634741\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 刀光剑影\n                          resource_id: \"6740539604509659662\"\n                        - effect_id: \"13525811\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 分屏开幕\n                          resource_id: \"7232198317671715385\"\n                        - effect_id: \"6940749\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 初雪 I\n                          resource_id: \"7173558688605540901\"\n                        - effect_id: \"1038710\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 剪纸边框\n                          resource_id: \"6926456664228893191\"\n                        - effect_id: \"1031291\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 加载甜蜜\n                          resource_id: \"6924873263994638856\"\n                        - effect_id: \"1368758\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 动感模糊\n                          resource_id: \"7009120603055591943\"\n                        - effect_id: \"1524680\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 动感色卡\n                          resource_id: \"7052644171240182280\"\n                        - effect_id: \"635125\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 动感荧光\n                          resource_id: \"6755761739242934798\"\n                        - effect_id: \"1155430\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 动感蓝带\n                          resource_id: \"6970598283378954765\"\n                        - effect_id: \"20412423\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 单色涂鸦\n                          resource_id: \"7265798651019006521\"\n                        - effect_id: \"1403930\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 南瓜光斑\n                          resource_id: \"6992844454453318157\"\n                        - effect_id: \"951196\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 南瓜笑脸\n                          resource_id: \"6888208083202347534\"\n                        - effect_id: \"634735\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 卷动\n                          resource_id: \"6719657168292811278\"\n                        - effect_id: \"635137\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 原相机\n                          resource_id: \"6753416178909057549\"\n                        - effect_id: \"1173234\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 友友商店\n                          resource_id: \"6977709836993565220\"\n                        - effect_id: \"5114825\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 反转片 I\n                          resource_id: \"7153084450593575454\"\n                        - effect_id: \"1126104\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 发光\n                          resource_id: \"6961701455262650916\"\n                        - effect_id: \"635089\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 取景框\n                          resource_id: \"6712739398984667651\"\n                        - effect_id: \"920935\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 取景框 II\n                          resource_id: \"6871187132195541517\"\n                        - effect_id: \"1068127\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 变形了\n                          resource_id: \"6940134629282157064\"\n                        - effect_id: \"634053\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 变彩色\n                          resource_id: \"6720492336788279815\"\n                        - effect_id: \"634019\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 变清晰\n                          resource_id: \"6719658716750156291\"\n                        - effect_id: \"1146596\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 变清晰 II\n                          resource_id: \"6948352810895282724\"\n                        - effect_id: \"27896191\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 变焦推镜\n                          resource_id: \"7296418835429593651\"\n                        - effect_id: \"1381700\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 变秋天\n                          resource_id: \"7012941093520020004\"\n                        - effect_id: \"634055\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 变黑白\n                          resource_id: \"6730911849706951179\"\n                        - effect_id: \"635005\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 告白氛围\n                          resource_id: \"6798021156331852295\"\n                        - effect_id: \"634073\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 咔嚓\n                          resource_id: \"6752780026900386317\"\n                        - effect_id: \"1106302\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 哈哈弹幕\n                          resource_id: \"6952852858656002590\"\n                        - effect_id: \"1646830\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 哈苏胶片\n                          resource_id: \"7078598928056193566\"\n                        - effect_id: \"1174596\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 唱片\n                          resource_id: \"6978764021637845541\"\n                        - effect_id: \"1196734\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 唱片封面\n                          resource_id: \"6987741974455390734\"\n                        - effect_id: \"1104164\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 啊啊啊啊\n                          resource_id: \"6951661272827957790\"\n                        - effect_id: \"634061\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 噪点\n                          resource_id: \"6706773498510971404\"\n                        - effect_id: \"635027\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 四屏\n                          resource_id: \"6706773500490682888\"\n                        - effect_id: \"4720539\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 回弹摇摆\n                          resource_id: \"7146090225855369742\"\n                        - effect_id: \"1227934\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 回忆文件夹\n                          resource_id: \"6998352498062791205\"\n                        - effect_id: \"1196624\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 回忆胶片\n                          resource_id: \"6987725478912070174\"\n                        - effect_id: \"1569306\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 圆形虚线放大镜\n                          resource_id: \"7065242222068765198\"\n                        - effect_id: \"634209\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 圣诞光斑\n                          resource_id: \"6769436675958379021\"\n                        - effect_id: \"634207\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 圣诞星光\n                          resource_id: \"6767219683901837832\"\n                        - effect_id: \"1406882\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 地狱使者\n                          resource_id: \"7007684840506003999\"\n                        - effect_id: \"635127\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 基础黑框\n                          resource_id: \"6712316216905568772\"\n                        - effect_id: \"703221\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 塑料封面\n                          resource_id: \"6814664313496670728\"\n                        - effect_id: \"703219\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 塑料封面 II\n                          resource_id: \"6814664561082241550\"\n                        - effect_id: \"703217\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 塑料封面III\n                          resource_id: \"6815457699505902087\"\n                        - effect_id: \"898868\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 复古DV\n                          resource_id: \"6865959646092333576\"\n                        - effect_id: \"909740\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 复古DV II\n                          resource_id: \"6869650937841979911\"\n                        - effect_id: \"1194896\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 复古DV III\n                          resource_id: \"6986958810619318792\"\n                        - effect_id: \"1217306\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 复古DV IV\n                          resource_id: \"6994703188611830303\"\n                        - effect_id: \"1212776\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 复古发光\n                          resource_id: \"6993267867214942733\"\n                        - effect_id: \"926324\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 复古多格\n                          resource_id: \"6875631945510818318\"\n                        - effect_id: \"635103\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 复古弹窗 I\n                          resource_id: \"6709708058852856327\"\n                        - effect_id: \"635143\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 复古弹窗 II\n                          resource_id: \"6764667280681865731\"\n                        - effect_id: \"784724\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 复古漫画\n                          resource_id: \"6847440397027774984\"\n                        - effect_id: \"1039434\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 复古甜心\n                          resource_id: \"6926817888632312333\"\n                        - effect_id: \"1094804\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 复古碎钻\n                          resource_id: \"6948700335481295374\"\n                        - effect_id: \"1648234\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 复古蓝调\n                          resource_id: \"7078935944459457061\"\n                        - effect_id: \"14244311\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 夏日冰块\n                          resource_id: \"7237437172733710909\"\n                        - effect_id: \"2488948\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 夏日泡泡 I\n                          resource_id: \"7104624152044114462\"\n                        - effect_id: \"719376\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 夕阳\n                          resource_id: \"6820595030743323149\"\n                        - effect_id: \"720788\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 夕阳 II\n                          resource_id: \"6823659895221391886\"\n                        - effect_id: \"762382\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 夕阳 III\n                          resource_id: \"6836996542310650381\"\n                        - effect_id: \"634175\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 夜蝶\n                          resource_id: \"6748376019524129292\"\n                        - effect_id: \"635131\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 夜视框\n                          resource_id: \"6733023209978860035\"\n                        - effect_id: \"635063\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 大雪\n                          resource_id: \"6767148963503018503\"\n                        - effect_id: \"961896\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 大雪纷飞\n                          resource_id: \"6894517304487318024\"\n                        - effect_id: \"634143\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 天使光\n                          resource_id: \"6721949326022545928\"\n                        - effect_id: \"1402689\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 天使降临\n                          resource_id: \"7020715912596558366\"\n                        - effect_id: \"1188938\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 失焦\n                          resource_id: \"6984625607376114190\"\n                        - effect_id: \"1115952\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 夸夸弹幕\n                          resource_id: \"6956147849356644894\"\n                        - effect_id: \"1194360\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 夺冠\n                          resource_id: \"6986857922076611080\"\n                        - effect_id: \"635037\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 孔明灯\n                          resource_id: \"6734215575196668428\"\n                        - effect_id: \"1363340\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 孔明灯 II\n                          resource_id: \"7008056576514724365\"\n                        - effect_id: \"747802\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 字幕投影\n                          resource_id: \"6828021842695950856\"\n                        - effect_id: \"747910\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 字幕投影 II\n                          resource_id: \"6829181074954785294\"\n                        - effect_id: \"784366\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 字幕投影 III\n                          resource_id: \"6847378675894063623\"\n                        - effect_id: \"875967\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 字幕投影 IV\n                          resource_id: \"6858139153020752397\"\n                        - effect_id: \"1227402\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 定格闪烁\n                          resource_id: \"6998099471565328926\"\n                        - effect_id: \"1113428\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 小剧场\n                          resource_id: \"6955083477708444174\"\n                        - effect_id: \"1138384\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 小动物\n                          resource_id: \"6965381784674505246\"\n                        - effect_id: \"1039448\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 小花花\n                          resource_id: \"6926823177670627848\"\n                        - effect_id: \"1209684\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 少女心\n                          resource_id: \"6992842225541452325\"\n                        - effect_id: \"1031294\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 少女心事\n                          resource_id: \"6924872492381114894\"\n                        - effect_id: \"703255\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 少女星闪\n                          resource_id: \"6805098811694780942\"\n                        - effect_id: \"6209717\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 左右摇晃\n                          resource_id: \"7166435460321907207\"\n                        - effect_id: \"909545\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 布拉格\n                          resource_id: \"6869626257709994510\"\n                        - effect_id: \"634737\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 幻彩文字\n                          resource_id: \"6760975890806477319\"\n                        - effect_id: \"634751\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 幻影\n                          resource_id: \"6723059630676644364\"\n                        - effect_id: \"971332\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 幻影 II\n                          resource_id: \"6898958754792870413\"\n                        - effect_id: \"1038152\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 幻术摇摆\n                          resource_id: \"6926400232615842318\"\n                        - effect_id: \"634723\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 幻觉\n                          resource_id: \"6709706311455478285\"\n                        - effect_id: \"1700284\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 广角\n                          resource_id: \"7086792017837036046\"\n                        - effect_id: \"1189232\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 庆祝彩带\n                          resource_id: \"6984685757508096520\"\n                        - effect_id: \"631211\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 开幕\n                          resource_id: \"6706773534074491403\"\n                        - effect_id: \"631213\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 开幕  II\n                          resource_id: \"6708899027976458760\"\n                        - effect_id: \"634783\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 强锐化\n                          resource_id: \"6711567084741988876\"\n                        - effect_id: \"634887\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 录像带\n                          resource_id: \"6706773534074475012\"\n                        - effect_id: \"634811\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 录像带 II\n                          resource_id: \"6771299859803673101\"\n                        - effect_id: \"703251\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 录像带 III\n                          resource_id: \"6804357689859117581\"\n                        - effect_id: \"634801\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 录制框\n                          resource_id: \"6709725898762883595\"\n                        - effect_id: \"635121\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 录制边框\n                          resource_id: \"6720541178044879367\"\n                        - effect_id: \"635119\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 录制边框 II\n                          resource_id: \"6720541079080276484\"\n                        - effect_id: \"961624\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 录制边框 III\n                          resource_id: \"6894451240382501389\"\n                        - effect_id: \"634063\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 录制边框 IIII\n                          resource_id: \"6723065859260027403\"\n                        - effect_id: \"1418386\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 彩信\n                          resource_id: \"7023692066152518152\"\n                        - effect_id: \"4253680\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 彩噪画质\n                          resource_id: \"7135711291473138184\"\n                        - effect_id: \"1381644\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 彩带\n                          resource_id: \"7012933493663470088\"\n                        - effect_id: \"1143666\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 彩色描边\n                          resource_id: \"6966904744564494878\"\n                        - effect_id: \"634947\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 彩色漫画\n                          resource_id: \"6795430958737658382\"\n                        - effect_id: \"1005840\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 彩色负片\n                          resource_id: \"6914995893653475847\"\n                        - effect_id: \"634161\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 彩虹光\n                          resource_id: \"6719758141573042692\"\n                        - effect_id: \"634159\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 彩虹光 II\n                          resource_id: \"6738279134692119047\"\n                        - effect_id: \"634213\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 彩虹光晕\n                          resource_id: \"6768721870360416782\"\n                        - effect_id: \"703249\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 彩虹射线\n                          resource_id: \"6808837459728667144\"\n                        - effect_id: \"634281\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 彩虹幻影\n                          resource_id: \"6756845151630397960\"\n                        - effect_id: \"634127\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 彩虹气泡\n                          resource_id: \"6717434470128947725\"\n                        - effect_id: \"1031292\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 彩虹爱心\n                          resource_id: \"6924873147053249031\"\n                        - effect_id: \"1192480\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 彩钻\n                          resource_id: \"6986188114490298888\"\n                        - effect_id: \"634273\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 心河\n                          resource_id: \"6740821434307711496\"\n                        - effect_id: \"634753\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 心跳\n                          resource_id: \"6723068356821258764\"\n                        - effect_id: \"634049\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 心跳黑框\n                          resource_id: \"6732383404991451656\"\n                        - effect_id: \"634979\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 必杀技\n                          resource_id: \"6797658471840879111\"\n                        - effect_id: \"634977\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 必杀技 II\n                          resource_id: \"6797346848391565831\"\n                        - effect_id: \"3222474\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 怀旧边框\n                          resource_id: \"7113820806446060040\"\n                        - effect_id: \"1475190\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 怀旧边框 II\n                          resource_id: \"7039331384183230989\"\n                        - effect_id: \"1031293\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 怦然心动\n                          resource_id: \"6924872657083044359\"\n                        - effect_id: \"952539\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 恐怖故事\n                          resource_id: \"6888563496133333511\"\n                        - effect_id: \"952540\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 恐怖故事 II\n                          resource_id: \"6888562369627165191\"\n                        - effect_id: \"952742\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 恐怖故事 III\n                          resource_id: \"6888594040959275527\"\n                        - effect_id: \"1416842\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 恐怖综艺\n                          resource_id: \"7023349285592764941\"\n                        - effect_id: \"1020210\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 恭喜发财\n                          resource_id: \"6920164595214586381\"\n                        - effect_id: \"1413882\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 恶灵冲屏\n                          resource_id: \"7022838857221542414\"\n                        - effect_id: \"756184\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 愛\n                          resource_id: \"6831487239164269064\"\n                        - effect_id: \"1113430\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 我酸了\n                          resource_id: \"6955083374054609444\"\n                        - effect_id: \"635113\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 手帐边框\n                          resource_id: \"6761336384117543438\"\n                        - effect_id: \"886132\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 手电筒\n                          resource_id: \"6860757586220683790\"\n                        - effect_id: \"1225274\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 手绘拍摄器\n                          resource_id: \"6997608849750364708\"\n                        - effect_id: \"635101\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 手绘边框 II\n                          resource_id: \"6723044276625740296\"\n                        - effect_id: \"703271\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 扫描光条\n                          resource_id: \"6798379345783034382\"\n                        - effect_id: \"634759\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 抖动\n                          resource_id: \"6706773500796867084\"\n                        - effect_id: \"703227\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 折痕\n                          resource_id: \"6810944968396378638\"\n                        - effect_id: \"1032270\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 折痕 II\n                          resource_id: \"6925250879259939336\"\n                        - effect_id: \"1032322\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 折痕 III\n                          resource_id: \"6925288456943833608\"\n                        - effect_id: \"1032321\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 折痕 IV\n                          resource_id: \"6925288650011841031\"\n                        - effect_id: \"1032418\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 折痕 V\n                          resource_id: \"6925292438391099912\"\n                        - effect_id: \"635091\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 报纸:今日热门\n                          resource_id: \"6711575336955417095\"\n                        - effect_id: \"634743\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 摇摆\n                          resource_id: \"6709706542674874888\"\n                        - effect_id: \"717392\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 摇摆 II\n                          resource_id: \"6821460674577699342\"\n                        - effect_id: \"768182\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 撒星星\n                          resource_id: \"6839514681044898311\"\n                        - effect_id: \"788728\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 撒星星 II\n                          resource_id: \"6849588023714124295\"\n                        - effect_id: \"1153996\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 撕纸涂鸦边框\n                          resource_id: \"6969851947306193416\"\n                        - effect_id: \"635141\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 播放器\n                          resource_id: \"6758630566578360845\"\n                        - effect_id: \"635139\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 播放器 II\n                          resource_id: \"6792819149945967111\"\n                        - effect_id: \"773560\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 擦拭开幕\n                          resource_id: \"6841459176510591496\"\n                        - effect_id: \"1520514\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 放大镜\n                          resource_id: \"7051836120224502308\"\n                        - effect_id: \"1576250\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 放映机\n                          resource_id: \"7067049946049942030\"\n                        - effect_id: \"634775\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 放映机卡顿\n                          resource_id: \"6706773499031081483\"\n                        - effect_id: \"634787\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 放映机抖动\n                          resource_id: \"6771320983065203213\"\n                        - effect_id: \"1155966\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 放映滚动\n                          resource_id: \"6970890075907297806\"\n                        - effect_id: \"634797\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 故障\n                          resource_id: \"6707050322696606222\"\n                        - effect_id: \"634795\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 故障 II\n                          resource_id: \"6738265357825348103\"\n                        - effect_id: \"999316\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 故障读条\n                          resource_id: \"6912013942097187336\"\n                        - effect_id: \"949372\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 文字闪动\n                          resource_id: \"6886710931150082573\"\n                        - effect_id: \"1607458\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 斑斓\n                          resource_id: \"7072258619646939679\"\n                        - effect_id: \"920936\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 斜向模糊\n                          resource_id: \"6871185301071467015\"\n                        - effect_id: \"1024106\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 新年倒数\n                          resource_id: \"6921952071247729165\"\n                        - effect_id: \"995666\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 新年开幕\n                          resource_id: \"6911144014624330248\"\n                        - effect_id: \"972751\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 新年快乐\n                          resource_id: \"6899747094840480269\"\n                        - effect_id: \"8573753\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 新春杂志\n                          resource_id: \"7189543383222719034\"\n                        - effect_id: \"8578565\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 新春祝福\n                          resource_id: \"7189586707035984441\"\n                        - effect_id: \"635099\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 方形取景器\n                          resource_id: \"6706773499031097868\"\n                        - effect_id: \"634043\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 方形开幕\n                          resource_id: \"6729055410835165708\"\n                        - effect_id: \"1482636\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 旋转方块\n                          resource_id: \"7041504567648850445\"\n                        - effect_id: \"1146392\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 日式DV\n                          resource_id: \"6965747262165094942\"\n                        - effect_id: \"881783\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 日文字幕\n                          resource_id: \"6858954575701873160\"\n                        - effect_id: \"1020046\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 日落灯\n                          resource_id: \"6920147678248571406\"\n                        - effect_id: \"1157058\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 时光碎片\n                          resource_id: \"6971332934288544286\"\n                        - effect_id: \"1095262\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 时间停止\n                          resource_id: \"6948722700286169631\"\n                        - effect_id: \"634117\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星光\n                          resource_id: \"6717433583289504268\"\n                        - effect_id: \"634113\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星光 II\n                          resource_id: \"6715209934738297358\"\n                        - effect_id: \"634195\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星光绽放\n                          resource_id: \"6760243564598268420\"\n                        - effect_id: \"1146750\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星光闪耀\n                          resource_id: \"6967255188730024455\"\n                        - effect_id: \"920549\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星光闪闪\n                          resource_id: \"6871055398107877902\"\n                        - effect_id: \"1364164\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星夜\n                          resource_id: \"7008149210159649294\"\n                        - effect_id: \"634193\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星星冲屏\n                          resource_id: \"6769007480652435982\"\n                        - effect_id: \"1171606\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星星坠落\n                          resource_id: \"6977257384120947213\"\n                        - effect_id: \"76607736\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星星彩绘\n                          resource_id: \"7395533077130252863\"\n                        - effect_id: \"741906\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星星投影\n                          resource_id: \"6826530141586330120\"\n                        - effect_id: \"977478\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星星灯\n                          resource_id: \"6903072502369489422\"\n                        - effect_id: \"634215\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星星闪烁\n                          resource_id: \"6778285088485413384\"\n                        - effect_id: \"755806\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星星闪烁 II\n                          resource_id: \"6834010357728547335\"\n                        - effect_id: \"920916\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星星闪烁 III\n                          resource_id: \"6871167583991632391\"\n                        - effect_id: \"1146749\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星月童话\n                          resource_id: \"6967255330958873124\"\n                        - effect_id: \"634265\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星河\n                          resource_id: \"6734498838410695175\"\n                        - effect_id: \"1372810\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星河 II\n                          resource_id: \"7010648091049071135\"\n                        - effect_id: \"634103\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星火\n                          resource_id: \"6715209198109463054\"\n                        - effect_id: \"986477\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星火 II\n                          resource_id: \"6907053209173365256\"\n                        - effect_id: \"703243\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星火炸开\n                          resource_id: \"6808838081420988942\"\n                        - effect_id: \"634267\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星移\n                          resource_id: \"6778284619499311623\"\n                        - effect_id: \"635035\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星空\n                          resource_id: \"6734587005872640519\"\n                        - effect_id: \"634271\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星辰\n                          resource_id: \"6761722814157296141\"\n                        - effect_id: \"1087622\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星辰 I\n                          resource_id: \"6946113717100614158\"\n                        - effect_id: \"1089758\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星辰 II\n                          resource_id: \"6946453051368542727\"\n                        - effect_id: \"1094800\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星辰 III\n                          resource_id: \"6948700154874565156\"\n                        - effect_id: \"634187\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 星雨\n                          resource_id: \"6766488666261950989\"\n                        - effect_id: \"1041304\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 春日樱花\n                          resource_id: \"6927185086685123086\"\n                        - effect_id: \"1076064\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 春日边框\n                          resource_id: \"6942800783737885198\"\n                        - effect_id: \"635071\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 晴天光线\n                          resource_id: \"6740540037563159047\"\n                        - effect_id: \"949350\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 暗夜\n                          resource_id: \"6886698114258833934\"\n                        - effect_id: \"1402690\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 暗夜归来\n                          resource_id: \"7020715691355410951\"\n                        - effect_id: \"720808\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 暗夜彩虹\n                          resource_id: \"6823658782090859022\"\n                        - effect_id: \"741832\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 暗夜彩虹 II\n                          resource_id: \"6824046488419570184\"\n                        - effect_id: \"741860\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 暗夜彩虹III\n                          resource_id: \"6824047157369115150\"\n                        - effect_id: \"952536\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 暗夜精灵\n                          resource_id: \"6888573576870367751\"\n                        - effect_id: \"1407954\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 暗夜蝙蝠\n                          resource_id: \"7021786820153184775\"\n                        - effect_id: \"634057\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 暗角\n                          resource_id: \"6723086142658318860\"\n                        - effect_id: \"949388\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 暗黑剪影\n                          resource_id: \"6886718600233619982\"\n                        - effect_id: \"1414024\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 暗黑噪点\n                          resource_id: \"7022896066559218183\"\n                        - effect_id: \"634179\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 暗黑蝙蝠\n                          resource_id: \"6749064512390828548\"\n                        - effect_id: \"1207064\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 曝光\n                          resource_id: \"6992043513365926408\"\n                        - effect_id: \"634659\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 曝光降低\n                          resource_id: \"6765766949382132232\"\n                        - effect_id: \"741892\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 月亮投影\n                          resource_id: \"6826529572536717837\"\n                        - effect_id: \"931823\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 月亮闪闪\n                          resource_id: \"6876339287038628359\"\n                        - effect_id: \"986344\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 月光闪闪\n                          resource_id: \"6906802979861434887\"\n                        - effect_id: \"761578\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 望远镜\n                          resource_id: \"6834012604759806472\"\n                        - effect_id: \"1185624\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 未来主义\n                          resource_id: \"6982870068069667365\"\n                        - effect_id: \"703235\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 杂志\n                          resource_id: \"6810945952451400200\"\n                        - effect_id: \"703215\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 树影\n                          resource_id: \"6815830852035940872\"\n                        - effect_id: \"719372\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 树影 II\n                          resource_id: \"6820591707617235464\"\n                        - effect_id: \"703223\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 格纹纸质\n                          resource_id: \"6815834305084789262\"\n                        - effect_id: \"703225\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 格纹纸质 II\n                          resource_id: \"6815834434726531597\"\n                        - effect_id: \"773088\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 梦境\n                          resource_id: \"6841460732639318542\"\n                        - effect_id: \"788039\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 梦境 II\n                          resource_id: \"6849235870130639368\"\n                        - effect_id: \"774964\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 梦境 III\n                          resource_id: \"6843319622385537544\"\n                        - effect_id: \"773086\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 梦境 IV\n                          resource_id: \"6841460608248844813\"\n                        - effect_id: \"961480\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 梦幻雪花\n                          resource_id: \"6894208129534267912\"\n                        - effect_id: \"1406766\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 梦蝶\n                          resource_id: \"6998050316528652831\"\n                        - effect_id: \"1419974\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 梦魇\n                          resource_id: \"7024080087163081229\"\n                        - effect_id: \"1147066\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 梵高背景\n                          resource_id: \"6967354298275467807\"\n                        - effect_id: \"634025\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 模糊\n                          resource_id: \"6739752823140913675\"\n                        - effect_id: \"634071\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 模糊开幕\n                          resource_id: \"6758752103092457991\"\n                        - effect_id: \"634255\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 模糊星光\n                          resource_id: \"6771299961171612174\"\n                        - effect_id: \"703247\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 模糊星光 II\n                          resource_id: \"6806254134619017741\"\n                        - effect_id: \"717394\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 模糊闭幕\n                          resource_id: \"6821460725517521416\"\n                        - effect_id: \"931822\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 横向闭幕\n                          resource_id: \"6876339694825640455\"\n                        - effect_id: \"703269\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 横纹故障\n                          resource_id: \"6806254428358709767\"\n                        - effect_id: \"703267\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 横纹故障 II\n                          resource_id: \"6815093228216259079\"\n                        - effect_id: \"1069014\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 樱花朵朵\n                          resource_id: \"6940448547137393159\"\n                        - effect_id: \"1005839\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 橘色负片\n                          resource_id: \"6914995976608420365\"\n                        - effect_id: \"21803568\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 欧根纱\n                          resource_id: \"7273334324106105403\"\n                        - effect_id: \"634711\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 毛刺\n                          resource_id: \"6709706457543086605\"\n                        - effect_id: \"1445528\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 毛玻璃\n                          resource_id: \"7031846864198570532\"\n                        - effect_id: \"634101\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 水墨晕染\n                          resource_id: \"6746486938137530884\"\n                        - effect_id: \"634099\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 水彩晕染\n                          resource_id: \"6733378866686988803\"\n                        - effect_id: \"1068390\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 水波纹\n                          resource_id: \"6940173521905521159\"\n                        - effect_id: \"783644\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 水波纹投影\n                          resource_id: \"6847018706887774727\"\n                        - effect_id: \"998722\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 水滴模糊\n                          resource_id: \"6911935918433636871\"\n                        - effect_id: \"892170\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 水滴滚动\n                          resource_id: \"6863328348920091144\"\n                        - effect_id: \"77243667\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 油画泼墨\n                          resource_id: \"7398059491545059876\"\n                        - effect_id: \"645833\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 油画纹理\n                          resource_id: \"6808442362314887693\"\n                        - effect_id: \"703241\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 泡泡\n                          resource_id: \"6806254230614053383\"\n                        - effect_id: \"4118383\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 泡泡变焦\n                          resource_id: \"7133105682881974821\"\n                        - effect_id: \"77269362\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 波点彩绘\n                          resource_id: \"7398099732884623908\"\n                        - effect_id: \"63865672\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 波纹扭曲\n                          resource_id: \"7368745372081984035\"\n                        - effect_id: \"634285\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 波纹色差\n                          resource_id: \"6709347834690277892\"\n                        - effect_id: \"18648774\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 流动烟雾\n                          resource_id: \"7257495407712801317\"\n                        - effect_id: \"1164794\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 流星雨\n                          resource_id: \"6974750495415996936\"\n                        - effect_id: \"635047\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 浓雾\n                          resource_id: \"6751566830206194190\"\n                        - effect_id: \"634253\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 浪漫氛围\n                          resource_id: \"6790533020215415304\"\n                        - effect_id: \"705081\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 浪漫氛围 II\n                          resource_id: \"6814667933684339207\"\n                        - effect_id: \"1153998\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 涂鸦切割边框\n                          resource_id: \"6969850948969566756\"\n                        - effect_id: \"635117\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 淡彩边框\n                          resource_id: \"6753512270598246925\"\n                        - effect_id: \"1141780\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 清新绿格子\n                          resource_id: \"6966132680211567135\"\n                        - effect_id: \"634041\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 渐显开幕\n                          resource_id: \"6722343568188379661\"\n                        - effect_id: \"634067\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 渐渐放大\n                          resource_id: \"6730912024596845063\"\n                        - effect_id: \"634039\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 渐隐闭幕\n                          resource_id: \"6723050814006366734\"\n                        - effect_id: \"1220300\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 温柔细闪\n                          resource_id: \"6995497812221760030\"\n                        - effect_id: \"1187140\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 游戏界面\n                          resource_id: \"6983877697524994567\"\n                        - effect_id: \"1101078\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 满屏问号\n                          resource_id: \"6950902993294201358\"\n                        - effect_id: \"703229\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 漏光噪点\n                          resource_id: \"6810944598874001934\"\n                        - effect_id: \"634167\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 火光\n                          resource_id: \"6748623656181568011\"\n                        - effect_id: \"705085\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 火光刷过\n                          resource_id: \"6803160938603090440\"\n                        - effect_id: \"705033\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 火光包围\n                          resource_id: \"6803162714148442632\"\n                        - effect_id: \"703263\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 火光翻滚\n                          resource_id: \"6809889314860700173\"\n                        - effect_id: \"703265\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 火光蔓延\n                          resource_id: \"6803162375148016135\"\n                        - effect_id: \"634709\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 灵魂出窍\n                          resource_id: \"6706773500784284172\"\n                        - effect_id: \"634091\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 炫彩\n                          resource_id: \"6732693992225378828\"\n                        - effect_id: \"1145374\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 炫彩 II\n                          resource_id: \"6933131104274616840\"\n                        - effect_id: \"635073\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 烟花\n                          resource_id: \"6782461740274684424\"\n                        - effect_id: \"1373018\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 烟花 II\n                          resource_id: \"7010666068997837342\"\n                        - effect_id: \"1522424\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 烟花 III\n                          resource_id: \"7052201781241057805\"\n                        - effect_id: \"634145\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 烟雾\n                          resource_id: \"6733145063997575694\"\n                        - effect_id: \"703261\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 烟雾炸开\n                          resource_id: \"6804317747351130638\"\n                        - effect_id: \"635067\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爆炸\n                          resource_id: \"6740540228194275844\"\n                        - effect_id: \"965696\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心Kira\n                          resource_id: \"6896058666357625351\"\n                        - effect_id: \"634133\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心bling\n                          resource_id: \"6709706255105004045\"\n                        - effect_id: \"634135\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心光斑\n                          resource_id: \"6709706178340852236\"\n                        - effect_id: \"634261\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心光斑 II\n                          resource_id: \"6791647108974776839\"\n                        - effect_id: \"634191\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心光波\n                          resource_id: \"6746014633942848007\"\n                        - effect_id: \"1031295\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心啵啵\n                          resource_id: \"6924869659476890125\"\n                        - effect_id: \"703257\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心射线\n                          resource_id: \"6805099653730669070\"\n                        - effect_id: \"741958\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心投影\n                          resource_id: \"6828020234876621325\"\n                        - effect_id: \"1480898\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心方块\n                          resource_id: \"7041103714647544334\"\n                        - effect_id: \"1033842\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心暗角\n                          resource_id: \"6925342127807271431\"\n                        - effect_id: \"634235\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心气泡\n                          resource_id: \"6792405144655893005\"\n                        - effect_id: \"949386\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心泡泡\n                          resource_id: \"6886709503136371207\"\n                        - effect_id: \"824444\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心爆炸\n                          resource_id: \"6855563744123032071\"\n                        - effect_id: \"634259\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心缤纷\n                          resource_id: \"6790534436153725448\"\n                        - effect_id: \"634257\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心缤纷 II\n                          resource_id: \"6792092999468716558\"\n                        - effect_id: \"634275\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心跳动\n                          resource_id: \"6790547496394297863\"\n                        - effect_id: \"875970\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心跳动 II\n                          resource_id: \"6858138763290219021\"\n                        - effect_id: \"634231\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 爱心闪烁\n                          resource_id: \"6792109800135070222\"\n                        - effect_id: \"1140082\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 牛皮纸关闭\n                          resource_id: \"6966139059194303013\"\n                        - effect_id: \"1140078\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 牛皮纸打开\n                          resource_id: \"6966136913010889223\"\n                        - effect_id: \"1140086\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 牛皮纸边框 I\n                          resource_id: \"6966139444382405134\"\n                        - effect_id: \"1140085\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 牛皮纸边框 II\n                          resource_id: \"6966139579912950286\"\n                        - effect_id: \"635051\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 玫瑰花瓣\n                          resource_id: \"6734619627051028996\"\n                        - effect_id: \"999326\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 玻璃破碎\n                          resource_id: \"6912015453892121102\"\n                        - effect_id: \"1552216\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 甜心投影\n                          resource_id: \"7058961500060258847\"\n                        - effect_id: \"972748\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 生日快乐\n                          resource_id: \"6899747371593241096\"\n                        - effect_id: \"703259\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 电光包围\n                          resource_id: \"6809889225144537613\"\n                        - effect_id: \"634975\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 电光漩涡\n                          resource_id: \"6797341815377760782\"\n                        - effect_id: \"785074\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 电子屏\n                          resource_id: \"6847692508449739278\"\n                        - effect_id: \"634789\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 电影刮花\n                          resource_id: \"6722366799003783692\"\n                        - effect_id: \"634029\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 电影感\n                          resource_id: \"6719333680713568771\"\n                        - effect_id: \"634083\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 电影感画幅\n                          resource_id: \"6746135410218373646\"\n                        - effect_id: \"1482288\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 电脑桌面\n                          resource_id: \"7026619341839798820\"\n                        - effect_id: \"634805\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 电视关机\n                          resource_id: \"6719656840646365707\"\n                        - effect_id: \"634807\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 电视开机\n                          resource_id: \"6719661856434164237\"\n                        - effect_id: \"815546\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 电视彩虹屏\n                          resource_id: \"6852503085672043021\"\n                        - effect_id: \"634803\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 电视纹理\n                          resource_id: \"6763933311933878791\"\n                        - effect_id: \"768176\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 画展边框\n                          resource_id: \"6839527903424680456\"\n                        - effect_id: \"1155426\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 白噪点边框\n                          resource_id: \"6970599572976439839\"\n                        - effect_id: \"898956\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 白胶边框\n                          resource_id: \"6865979592264389127\"\n                        - effect_id: \"1107244\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 白色描边\n                          resource_id: \"6953169122649707045\"\n                        - effect_id: \"634037\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 白色渐显\n                          resource_id: \"6723790385069429262\"\n                        - effect_id: \"904792\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 白色爱心\n                          resource_id: \"6868556923503907342\"\n                        - effect_id: \"635109\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 白色线框\n                          resource_id: \"6753512551536923149\"\n                        - effect_id: \"1164159\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 白色边框\n                          resource_id: \"6974602583411266079\"\n                        - effect_id: \"719380\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 百叶窗\n                          resource_id: \"6823654892872143367\"\n                        - effect_id: \"719404\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 百叶窗 II\n                          resource_id: \"6823656768334205454\"\n                        - effect_id: \"634941\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 监控\n                          resource_id: \"6773542922030682632\"\n                        - effect_id: \"1419276\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 盗梦空间\n                          resource_id: \"7024053604596060680\"\n                        - effect_id: \"886130\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 盛世美颜\n                          resource_id: \"6860757421283873293\"\n                        - effect_id: \"634051\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 相机网格\n                          resource_id: \"6725730715138265612\"\n                        - effect_id: \"635093\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 相纸\n                          resource_id: \"6713856991086776835\"\n                        - effect_id: \"979300\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 瞬间模糊\n                          resource_id: \"6903409009210954253\"\n                        - effect_id: \"1499079\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 破冰\n                          resource_id: \"7047049192832766477\"\n                        - effect_id: \"634027\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 磨砂纹理\n                          resource_id: \"6732693826135134734\"\n                        - effect_id: \"40453164\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 祝福环绕\n                          resource_id: \"7324617866056045106\"\n                        - effect_id: \"1024408\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 福气满满\n                          resource_id: \"6922029632040473095\"\n                        - effect_id: \"1352364\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 秋日暖黄\n                          resource_id: \"7005090271696261640\"\n                        - effect_id: \"1404120\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 空灵\n                          resource_id: \"7021096050899292680\"\n                        - effect_id: \"634781\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 窗格\n                          resource_id: \"6719656757175521800\"\n                        - effect_id: \"719378\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 窗格光\n                          resource_id: \"6823659309428118030\"\n                        - effect_id: \"1475188\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 简约边框\n                          resource_id: \"7039329234170417701\"\n                        - effect_id: \"1579942\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 箭头放大镜\n                          resource_id: \"7067461440960991752\"\n                        - effect_id: \"770876\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 粉红老电视\n                          resource_id: \"6839596824936845838\"\n                        - effect_id: \"1193772\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 粉红芭比边框\n                          resource_id: \"6986591867999621668\"\n                        - effect_id: \"881784\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 粉色闪粉\n                          resource_id: \"6858953149974057486\"\n                        - effect_id: \"1365502\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 粉黄渐变\n                          resource_id: \"7008413208721494559\"\n                        - effect_id: \"1146790\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 精灵闪粉\n                          resource_id: \"6967274435963261476\"\n                        - effect_id: \"16609879\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 精细锐化\n                          resource_id: \"7250368600911909413\"\n                        - effect_id: \"634217\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 糖果纸\n                          resource_id: \"6782100631638249998\"\n                        - effect_id: \"1195758\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 紫色波纹\n                          resource_id: \"6987321998036701704\"\n                        - effect_id: \"1007834\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 紫色负片\n                          resource_id: \"6915313694884762125\"\n                        - effect_id: \"948716\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 紫雾\n                          resource_id: \"6886335679681270279\"\n                        - effect_id: \"768166\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 繁星点点\n                          resource_id: \"6839577027939406344\"\n                        - effect_id: \"1373928\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 红晕\n                          resource_id: \"7011032152380805640\"\n                        - effect_id: \"931824\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 纵向开幕\n                          resource_id: \"6876338988437737997\"\n                        - effect_id: \"634137\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 纵向模糊\n                          resource_id: \"6716684911840858628\"\n                        - effect_id: \"1181888\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 纸膜边框 I\n                          resource_id: \"6981464043542286879\"\n                        - effect_id: \"1181886\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 纸膜边框 II\n                          resource_id: \"6981464169736311327\"\n                        - effect_id: \"784032\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 纸质撕边\n                          resource_id: \"6843686214025875981\"\n                        - effect_id: \"780656\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 纸质边框\n                          resource_id: \"6844765419853582856\"\n                        - effect_id: \"780658\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 纸质边框 II\n                          resource_id: \"6844832937272152589\"\n                        - effect_id: \"1511534\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 纸醉金迷\n                          resource_id: \"7050402737174876702\"\n                        - effect_id: \"785536\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 细闪\n                          resource_id: \"6847773569435308558\"\n                        - effect_id: \"959412\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 细闪 II\n                          resource_id: \"6893002658420888078\"\n                        - effect_id: \"1134290\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 细闪 III\n                          resource_id: \"6963598424113418783\"\n                        - effect_id: \"787752\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 美式\n                          resource_id: \"6849214832856535560\"\n                        - effect_id: \"774972\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 美式 II\n                          resource_id: \"6843320153900323335\"\n                        - effect_id: \"774968\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 美式 III\n                          resource_id: \"6843319785522991623\"\n                        - effect_id: \"812078\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 美式 IV\n                          resource_id: \"6850006476472193543\"\n                        - effect_id: \"787968\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 美式 V\n                          resource_id: \"6849225862588404237\"\n                        - effect_id: \"1181360\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 美漫\n                          resource_id: \"6981339244547543560\"\n                        - effect_id: \"634295\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 羽毛\n                          resource_id: \"6709706658815152643\"\n                        - effect_id: \"703231\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 老照片\n                          resource_id: \"6815764475375784462\"\n                        - effect_id: \"703233\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 老照片 II\n                          resource_id: \"6815767788490068494\"\n                        - effect_id: \"719374\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 老照片 III\n                          resource_id: \"6813924503148564999\"\n                        - effect_id: \"635095\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 老电影\n                          resource_id: \"6706773498506777095\"\n                        - effect_id: \"898674\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 老电影 II\n                          resource_id: \"6865921078858879496\"\n                        - effect_id: \"634771\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 老电视卡顿\n                          resource_id: \"6706773499052036615\"\n                        - effect_id: \"634081\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 聚光灯\n                          resource_id: \"6750075966053159427\"\n                        - effect_id: \"635083\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 聚焦\n                          resource_id: \"6710056993287049742\"\n                        - effect_id: \"1102990\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 胡言乱语\n                          resource_id: \"6951364520048595492\"\n                        - effect_id: \"635097\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 胶片\n                          resource_id: \"6708624565657932292\"\n                        - effect_id: \"635087\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 胶片 II\n                          resource_id: \"6710090540643258891\"\n                        - effect_id: \"773562\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 胶片 III\n                          resource_id: \"6841053178406900231\"\n                        - effect_id: \"966552\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 胶片 IV\n                          resource_id: \"6896439221179912718\"\n                        - effect_id: \"1625760\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 胶片抖动\n                          resource_id: \"7075213848558440990\"\n                        - effect_id: \"744244\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 胶片显影\n                          resource_id: \"6830336944111620616\"\n                        - effect_id: \"1164161\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 胶片框\n                          resource_id: \"6974600629268255262\"\n                        - effect_id: \"1164162\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 胶片框 II\n                          resource_id: \"6974600475999998477\"\n                        - effect_id: \"1196596\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 胶片框 III\n                          resource_id: \"6987714956401578510\"\n                        - effect_id: \"705083\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 胶片漏光\n                          resource_id: \"6815093106841489934\"\n                        - effect_id: \"718872\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 胶片漏光 II\n                          resource_id: \"6814743838964322829\"\n                        - effect_id: \"1218011\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 胶片连拍\n                          resource_id: \"6994787976613990925\"\n                        - effect_id: \"774970\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 自然\n                          resource_id: \"6843319885339038216\"\n                        - effect_id: \"773090\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 自然 II\n                          resource_id: \"6841460795394494990\"\n                        - effect_id: \"775998\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 自然 III\n                          resource_id: \"6843680748856152584\"\n                        - effect_id: \"776000\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 自然 IV\n                          resource_id: \"6843680812584407559\"\n                        - effect_id: \"774966\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 自然 V\n                          resource_id: \"6843319715499086343\"\n                        - effect_id: \"634059\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 色差\n                          resource_id: \"6706773498561303044\"\n                        - effect_id: \"904723\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 色差开幕\n                          resource_id: \"6868546720783929870\"\n                        - effect_id: \"945036\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 色差放大\n                          resource_id: \"6883360769992299016\"\n                        - effect_id: \"634777\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 色差放射\n                          resource_id: \"6716422405511713287\"\n                        - effect_id: \"634773\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 色差故障\n                          resource_id: \"6706773498922013191\"\n                        - effect_id: \"634769\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 色差故障 II\n                          resource_id: \"6706773498561319428\"\n                        - effect_id: \"982304\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 色差星闪\n                          resource_id: \"6904921853635072520\"\n                        - effect_id: \"634793\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 色差默片\n                          resource_id: \"6719362972239532548\"\n                        - effect_id: \"987446\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 节日彩带\n                          resource_id: \"6907438556793278983\"\n                        - effect_id: \"634223\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 花火\n                          resource_id: \"6767147410671014407\"\n                        - effect_id: \"986478\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 花火 II\n                          resource_id: \"6907051960180937229\"\n                        - effect_id: \"635059\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 花瓣飘落\n                          resource_id: \"6796905369932141064\"\n                        - effect_id: \"635057\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 花瓣飞扬\n                          resource_id: \"6796903619762328072\"\n                        - effect_id: \"4493526\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 荡漾 II\n                          resource_id: \"7140929198763282980\"\n                        - effect_id: \"73935190\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 荡秋千\n                          resource_id: \"7388040405465436722\"\n                        - effect_id: \"1482382\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 荧光扫描\n                          resource_id: \"7041474808986472967\"\n                        - effect_id: \"634227\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 荧光爱心\n                          resource_id: \"6792095053360665096\"\n                        - effect_id: \"634945\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 荧光线描\n                          resource_id: \"6795826477590909454\"\n                        - effect_id: \"875968\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 荧光绿\n                          resource_id: \"6858138988834722312\"\n                        - effect_id: \"948715\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 荧光蝙蝠\n                          resource_id: \"6886339116561076749\"\n                        - effect_id: \"634779\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 荧幕噪点\n                          resource_id: \"6706773534066086413\"\n                        - effect_id: \"703253\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 荧幕噪点 II\n                          resource_id: \"6803161742789579277\"\n                        - effect_id: \"634107\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 萤光\n                          resource_id: \"6715209844216828420\"\n                        - effect_id: \"932242\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 萤光飞舞\n                          resource_id: \"6877098783209951751\"\n                        - effect_id: \"1357502\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 萤火\n                          resource_id: \"7006265184050221576\"\n                        - effect_id: \"635043\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 落叶\n                          resource_id: \"6740863535674298888\"\n                        - effect_id: \"1031296\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 落樱\n                          resource_id: \"6924859706661933576\"\n                        - effect_id: \"634147\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蒸汽波\n                          resource_id: \"6719658860539286020\"\n                        - effect_id: \"747926\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蒸汽波投影\n                          resource_id: \"6830351103272423949\"\n                        - effect_id: \"755808\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蒸汽波路灯\n                          resource_id: \"6829184472349413895\"\n                        - effect_id: \"961482\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蒸汽腾腾\n                          resource_id: \"6894200076227318286\"\n                        - effect_id: \"17710554\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蓝光扫描\n                          resource_id: \"7254126209540297274\"\n                        - effect_id: \"1019968\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蓝线模糊\n                          resource_id: \"6920136330563293704\"\n                        - effect_id: \"1005838\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蓝色负片\n                          resource_id: \"6914996050382033421\"\n                        - effect_id: \"1201878\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蓝色闪电边框\n                          resource_id: \"6989911842575356446\"\n                        - effect_id: \"8311325\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蔡国强烟花\n                          resource_id: \"7187218013710455354\"\n                        - effect_id: \"634065\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 虚化\n                          resource_id: \"6756397840785740295\"\n                        - effect_id: \"953420\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蝙蝠Kira\n                          resource_id: \"6888977985697747463\"\n                        - effect_id: \"634157\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蝴蝶\n                          resource_id: \"6706773499836404228\"\n                        - effect_id: \"634155\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蝴蝶 II\n                          resource_id: \"6747586717672280584\"\n                        - effect_id: \"634183\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蝴蝶光斑\n                          resource_id: \"6748307256959308299\"\n                        - effect_id: \"634177\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蝶舞\n                          resource_id: \"6747946665312784910\"\n                        - effect_id: \"15249743\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 表面模糊\n                          resource_id: \"7244073793562350140\"\n                        - effect_id: \"1082654\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 裂开了\n                          resource_id: \"6944914067702157861\"\n                        - effect_id: \"634747\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 视频分割\n                          resource_id: \"6729023693739004419\"\n                        - effect_id: \"635135\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 视频界面\n                          resource_id: \"6752799091941446147\"\n                        - effect_id: \"1408118\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 诡异分割\n                          resource_id: \"7021800634621891109\"\n                        - effect_id: \"892686\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 负片闪烁\n                          resource_id: \"6863353894152442375\"\n                        - effect_id: \"1020906\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 财富满满\n                          resource_id: \"6920520407179072007\"\n                        - effect_id: \"1036164\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 财富满满 II\n                          resource_id: \"6925663127845474830\"\n                        - effect_id: \"1543072\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 赞赞赞\n                          resource_id: \"7057055647472292359\"\n                        - effect_id: \"634733\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蹦迪光\n                          resource_id: \"6716419849544798723\"\n                        - effect_id: \"634731\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 蹦迪彩光\n                          resource_id: \"6716450942285255182\"\n                        - effect_id: \"1381596\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 车窗\n                          resource_id: \"7012926200767058463\"\n                        - effect_id: \"761222\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 车窗影\n                          resource_id: \"6834006887415943694\"\n                        - effect_id: \"18798726\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 轻微抖动\n                          resource_id: \"7258208250896585274\"\n                        - effect_id: \"634077\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 轻微放大\n                          resource_id: \"6791743223522923021\"\n                        - effect_id: \"634749\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 边缘glitch\n                          resource_id: \"6777238992816443912\"\n                        - effect_id: \"634757\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 边缘加色\n                          resource_id: \"6781315516909752844\"\n                        - effect_id: \"634755\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 边缘加色 II\n                          resource_id: \"6790180635555140109\"\n                        - effect_id: \"974844\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 边缘加色 III\n                          resource_id: \"6901190770473046535\"\n                        - effect_id: \"634069\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 边缘发光\n                          resource_id: \"6769065553207235086\"\n                        - effect_id: \"977454\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 边缘荧光\n                          resource_id: \"6903064458008990215\"\n                        - effect_id: \"1188619\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 运动一夏\n                          resource_id: \"6984393713208267301\"\n                        - effect_id: \"634739\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 迪斯科\n                          resource_id: \"6756113382840996360\"\n                        - effect_id: \"634089\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 迷幻烟雾\n                          resource_id: \"6719661667447214605\"\n                        - effect_id: \"634721\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 迷离\n                          resource_id: \"6706773549362713095\"\n                        - effect_id: \"950488\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 迷雾\n                          resource_id: \"6887505634791526926\"\n                        - effect_id: \"1218244\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 逆光对焦\n                          resource_id: \"6992032047959118344\"\n                        - effect_id: \"635081\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 选中框\n                          resource_id: \"6712358020417851917\"\n                        - effect_id: \"1382084\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 邮票边框\n                          resource_id: \"7012988323387937293\"\n                        - effect_id: \"1493772\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 金属背景\n                          resource_id: \"7044853948456374814\"\n                        - effect_id: \"634229\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 金片\n                          resource_id: \"6771299796058640908\"\n                        - effect_id: \"1030626\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 金片 II\n                          resource_id: \"6924589854269379079\"\n                        - effect_id: \"972750\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 金片炸开\n                          resource_id: \"6899747182816006669\"\n                        - effect_id: \"631215\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 金粉\n                          resource_id: \"6709706378702754312\"\n                        - effect_id: \"634289\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 金粉 II\n                          resource_id: \"6774672940651778573\"\n                        - effect_id: \"1188618\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 金粉 III\n                          resource_id: \"6984393847467938335\"\n                        - effect_id: \"987445\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 金粉撒落\n                          resource_id: \"6907439016547717646\"\n                        - effect_id: \"1452336\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 金粉旋转\n                          resource_id: \"7033654301050278431\"\n                        - effect_id: \"703245\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 金粉聚拢\n                          resource_id: \"6806254339821146637\"\n                        - effect_id: \"1453820\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 金粉闪闪\n                          resource_id: \"7034048554318434830\"\n                        - effect_id: \"634097\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 钻光\n                          resource_id: \"6723824479216079368\"\n                        - effect_id: \"1639618\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 钻石碎片\n                          resource_id: \"7077487066476450340\"\n                        - effect_id: \"1115964\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 镜像\n                          resource_id: \"6956148985400660517\"\n                        - effect_id: \"904724\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 镜头变焦\n                          resource_id: \"6868546663607177736\"\n                        - effect_id: \"1480896\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 镭射边框\n                          resource_id: \"7041103833056940574\"\n                        - effect_id: \"1235644\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 长虹玻璃\n                          resource_id: \"6992081595976913416\"\n                        - effect_id: \"634185\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闪亮登场\n                          resource_id: \"6760547949349966350\"\n                        - effect_id: \"958186\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闪亮登场 II\n                          resource_id: \"6891946116212855303\"\n                        - effect_id: \"777760\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闪光灯 Ⅰ\n                          resource_id: \"6844432942563856904\"\n                        - effect_id: \"19279654\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闪光震动\n                          resource_id: \"7260437169389441597\"\n                        - effect_id: \"634725\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闪动\n                          resource_id: \"6717639344577843725\"\n                        - effect_id: \"634181\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闪动光斑\n                          resource_id: \"6753169731617821191\"\n                        - effect_id: \"634729\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闪屏\n                          resource_id: \"6758298031608566280\"\n                        - effect_id: \"635069\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闪电\n                          resource_id: \"6734215409513271820\"\n                        - effect_id: \"634761\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闪白\n                          resource_id: \"6706773500792672781\"\n                        - effect_id: \"634219\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闪耀星光\n                          resource_id: \"6784346950385799694\"\n                        - effect_id: \"909546\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闪闪\n                          resource_id: \"6869625970437919246\"\n                        - effect_id: \"1382870\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闪闪发光 II\n                          resource_id: \"7013264306959553060\"\n                        - effect_id: \"892171\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闪黑\n                          resource_id: \"6863327462470717960\"\n                        - effect_id: \"12078089\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闪黑II\n                          resource_id: \"7221377929467400765\"\n                        - effect_id: \"634035\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闭幕\n                          resource_id: \"6725685146323784205\"\n                        - effect_id: \"634033\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 闭幕 II\n                          resource_id: \"6729065630013592067\"\n                        - effect_id: \"1427664\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 随机色块\n                          resource_id: \"7026674824537707038\"\n                        - effect_id: \"1441868\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 随机色块 II\n                          resource_id: \"7030742849134006792\"\n                        - effect_id: \"1206444\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 随机裁剪\n                          resource_id: \"6991794787464516127\"\n                        - effect_id: \"1400804\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 隐形人\n                          resource_id: \"7020318315310486046\"\n                        - effect_id: \"1168118\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 隔行扫描\n                          resource_id: \"6976152376457564708\"\n                        - effect_id: \"635041\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 雨滴晕开\n                          resource_id: \"6792488562869670414\"\n                        - effect_id: \"6431703\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 雪窗\n                          resource_id: \"7168743948528128548\"\n                        - effect_id: \"1441796\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 雪花\n                          resource_id: \"7030728702258319909\"\n                        - effect_id: \"634203\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 雪花冲屏\n                          resource_id: \"6769435378806952455\"\n                        - effect_id: \"634045\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 雪花开幕\n                          resource_id: \"6730429759425090059\"\n                        - effect_id: \"785064\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 雪花故障\n                          resource_id: \"6847689727261282824\"\n                        - effect_id: \"634201\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 雪花细闪\n                          resource_id: \"6770604155561054734\"\n                        - effect_id: \"6470260\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 零点解锁\n                          resource_id: \"6907054642123772430\"\n                        - effect_id: \"635049\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 雾气\n                          resource_id: \"6734619830449607171\"\n                        - effect_id: \"635045\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 雾气 II\n                          resource_id: \"6740539818666627588\"\n                        - effect_id: \"635065\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 雾气光线\n                          resource_id: \"6715209712129806851\"\n                        - effect_id: \"634075\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 震动\n                          resource_id: \"6761645818723176968\"\n                        - effect_id: \"1552220\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 霓虹投影\n                          resource_id: \"7058961173743407630\"\n                        - effect_id: \"1034626\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 霓虹摇摆\n                          resource_id: \"6925387220073320974\"\n                        - effect_id: \"742028\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 霓虹灯\n                          resource_id: \"6829182808485794311\"\n                        - effect_id: \"1113432\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 预警\n                          resource_id: \"6955083255825568264\"\n                        - effect_id: \"892172\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 颤抖\n                          resource_id: \"6863326875649839623\"\n                        - effect_id: \"634153\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 飘落花瓣\n                          resource_id: \"6719658795661791747\"\n                        - effect_id: \"634165\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 飘落闪粉\n                          resource_id: \"6720029963602366979\"\n                        - effect_id: \"634163\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 飘落闪粉 II\n                          resource_id: \"6720029866504229390\"\n                        - effect_id: \"635061\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 飘雪\n                          resource_id: \"6732360625214722572\"\n                        - effect_id: \"635055\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 飘雪 II\n                          resource_id: \"6763531573594690061\"\n                        - effect_id: \"1102992\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 飞速计算\n                          resource_id: \"6951364383477862948\"\n                        - effect_id: \"639477\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 马赛克\n                          resource_id: \"6770564289074827784\"\n                        - effect_id: \"1113136\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 高光瞬间\n                          resource_id: \"6955021144156017188\"\n                        - effect_id: \"705071\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 魅力光束\n                          resource_id: \"6814668066882851335\"\n                        - effect_id: \"1232490\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 魔法\n                          resource_id: \"7000199435372204580\"\n                        - effect_id: \"1136674\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 魔法变身\n                          resource_id: \"6964608751231832613\"\n                        - effect_id: \"1401520\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 魔法边框\n                          resource_id: \"7020407234798555655\"\n                        - effect_id: \"1408090\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 魔法边框 II\n                          resource_id: \"7021795690149843463\"\n                        - effect_id: \"901430\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 鱼眼\n                          resource_id: \"6867722963865571854\"\n                        - effect_id: \"1232996\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 黄蓝星芒\n                          resource_id: \"7000312634574639653\"\n                        - effect_id: \"1408072\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 黑白VHS\n                          resource_id: \"7021795095900852772\"\n                        - effect_id: \"635017\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 黑白三格\n                          resource_id: \"6719657002571665934\"\n                        - effect_id: \"634953\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 黑白漫画\n                          resource_id: \"6795826673993388551\"\n                        - effect_id: \"981864\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 黑白漫画 II\n                          resource_id: \"6904876576735760904\"\n                        - effect_id: \"634951\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 黑白线描\n                          resource_id: \"6795430643154031111\"\n                        - effect_id: \"1155300\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 黑线故障\n                          resource_id: \"6970572741116170788\"\n                        - effect_id: \"634151\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 黑羽毛\n                          resource_id: \"6716441529084285454\"\n                        - effect_id: \"634149\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 黑羽毛 II\n                          resource_id: \"6751257389422350860\"\n                        - effect_id: \"898866\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 黑胶边框\n                          resource_id: \"6865958778265670151\"\n                        - effect_id: \"952514\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 黑色噪点\n                          resource_id: \"6888561214125773326\"\n                        - effect_id: \"635123\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: false\n                          name: 黑色老电视\n                          resource_id: \"6738276072246219277\"\n                        - effect_id: \"39438457\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 2024边框\n                          resource_id: \"7322367359967040037\"\n                        - effect_id: \"101569751\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 2025气球泡泡\n                          resource_id: \"7460731559339889203\"\n                        - effect_id: \"87985393\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 360运镜\n                          resource_id: \"7430701460901335603\"\n                        - effect_id: \"89453641\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 360运镜 II\n                          resource_id: \"7434813086239822387\"\n                        - effect_id: \"101633856\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 3D春联\n                          resource_id: \"7460821768022790665\"\n                        - effect_id: \"98657836\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 3D环绕\n                          resource_id: \"7452986473306919433\"\n                        - effect_id: \"89952914\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 3D环绕屏\n                          resource_id: \"7436018394580652553\"\n                        - effect_id: \"31620429\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: Bling飘落\n                          resource_id: \"7306819369571455515\"\n                        - effect_id: \"12744891\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: C300\n                          resource_id: \"7226241938649780793\"\n                        - effect_id: \"11068675\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: IXUS\n                          resource_id: \"7213660933942415930\"\n                        - effect_id: \"20434943\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: Ins描边\n                          resource_id: \"7265936765175730744\"\n                        - effect_id: \"88353245\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: PASSION\n                          resource_id: \"7431776147530060314\"\n                        - effect_id: \"26271784\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: S形运镜\n                          resource_id: \"7291263159023702584\"\n                        - effect_id: \"12732403\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: W830\n                          resource_id: \"7226197862529372731\"\n                        - effect_id: \"26002592\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 一刀两断\n                          resource_id: \"7290460914174661177\"\n                        - effect_id: \"59474165\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 丁达尔旋焦\n                          resource_id: \"7361697260960223759\"\n                        - effect_id: \"82495223\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 万向镜像\n                          resource_id: \"7414043485189181978\"\n                        - effect_id: \"96240756\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 三段式黑白\n                          resource_id: \"7447351620641231369\"\n                        - effect_id: \"101569718\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 上上签\n                          resource_id: \"7460731920393966118\"\n                        - effect_id: \"89190637\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 下雨涟漪\n                          resource_id: \"7434055685576331786\"\n                        - effect_id: \"21210786\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 丝印涂鸦\n                          resource_id: \"7270068054040515131\"\n                        - effect_id: \"71888371\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 丝滑运镜\n                          resource_id: \"7382145257607008809\"\n                        - effect_id: \"1594946\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 两屏分割\n                          resource_id: \"7069602912057430558\"\n                        - effect_id: \"12495253\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 中轴旋转\n                          resource_id: \"7224407224460775994\"\n                        - effect_id: \"97484026\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 二次元运镜\n                          resource_id: \"7450031573962887731\"\n                        - effect_id: \"24962948\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 云朵绵绵\n                          resource_id: \"7287143540033851964\"\n                        - effect_id: \"7318779\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 五星好评\n                          resource_id: \"7176947440350663223\"\n                        - effect_id: \"26216294\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 交叉震闪\n                          resource_id: \"7291135461697786423\"\n                        - effect_id: \"96135790\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 仙女棒II\n                          resource_id: \"7447044441463853594\"\n                        - effect_id: \"29478846\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 低保真\n                          resource_id: \"7300933146923504178\"\n                        - effect_id: \"26353150\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 侧移模糊\n                          resource_id: \"7291553469180154423\"\n                        - effect_id: \"96240755\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 信号干扰\n                          resource_id: \"7447351621220045338\"\n                        - effect_id: \"57670397\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 倒带\n                          resource_id: \"7358381380687893027\"\n                        - effect_id: \"1485906\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 倒计时\n                          resource_id: \"7042501782014005773\"\n                        - effect_id: \"99131598\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 倒计时 III\n                          resource_id: \"7454157863196299802\"\n                        - effect_id: \"97150131\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 倒计时II\n                          resource_id: \"7449262940080837129\"\n                        - effect_id: \"6940703\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 假日闪闪 Ⅱ\n                          resource_id: \"7173558602580365838\"\n                        - effect_id: \"14975389\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 像素屏闪\n                          resource_id: \"7242581780866273850\"\n                        - effect_id: \"50297398\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 像素扫描\n                          resource_id: \"7345080472545792521\"\n                        - effect_id: \"56071748\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 像素拉伸 II\n                          resource_id: \"7355396055397044790\"\n                        - effect_id: \"12385973\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 像素排序\n                          resource_id: \"7223659432419267132\"\n                        - effect_id: \"14523597\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 像素故障\n                          resource_id: \"7239557281942082107\"\n                        - effect_id: \"1552218\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 像素爱心\n                          resource_id: \"7058961362550002212\"\n                        - effect_id: \"52648474\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 像素震闪\n                          resource_id: \"7349147660290363944\"\n                        - effect_id: \"1500914\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 光线扫描\n                          resource_id: \"7047492648587760142\"\n                        - effect_id: \"17852396\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 光线拖影\n                          resource_id: \"7254547939194835515\"\n                        - effect_id: \"18636946\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 光谱扫描\n                          resource_id: \"7257452387160298021\"\n                        - effect_id: \"8571129\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 兔个好彩头\n                          resource_id: \"7187795247936574013\"\n                        - effect_id: \"8343041\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 兔兔碎闪\n                          resource_id: \"7184326422612152887\"\n                        - effect_id: \"8617039\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 兔年红包\n                          resource_id: \"7189544276651414073\"\n                        - effect_id: \"96135791\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 全屏烟花\n                          resource_id: \"7447044440864068105\"\n                        - effect_id: \"101570129\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 全屏祝福语\n                          resource_id: \"7460729732548530698\"\n                        - effect_id: \"15772481\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 全息扫描\n                          resource_id: \"7246746366108504636\"\n                        - effect_id: \"96240753\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 分区显色\n                          resource_id: \"7447351620641231397\"\n                        - effect_id: \"22335555\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 分屏漏光\n                          resource_id: \"7276332732051886649\"\n                        - effect_id: \"100675645\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 剪纸窗花\n                          resource_id: \"7458222774511735305\"\n                        - effect_id: \"52247519\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 动态侦测\n                          resource_id: \"7348407437877056009\"\n                        - effect_id: \"1570398\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 动态格\n                          resource_id: \"7065593660921877028\"\n                        - effect_id: \"5779099\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 动感光束\n                          resource_id: \"7162091309375689223\"\n                        - effect_id: \"47239575\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 动感变焦\n                          resource_id: \"7338707315987583488\"\n                        - effect_id: \"50636467\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 动感扫光\n                          resource_id: \"7345724656642429452\"\n                        - effect_id: \"43472640\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 动感推镜\n                          resource_id: \"7330964667252085248\"\n                        - effect_id: \"47905484\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 动感竖线\n                          resource_id: \"7339899789795922468\"\n                        - effect_id: \"48296868\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 动感运镜\n                          resource_id: \"7340866533943415308\"\n                        - effect_id: \"5508159\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 十字模糊\n                          resource_id: \"7156060838334304775\"\n                        - effect_id: \"26443872\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 十字爆闪\n                          resource_id: \"7291868496558821915\"\n                        - effect_id: \"12087461\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 单向移动\n                          resource_id: \"7221408305871065661\"\n                        - effect_id: \"28007443\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 单彩渐变\n                          resource_id: \"7296751848508101158\"\n                        - effect_id: \"3956309\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 单色填充\n                          resource_id: \"7128329164314120717\"\n                        - effect_id: \"1498082\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 卡机\n                          resource_id: \"7046676785693463071\"\n                        - effect_id: \"57459941\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 卡通渲染\n                          resource_id: \"7358012370125328937\"\n                        - effect_id: \"101601751\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 卷轴打开\n                          resource_id: \"7460778048531468809\"\n                        - effect_id: \"101633890\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 厚卡纸\n                          resource_id: \"7460821872972665381\"\n                        - effect_id: \"78211648\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 原相机拉近\n                          resource_id: \"7400658188275552804\"\n                        - effect_id: \"90036897\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 原相机滤镜\n                          resource_id: \"7436273714724868646\"\n                        - effect_id: \"90036894\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 原相机缩放\n                          resource_id: \"7436273714724868634\"\n                        - effect_id: \"80799118\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 双重辉光\n                          resource_id: \"7408494348532191807\"\n                        - effect_id: \"51997290\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 发光 II\n                          resource_id: \"7347959501246435850\"\n                        - effect_id: \"20444395\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 发光HDR\n                          resource_id: \"7265989852099777061\"\n                        - effect_id: \"4694121\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 取景器\n                          resource_id: \"7145432172021682725\"\n                        - effect_id: \"95320464\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 变焦烟花\n                          resource_id: \"7445177785401741874\"\n                        - effect_id: \"5418579\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 变色狙击\n                          resource_id: \"7146096867544142367\"\n                        - effect_id: \"18628864\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 变色闪光\n                          resource_id: \"7257436414965453368\"\n                        - effect_id: \"47074578\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 变速推镜\n                          resource_id: \"7338347637009027618\"\n                        - effect_id: \"53195413\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 变速推镜II\n                          resource_id: \"7349154305045172736\"\n                        - effect_id: \"97260688\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 可爱圣诞\n                          resource_id: \"7449596462645645851\"\n                        - effect_id: \"20662139\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 可爱涂鸦\n                          resource_id: \"7267137261697765943\"\n                        - effect_id: \"4884447\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 吓到失魂\n                          resource_id: \"7149057547792552456\"\n                        - effect_id: \"101947466\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 哈哈镜\n                          resource_id: \"7461830381428281893\"\n                        - effect_id: \"86397729\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 噪点屏闪\n                          resource_id: \"7425529107548475955\"\n                        - effect_id: \"4002845\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 噪片映射\n                          resource_id: \"7130233403898597902\"\n                        - effect_id: \"28683046\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 圆形分屏\n                          resource_id: \"7298664552793641522\"\n                        - effect_id: \"95041383\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 圆形烟花\n                          resource_id: \"7444470107008406066\"\n                        - effect_id: \"79985522\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 圆形监控\n                          resource_id: \"7405798478032409125\"\n                        - effect_id: \"96135792\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 圣诞CD\n                          resource_id: \"7447044441430299173\"\n                        - effect_id: \"95320466\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 圣诞Kira\n                          resource_id: \"7445177785401741850\"\n                        - effect_id: \"32448752\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 圣诞日记\n                          resource_id: \"7308639868085604901\"\n                        - effect_id: \"95041382\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 圣诞明信片\n                          resource_id: \"7444470107041960485\"\n                        - effect_id: \"95912239\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 圣诞边框\n                          resource_id: \"7446622476928307762\"\n                        - effect_id: \"97032429\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 圣诞限定\n                          resource_id: \"7448898555621675529\"\n                        - effect_id: \"80123254\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 复古半调\n                          resource_id: \"7406210463857381925\"\n                        - effect_id: \"21148898\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 复古彩虹\n                          resource_id: \"7269735872445026877\"\n                        - effect_id: \"20159886\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 复古拼贴\n                          resource_id: \"7264510800415429177\"\n                        - effect_id: \"80123827\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 复古撕纸\n                          resource_id: \"7406211198057714203\"\n                        - effect_id: \"80122613\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 复古电视\n                          resource_id: \"7406209423548355081\"\n                        - effect_id: \"96135789\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 复古电视机\n                          resource_id: \"7447044440859873802\"\n                        - effect_id: \"21870120\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 复古紫调\n                          resource_id: \"7273707462107075130\"\n                        - effect_id: \"7308411\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 复古红调\n                          resource_id: \"7170897764744696356\"\n                        - effect_id: \"92005922\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 复古辉光\n                          resource_id: \"7439255870900277811\"\n                        - effect_id: \"90036896\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 复古边框\n                          resource_id: \"7436273714729062938\"\n                        - effect_id: \"1644374\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 复古连拍\n                          resource_id: \"7078198448045953572\"\n                        - effect_id: \"1475376\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 复古闪闪\n                          resource_id: \"7039549945338139150\"\n                        - effect_id: \"49278125\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 复古频闪\n                          resource_id: \"7343141676828856844\"\n                        - effect_id: \"101569841\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 大字祝福\n                          resource_id: \"7460730608377926195\"\n                        - effect_id: \"101483768\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 大爆竹\n                          resource_id: \"7460441486266470938\"\n                        - effect_id: \"8556597\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 失焦CCD\n                          resource_id: \"7189438884340568633\"\n                        - effect_id: \"23238701\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 失焦光斑\n                          resource_id: \"7280121081208246845\"\n                        - effect_id: \"96240758\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 夸张信号\n                          resource_id: \"7447351620645425691\"\n                        - effect_id: \"39287043\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 定格祝福\n                          resource_id: \"7321603111791890982\"\n                        - effect_id: \"63011918\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 实况开幕\n                          resource_id: \"7367289783153857024\"\n                        - effect_id: \"77292235\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 密码解锁\n                          resource_id: \"7398180847427260963\"\n                        - effect_id: \"9034919\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 对焦DV\n                          resource_id: \"7195792007309038117\"\n                        - effect_id: \"29684830\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 局部推镜\n                          resource_id: \"7301528497577529906\"\n                        - effect_id: \"1482682\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 局部色彩\n                          resource_id: \"7041515097927193125\"\n                        - effect_id: \"21899077\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 居中闪切\n                          resource_id: \"7273800436128158264\"\n                        - effect_id: \"3529421\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 屏幕律动\n                          resource_id: \"7119437097697546782\"\n                        - effect_id: \"46674042\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 幻动光斑\n                          resource_id: \"7337641482376974883\"\n                        - effect_id: \"1005744\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 幻彩故障\n                          resource_id: \"6912383907191067149\"\n                        - effect_id: \"10969387\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 幻影 I\n                          resource_id: \"7212904257043829307\"\n                        - effect_id: \"87569749\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 幻觉 II\n                          resource_id: \"7429260401365226021\"\n                        - effect_id: \"89895356\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 广告运镜\n                          resource_id: \"7435897594078827034\"\n                        - effect_id: \"79148302\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 弯曲故障\n                          resource_id: \"7403295225700946441\"\n                        - effect_id: \"44400476\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 弹动摇镜\n                          resource_id: \"7332839146907505215\"\n                        - effect_id: \"69256604\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 弹动旋入\n                          resource_id: \"7377307494097359371\"\n                        - effect_id: \"5718993\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 弹性闪动\n                          resource_id: \"7161280260435087885\"\n                        - effect_id: \"75492745\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 弹震运镜\n                          resource_id: \"7392137368624435752\"\n                        - effect_id: \"87673618\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩光幻影\n                          resource_id: \"7429623957759726107\"\n                        - effect_id: \"58342723\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩光摇晃\n                          resource_id: \"7359557508014281268\"\n                        - effect_id: \"12061167\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩光频闪\n                          resource_id: \"7221126479793361465\"\n                        - effect_id: \"101569557\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩带飘落\n                          resource_id: \"7460732448666554889\"\n                        - effect_id: \"17710540\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩色像素\n                          resource_id: \"7254126716489044538\"\n                        - effect_id: \"15698169\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩色流光 I\n                          resource_id: \"7246400747665887802\"\n                        - effect_id: \"16940779\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩色流光 II\n                          resource_id: \"7251502652549239354\"\n                        - effect_id: \"15699849\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩色流光 III\n                          resource_id: \"7246410407399658043\"\n                        - effect_id: \"1142428\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩色火焰\n                          resource_id: \"6966855040380178981\"\n                        - effect_id: \"12323189\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩色珠滴\n                          resource_id: \"7223201236621726264\"\n                        - effect_id: \"22296923\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩色电光\n                          resource_id: \"7275262942348579389\"\n                        - effect_id: \"7743725\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩色碎彩\n                          resource_id: \"7181402247824151099\"\n                        - effect_id: \"2148348\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩色碎片\n                          resource_id: \"7101592529811804679\"\n                        - effect_id: \"2483800\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩色碎片 II\n                          resource_id: \"7104546559747953166\"\n                        - effect_id: \"95964975\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩色碎闪\n                          resource_id: \"7446672733347254796\"\n                        - effect_id: \"12297327\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩色闪烁\n                          resource_id: \"7222939637260489274\"\n                        - effect_id: \"1235380\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩色雪花\n                          resource_id: \"7001001281166774792\"\n                        - effect_id: \"69089511\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩虹光影\n                          resource_id: \"7377004728208593447\"\n                        - effect_id: \"9053951\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩虹棱镜\n                          resource_id: \"7195867446429880889\"\n                        - effect_id: \"10021925\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩虹泛光\n                          resource_id: \"7195112049876144698\"\n                        - effect_id: \"49499805\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩虹闪屏\n                          resource_id: \"7343557569589285413\"\n                        - effect_id: \"54679766\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 彩边频闪\n                          resource_id: \"7352815372510171688\"\n                        - effect_id: \"102188349\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 微信祝福\n                          resource_id: \"7462226660188754458\"\n                        - effect_id: \"69480931\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 微震闪黑\n                          resource_id: \"7377721589900513818\"\n                        - effect_id: \"3803337\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 心花怒放\n                          resource_id: \"7125743711144645127\"\n                        - effect_id: \"96154625\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 心花怒放III\n                          resource_id: \"7447067834632376869\"\n                        - effect_id: \"4478025\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 心跳 II\n                          resource_id: \"7140620970934407693\"\n                        - effect_id: \"23539651\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 快速变焦\n                          resource_id: \"7281494629483024952\"\n                        - effect_id: \"62251172\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 快闪运镜\n                          resource_id: \"7366140711969755674\"\n                        - effect_id: \"79669475\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 怀旧画质\n                          resource_id: \"7404740894194143763\"\n                        - effect_id: \"5418578\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 恐怖涂鸦\n                          resource_id: \"7117142803863310855\"\n                        - effect_id: \"102289828\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 恭喜发财 II\n                          resource_id: \"7462352353199395366\"\n                        - effect_id: \"37514660\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 慢门拖影\n                          resource_id: \"7317916065353175579\"\n                        - effect_id: \"3099452\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 手写边框\n                          resource_id: \"7111253709614486029\"\n                        - effect_id: \"89308029\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 手持运镜\n                          resource_id: \"7434412782293881382\"\n                        - effect_id: \"47079994\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 扭动变焦\n                          resource_id: \"7338354272280515106\"\n                        - effect_id: \"28941014\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 扭曲变焦\n                          resource_id: \"7299392770534281765\"\n                        - effect_id: \"10694297\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 扭曲模糊\n                          resource_id: \"7210652297754317367\"\n                        - effect_id: \"9780487\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 抖动模糊\n                          resource_id: \"7202812661405323813\"\n                        - effect_id: \"101494014\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 折叠拜年\n                          resource_id: \"7460466187265118747\"\n                        - effect_id: \"54890386\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 抽帧拖影\n                          resource_id: \"7353197719587918362\"\n                        - effect_id: \"58077796\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 拉伸旋镜\n                          resource_id: \"7359100199437865506\"\n                        - effect_id: \"14603013\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 拉扯震动\n                          resource_id: \"7240010949938123320\"\n                        - effect_id: \"48340294\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 拉镜开幕\n                          resource_id: \"7340923698955686451\"\n                        - effect_id: \"57913226\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 拍照定格\n                          resource_id: \"7358795504966177292\"\n                        - effect_id: \"97589170\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 拍立得成像\n                          resource_id: \"7450356960953635354\"\n                        - effect_id: \"42028150\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 拖影灯光\n                          resource_id: \"7328017754584257075\"\n                        - effect_id: \"1478160\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 拟截图放大镜\n                          resource_id: \"7028458557058060831\"\n                        - effect_id: \"70944695\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 推拉跟随\n                          resource_id: \"7380236931893826089\"\n                        - effect_id: \"71865342\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 推拉运镜\n                          resource_id: \"7382100760630137381\"\n                        - effect_id: \"89190636\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 推近推远\n                          resource_id: \"7434055685572137523\"\n                        - effect_id: \"101601833\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 摇摇乐\n                          resource_id: \"7460778162570400265\"\n                        - effect_id: \"31866711\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 摇晃叠影\n                          resource_id: \"7307264899422360073\"\n                        - effect_id: \"33958767\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 摇晃推镜\n                          resource_id: \"7311585733976789554\"\n                        - effect_id: \"14730265\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 摇晃运镜\n                          resource_id: \"7241063267357954619\"\n                        - effect_id: \"81222744\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 撕纸定格\n                          resource_id: \"7409923919739621898\"\n                        - effect_id: \"14014573\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 撕纸特写\n                          resource_id: \"7235886675845452349\"\n                        - effect_id: \"1647944\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 播放界面\n                          resource_id: \"7078880636584333838\"\n                        - effect_id: \"96299420\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 放大镜视角\n                          resource_id: \"7447417965676335667\"\n                        - effect_id: \"12383111\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 故障定格\n                          resource_id: \"7223652101287580216\"\n                        - effect_id: \"47063402\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 故障开幕\n                          resource_id: \"7338335435959046656\"\n                        - effect_id: \"35954280\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 故障震闪\n                          resource_id: \"7315262223213924873\"\n                        - effect_id: \"52013378\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 散光弹动\n                          resource_id: \"7347985147662176807\"\n                        - effect_id: \"47894032\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 散光闪烁\n                          resource_id: \"7338348256226710016\"\n                        - effect_id: \"17852330\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 数字矩阵\n                          resource_id: \"7254547645903934010\"\n                        - effect_id: \"81347687\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 数学公式\n                          resource_id: \"7410350357768835594\"\n                        - effect_id: \"15332069\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 斜线震动\n                          resource_id: \"7244511673409606201\"\n                        - effect_id: \"39297699\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 新年仙女棒\n                          resource_id: \"7321990419351343653\"\n                        - effect_id: \"8629763\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 新年兔气球\n                          resource_id: \"7189956032095851063\"\n                        - effect_id: \"97032431\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 新年投影\n                          resource_id: \"7448898555617481267\"\n                        - effect_id: \"97041325\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 新年烟花 II\n                          resource_id: \"7448907790933824010\"\n                        - effect_id: \"101601588\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 新年的一封信\n                          resource_id: \"7460777723925893683\"\n                        - effect_id: \"101222490\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 新年礼花\n                          resource_id: \"7459729290070856229\"\n                        - effect_id: \"101601911\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 新年边框\n                          resource_id: \"7460778303587095077\"\n                        - effect_id: \"100675597\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 新春唱片\n                          resource_id: \"7458223206294360626\"\n                        - effect_id: \"102355526\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 新春海报\n                          resource_id: \"7462629172121178633\"\n                        - effect_id: \"102355090\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 新春边框\n                          resource_id: \"7462628644221882906\"\n                        - effect_id: \"72505526\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 方形模糊\n                          resource_id: \"7384032238951731739\"\n                        - effect_id: \"12505491\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 旋焦\n                          resource_id: \"7224445669698703909\"\n                        - effect_id: \"53786746\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 旋焦推镜\n                          resource_id: \"7351324357425107519\"\n                        - effect_id: \"33928843\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 旋转变焦\n                          resource_id: \"7311544501057622555\"\n                        - effect_id: \"49499445\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 旋转回弹\n                          resource_id: \"7343557174058029568\"\n                        - effect_id: \"71888863\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 旋转圆球\n                          resource_id: \"7382147305350107700\"\n                        - effect_id: \"40324156\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 旋转抖动\n                          resource_id: \"7324315025558999602\"\n                        - effect_id: \"51995951\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 旋转抖动 II\n                          resource_id: \"7347956961318539826\"\n                        - effect_id: \"96135794\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 日进斗金\n                          resource_id: \"7447044440868262426\"\n                        - effect_id: \"76494544\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 时尚涂鸦\n                          resource_id: \"7395106209155518987\"\n                        - effect_id: \"78259894\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 星光变焦\n                          resource_id: \"7400757039498007079\"\n                        - effect_id: \"6661731\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 星星变焦\n                          resource_id: \"7169474672671592991\"\n                        - effect_id: \"19104048\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 曝光变焦\n                          resource_id: \"7259639809491079737\"\n                        - effect_id: \"47990686\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 曝光扩散\n                          resource_id: \"7340136879615906344\"\n                        - effect_id: \"48215352\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 曲线模糊\n                          resource_id: \"7340622176065688098\"\n                        - effect_id: \"49487569\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 极速旋转\n                          resource_id: \"7343542497651462708\"\n                        - effect_id: \"16279737\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 柔和辉光\n                          resource_id: \"7249209626829263421\"\n                        - effect_id: \"56065875\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 梦幻辉光\n                          resource_id: \"7355386179308491300\"\n                        - effect_id: \"53350183\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 模拟拍照\n                          resource_id: \"7349154734537708084\"\n                        - effect_id: \"14965785\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 横向闪光\n                          resource_id: \"7242555690965799483\"\n                        - effect_id: \"71626094\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 横条开幕\n                          resource_id: \"7381442168759521792\"\n                        - effect_id: \"10348463\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 樱花飘落\n                          resource_id: \"7207718227382637113\"\n                        - effect_id: \"62749085\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 欧根纱II\n                          resource_id: \"7366882927801537024\"\n                        - effect_id: \"97260689\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 气球满屏\n                          resource_id: \"7449596462649840155\"\n                        - effect_id: \"13400477\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 气球花花\n                          resource_id: \"7231385092193522235\"\n                        - effect_id: \"32599175\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 氛围边框\n                          resource_id: \"7308944810646180379\"\n                        - effect_id: \"3687389\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 水光影\n                          resource_id: \"7122736441053942285\"\n                        - effect_id: \"35129784\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 水波倒影\n                          resource_id: \"7313842878847914547\"\n                        - effect_id: \"1499278\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 水波模糊\n                          resource_id: \"7047088638932292127\"\n                        - effect_id: \"16641371\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 水波泛起\n                          resource_id: \"7250433374882370103\"\n                        - effect_id: \"4458607\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 水波流动\n                          resource_id: \"7140273505630687780\"\n                        - effect_id: \"90036895\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 水波负片\n                          resource_id: \"7436273714733257267\"\n                        - effect_id: \"12112703\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 水滴扩散\n                          resource_id: \"7221508316852130362\"\n                        - effect_id: \"96257972\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 水雾消散\n                          resource_id: \"7447371185806905865\"\n                        - effect_id: \"13537551\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 油画模糊\n                          resource_id: \"7232232188278739493\"\n                        - effect_id: \"101601695\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 油纸伞\n                          resource_id: \"7460777943397044745\"\n                        - effect_id: \"1747384\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 法式暖调\n                          resource_id: \"7090546987170271780\"\n                        - effect_id: \"17395354\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 法式涂鸦\n                          resource_id: \"7253039682877919803\"\n                        - effect_id: \"4217252\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 泛光扫描\n                          resource_id: \"7134989289498087967\"\n                        - effect_id: \"17821188\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 泛光爆闪\n                          resource_id: \"7254484266996732476\"\n                        - effect_id: \"14080033\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 泛光闪动\n                          resource_id: \"7236298986993226301\"\n                        - effect_id: \"38547267\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 泡泡光斑\n                          resource_id: \"7320155012036825610\"\n                        - effect_id: \"67466796\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 泡泡冲屏\n                          resource_id: \"7373963046693114387\"\n                        - effect_id: \"48213992\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 波动清晰\n                          resource_id: \"7340620060362281512\"\n                        - effect_id: \"5574521\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 波浪\n                          resource_id: \"7159183282632921631\"\n                        - effect_id: \"4880117\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 波浪丝印\n                          resource_id: \"7146406661249307150\"\n                        - effect_id: \"44222768\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 波纹闪动\n                          resource_id: \"7332415663106953769\"\n                        - effect_id: \"12130415\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 流体冲屏\n                          resource_id: \"7221730308251456037\"\n                        - effect_id: \"39315461\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 流体荡开\n                          resource_id: \"7322018576125137417\"\n                        - effect_id: \"95069546\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 流光碎闪\n                          resource_id: \"7444520354703217178\"\n                        - effect_id: \"95912238\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 浪漫烟火\n                          resource_id: \"7446622476928324146\"\n                        - effect_id: \"4118241\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 海报描边\n                          resource_id: \"7133104392231719431\"\n                        - effect_id: \"1520896\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 海鸥DC\n                          resource_id: \"7051853636548170271\"\n                        - effect_id: \"84197797\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 涂鸦vlog\n                          resource_id: \"7418860485258252826\"\n                        - effect_id: \"96240757\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 涂鸦切开\n                          resource_id: \"7447351620649619994\"\n                        - effect_id: \"88922989\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 涂鸦抽帧\n                          resource_id: \"7433322731896050212\"\n                        - effect_id: \"80566411\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 涂鸦拍立得\n                          resource_id: \"7407715616225759807\"\n                        - effect_id: \"14742833\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 液态分离\n                          resource_id: \"7241096748184113701\"\n                        - effect_id: \"102385218\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 滑动打开\n                          resource_id: \"7462679471246545459\"\n                        - effect_id: \"93990334\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 滑动载入\n                          resource_id: \"7442210447844971017\"\n                        - effect_id: \"31585739\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 漂浮爱心\n                          resource_id: \"7306769922535723558\"\n                        - effect_id: \"82396172\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 漏光闪烁\n                          resource_id: \"7413730211969110537\"\n                        - effect_id: \"89895358\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 漫画负片\n                          resource_id: \"7435897594070438451\"\n                        - effect_id: \"53198933\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 潮流涂鸦\n                          resource_id: \"7350240257914180135\"\n                        - effect_id: \"54008092\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 瀑布开幕\n                          resource_id: \"7351689682138174006\"\n                        - effect_id: \"102169716\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 瀑布烟花\n                          resource_id: \"7462213415688213001\"\n                        - effect_id: \"93705701\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 灵异幻觉\n                          resource_id: \"7441568585081688585\"\n                        - effect_id: \"28934274\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 灵魂出窍 II\n                          resource_id: \"7299377358283215398\"\n                        - effect_id: \"30737307\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 灿灿金币\n                          resource_id: \"7304546673215148595\"\n                        - effect_id: \"33271125\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 灿金彩带\n                          resource_id: \"7308706488686481947\"\n                        - effect_id: \"1237470\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 炫光变焦\n                          resource_id: \"7002109122350944781\"\n                        - effect_id: \"63023070\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 炫光扫描\n                          resource_id: \"7367314177741820435\"\n                        - effect_id: \"100663283\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 炸蛇烟花\n                          resource_id: \"7458204947906040370\"\n                        - effect_id: \"97260687\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 烟火星河\n                          resource_id: \"7449596462645645874\"\n                        - effect_id: \"36744068\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 烟花2024\n                          resource_id: \"7308706250731033097\"\n                        - effect_id: \"96021458\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 烟花2025\n                          resource_id: \"7446764449010029066\"\n                        - effect_id: \"95320465\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 烟花光晕\n                          resource_id: \"7445177785410130469\"\n                        - effect_id: \"101569174\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 烟花孔明灯\n                          resource_id: \"7460733084413989426\"\n                        - effect_id: \"101960315\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 烟花字\n                          resource_id: \"7461841371700138505\"\n                        - effect_id: \"9062069\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 热恋\n                          resource_id: \"7195020880018149944\"\n                        - effect_id: \"101569519\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 爆元宝\n                          resource_id: \"7460732612668035634\"\n                        - effect_id: \"12284805\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 爆闪锐化\n                          resource_id: \"7222907722486780472\"\n                        - effect_id: \"89190638\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 爱心下雪\n                          resource_id: \"7434055685559554569\"\n                        - effect_id: \"39420273\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 爱心扫光\n                          resource_id: \"7322345920962499123\"\n                        - effect_id: \"20875808\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 爱心气球\n                          resource_id: \"7268210584707928634\"\n                        - effect_id: \"98156320\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 爱心烟花Ⅱ\n                          resource_id: \"7451813291430515210\"\n                        - effect_id: \"43774786\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 爱心软糖\n                          resource_id: \"7331625316885991970\"\n                        - effect_id: \"1572505\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 爱心边框\n                          resource_id: \"7065927898833621511\"\n                        - effect_id: \"102389141\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 猫眼迎财\n                          resource_id: \"7462694218327134758\"\n                        - effect_id: \"102609449\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 玫瑰冲屏\n                          resource_id: \"7463437625777459721\"\n                        - effect_id: \"20820466\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 珠光Kira\n                          resource_id: \"7267917946733728314\"\n                        - effect_id: \"20405527\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 珠光碎闪\n                          resource_id: \"7265695554640810533\"\n                        - effect_id: \"31428923\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 琉璃拖影\n                          resource_id: \"7306400287323853349\"\n                        - effect_id: \"2721906\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 电光描边\n                          resource_id: \"7106762731960668703\"\n                        - effect_id: \"29755128\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 电光波动\n                          resource_id: \"7301674026173207066\"\n                        - effect_id: \"31478585\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 电光爆闪\n                          resource_id: \"7306471467397419547\"\n                        - effect_id: \"52650215\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 电光爆闪 II\n                          resource_id: \"7349150013441708559\"\n                        - effect_id: \"2724410\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 电光爱心\n                          resource_id: \"7106779118867321357\"\n                        - effect_id: \"89153641\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 电子复古粉\n                          resource_id: \"7434001622113456678\"\n                        - effect_id: \"15772327\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 电音故障\n                          resource_id: \"7246745900473651773\"\n                        - effect_id: \"52400085\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 画质清晰\n                          resource_id: \"7348707427165934107\"\n                        - effect_id: \"71992424\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 白鸽\n                          resource_id: \"7382490757770252827\"\n                        - effect_id: \"92805703\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 相机抓拍\n                          resource_id: \"7439935845156524583\"\n                        - effect_id: \"96240754\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 相机框抖动\n                          resource_id: \"7447351621207462426\"\n                        - effect_id: \"20350863\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 相片定格\n                          resource_id: \"7265526511220822586\"\n                        - effect_id: \"94166372\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 真爱至上\n                          resource_id: \"7442582812139459110\"\n                        - effect_id: \"89308030\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 矩形闪白\n                          resource_id: \"7434412782289703450\"\n                        - effect_id: \"31403673\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 矩阵频闪\n                          resource_id: \"7306346511367934491\"\n                        - effect_id: \"4007289\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 碎闪描边\n                          resource_id: \"7130585329609740814\"\n                        - effect_id: \"2211756\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 磁带DV\n                          resource_id: \"7101987162526061070\"\n                        - effect_id: \"1729610\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 磨砂水晶\n                          resource_id: \"7090380952605561381\"\n                        - effect_id: \"41485429\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 神龙纳福\n                          resource_id: \"7326853354615738889\"\n                        - effect_id: \"5408805\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 秋日暖阳\n                          resource_id: \"7156868464894808583\"\n                        - effect_id: \"15780929\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 移轴模糊\n                          resource_id: \"7246784641384845861\"\n                        - effect_id: \"72501890\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 竖向开幕\n                          resource_id: \"7384009190836015654\"\n                        - effect_id: \"10976911\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 竖向闪光\n                          resource_id: \"7212938795702817338\"\n                        - effect_id: \"30666842\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 竖线屏闪\n                          resource_id: \"7304258446658900489\"\n                        - effect_id: \"26216108\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 竖闪模糊\n                          resource_id: \"7291135061494075960\"\n                        - effect_id: \"88507650\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 童趣闪电\n                          resource_id: \"7432192373163037222\"\n                        - effect_id: \"28549704\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 粉雪\n                          resource_id: \"7298283919944716827\"\n                        - effect_id: \"11587497\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 粒子放射\n                          resource_id: \"7217716815407878693\"\n                        - effect_id: \"63611181\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 精致辉光\n                          resource_id: \"7368344527494451712\"\n                        - effect_id: \"34184103\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 紫光夜\n                          resource_id: \"7311995150962528778\"\n                        - effect_id: \"21150170\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 繁花棱镜II\n                          resource_id: \"7269749564658160184\"\n                        - effect_id: \"39289351\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 红包来了\n                          resource_id: \"7320154851793441307\"\n                        - effect_id: \"102355143\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 红包转转\n                          resource_id: \"7462628759770763826\"\n                        - effect_id: \"3675609\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 红蓝魔\n                          resource_id: \"7122384870294163975\"\n                        - effect_id: \"4007601\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 红边模糊\n                          resource_id: \"7130591331700707876\"\n                        - effect_id: \"8626971\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 纵向跳动\n                          resource_id: \"7190200556692967995\"\n                        - effect_id: \"83272772\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 纸质抽帧\n                          resource_id: \"7416333380603613737\"\n                        - effect_id: \"63209940\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 线光变速\n                          resource_id: \"7367628113062138377\"\n                        - effect_id: \"95331639\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 绚丽光斑\n                          resource_id: \"7445196904868090419\"\n                        - effect_id: \"1607634\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 缤纷\n                          resource_id: \"7072268839303516709\"\n                        - effect_id: \"95320463\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 缤纷彩带\n                          resource_id: \"7445177785405936138\"\n                        - effect_id: \"35751784\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 缤纷烟花\n                          resource_id: \"7314928469819789850\"\n                        - effect_id: \"90036898\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 缩放运镜\n                          resource_id: \"7436273714733257253\"\n                        - effect_id: \"4879935\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 网点丝印\n                          resource_id: \"7146404902971904548\"\n                        - effect_id: \"51832286\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 群蝶飞舞\n                          resource_id: \"7347658324956942883\"\n                        - effect_id: \"70529088\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 羽毛飘落\n                          resource_id: \"7379513630837969445\"\n                        - effect_id: \"28934164\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 翻转变焦\n                          resource_id: \"7299377095107416585\"\n                        - effect_id: \"14020695\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 翻转开幕\n                          resource_id: \"7235902836188385852\"\n                        - effect_id: \"1426168\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 老式DV\n                          resource_id: \"7026261220961292807\"\n                        - effect_id: \"101569261\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 聚光灯金粉\n                          resource_id: \"7460732843547693577\"\n                        - effect_id: \"88045350\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 聚焦色散\n                          resource_id: \"7430786234508644875\"\n                        - effect_id: \"101569809\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 胶卷\n                          resource_id: \"7460730844018119205\"\n                        - effect_id: \"5050659\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 胶片V\n                          resource_id: \"7151967279817691662\"\n                        - effect_id: \"4837281\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 胶片冷绿\n                          resource_id: \"7146524414312452645\"\n                        - effect_id: \"4837280\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 胶片暖棕\n                          resource_id: \"7145385234320593439\"\n                        - effect_id: \"1655466\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 胶片滚动\n                          resource_id: \"7080354236956938782\"\n                        - effect_id: \"90546418\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 胶片漏光III\n                          resource_id: \"7437386424036364827\"\n                        - effect_id: \"87654332\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 胶片翻转\n                          resource_id: \"7429592751961805348\"\n                        - effect_id: \"97032432\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 胶片边框\n                          resource_id: \"7448898555617481243\"\n                        - effect_id: \"72761923\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 胶片闪切\n                          resource_id: \"7384745950608101924\"\n                        - effect_id: \"1522814\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 脉搏跳动\n                          resource_id: \"7052226294972420621\"\n                        - effect_id: \"79942991\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 腾云驾雾\n                          resource_id: \"7405560326650860042\"\n                        - effect_id: \"55932216\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 色差震闪\n                          resource_id: \"7355109046694711871\"\n                        - effect_id: \"67503542\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 色散冲击\n                          resource_id: \"7374053937369846307\"\n                        - effect_id: \"14972687\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 色散故障\n                          resource_id: \"7242574690638631479\"\n                        - effect_id: \"83369566\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 节奏热成像\n                          resource_id: \"7416626838232896012\"\n                        - effect_id: \"86397374\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 花屏故障\n                          resource_id: \"7425528614847779379\"\n                        - effect_id: \"75855950\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 花屏故障 II\n                          resource_id: \"7392894917720150565\"\n                        - effect_id: \"50608291\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 花瓣环绕\n                          resource_id: \"7345688874577826342\"\n                        - effect_id: \"97032428\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 荧光星河\n                          resource_id: \"7448898556410204681\"\n                        - effect_id: \"40449614\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 菱形光斑\n                          resource_id: \"7316813562783994395\"\n                        - effect_id: \"4841353\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 菱形变焦\n                          resource_id: \"7147943538120987166\"\n                        - effect_id: \"5418631\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 落叶 II\n                          resource_id: \"7153556255263429151\"\n                        - effect_id: \"25450329\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 蓝光爆闪\n                          resource_id: \"7288655540341707324\"\n                        - effect_id: \"4097661\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 蓝色丝印\n                          resource_id: \"7131985730791805448\"\n                        - effect_id: \"69273433\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 虹光旋入\n                          resource_id: \"7377352335028130367\"\n                        - effect_id: \"101569875\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 蛇形走位\n                          resource_id: \"7460729982474523163\"\n                        - effect_id: \"101570158\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 蛇蛇涂鸦\n                          resource_id: \"7460729365366575667\"\n                        - effect_id: \"97254884\"\n                          has_params: false\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 西海岸涂鸦\n                          resource_id: \"7449588013115380251\"\n                        - effect_id: \"4668537\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 视频播放\n                          resource_id: \"7144915597308989988\"\n                        - effect_id: \"101569592\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 记忆存档\n                          resource_id: \"7460732200074351142\"\n                        - effect_id: \"86397483\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 诡异故障\n                          resource_id: \"7425528781156127258\"\n                        - effect_id: \"22907949\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 负片分屏\n                          resource_id: \"7278974994623763003\"\n                        - effect_id: \"89308031\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 负片描边\n                          resource_id: \"7434412782285492746\"\n                        - effect_id: \"5477607\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 负片涂鸦\n                          resource_id: \"7157966185571553822\"\n                        - effect_id: \"13379581\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 负片涂鸦 II\n                          resource_id: \"7231111030028374584\"\n                        - effect_id: \"20745376\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 负片涂鸦 III\n                          resource_id: \"7267517097775731261\"\n                        - effect_id: \"1787254\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 负片游移\n                          resource_id: \"7091488033555354120\"\n                        - effect_id: \"5155369\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 负片频闪\n                          resource_id: \"7153575555554611720\"\n                        - effect_id: \"83794424\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 负片频闪 II\n                          resource_id: \"7417726471868781110\"\n                        - effect_id: \"94976472\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 贴身粒子\n                          resource_id: \"7444407996911718949\"\n                        - effect_id: \"6691829\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 超大光斑\n                          resource_id: \"7171321435200164383\"\n                        - effect_id: \"3950243\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 超强锐化\n                          resource_id: \"7129336892121682468\"\n                        - effect_id: \"28956878\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 跟随运镜\n                          resource_id: \"7299426452896748042\"\n                        - effect_id: \"48362872\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 跟随运镜 II\n                          resource_id: \"7340954638184616467\"\n                        - effect_id: \"96240759\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 跳色四宫格\n                          resource_id: \"7447351620641247754\"\n                        - effect_id: \"4795296\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 车窗 II\n                          resource_id: \"7109280482025542157\"\n                        - effect_id: \"101959980\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 转运祝福\n                          resource_id: \"7461840876596105766\"\n                        - effect_id: \"86397588\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 轻微故障\n                          resource_id: \"7425528929454133786\"\n                        - effect_id: \"47051728\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 辉光开幕\n                          resource_id: \"7338322046822126114\"\n                        - effect_id: \"39434745\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 边缘扫光\n                          resource_id: \"7322363012092793353\"\n                        - effect_id: \"97032430\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 迎接2025\n                          resource_id: \"7448898555621675571\"\n                        - effect_id: \"20440246\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 迷幻故障\n                          resource_id: \"7265960462330630714\"\n                        - effect_id: \"12324741\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 迷幻荡漾\n                          resource_id: \"7223208176206746173\"\n                        - effect_id: \"14438877\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 迷幻震动\n                          resource_id: \"7238863029775897148\"\n                        - effect_id: \"5719311\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 重复变焦\n                          resource_id: \"7161285099667853831\"\n                        - effect_id: \"16610415\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 重复震闪\n                          resource_id: \"7250369682207674938\"\n                        - effect_id: \"102547299\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 金元宝\n                          resource_id: \"7463321874349429258\"\n                        - effect_id: \"96107626\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 金币掉落\n                          resource_id: \"7447018501778182666\"\n                        - effect_id: \"100068434\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 金粉飘落\n                          resource_id: \"7456695082293400115\"\n                        - effect_id: \"2622164\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 金色碎片\n                          resource_id: \"7106040163402256927\"\n                        - effect_id: \"95041384\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 金色辉光\n                          resource_id: \"7444470107004211763\"\n                        - effect_id: \"95041381\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 金色雪花\n                          resource_id: \"7444470107000017435\"\n                        - effect_id: \"101569782\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 金蛇贺岁\n                          resource_id: \"7460731076856517129\"\n                        - effect_id: \"30855689\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 金边闪烁\n                          resource_id: \"7304832158466576947\"\n                        - effect_id: \"97573972\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 金银珠宝\n                          resource_id: \"7450336559141753395\"\n                        - effect_id: \"98209671\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 金鱼漂浮\n                          resource_id: \"7451879925545439795\"\n                        - effect_id: \"81202828\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 铅笔涂鸦\n                          resource_id: \"7409883232667177499\"\n                        - effect_id: \"28024643\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 银杏飘落\n                          resource_id: \"7296789290724364850\"\n                        - effect_id: \"101977565\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 银蛇缠绕\n                          resource_id: \"7461865163826663945\"\n                        - effect_id: \"10660327\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 闪光弹跳\n                          resource_id: \"7210315941396091447\"\n                        - effect_id: \"4795220\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 闪光灯 II\n                          resource_id: \"7143919857539486238\"\n                        - effect_id: \"22328905\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 闪光灯IV\n                          resource_id: \"7276317197658493498\"\n                        - effect_id: \"42913127\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 闪电扭曲\n                          resource_id: \"7329871968298078759\"\n                        - effect_id: \"23489443\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 闪白 II\n                          resource_id: \"7281219213828559397\"\n                        - effect_id: \"97260690\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 闪粉胶片\n                          resource_id: \"7449596462658228762\"\n                        - effect_id: \"20816436\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 随机闪切\n                          resource_id: \"7267909305519575608\"\n                        - effect_id: \"29099986\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 随机马赛克\n                          resource_id: \"7299769859900969510\"\n                        - effect_id: \"11331317\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 隔行DV\n                          resource_id: \"7215598241558041125\"\n                        - effect_id: \"6731496\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 雨季 I\n                          resource_id: \"7149065282768605732\"\n                        - effect_id: \"79016931\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 雨滴\n                          resource_id: \"7402879770079269403\"\n                        - effect_id: \"81600389\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 雨滴2\n                          resource_id: \"7411360993369920015\"\n                        - effect_id: \"27986887\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 雪花光斑\n                          resource_id: \"7296707597707514406\"\n                        - effect_id: \"95041385\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 雪花变色\n                          resource_id: \"7444470107000017417\"\n                        - effect_id: \"97032426\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 雪花散落\n                          resource_id: \"7448898556401816115\"\n                        - effect_id: \"30305488\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 雪雾\n                          resource_id: \"7303380658934518323\"\n                        - effect_id: \"89895357\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 零帧起手\n                          resource_id: \"7435897594070438426\"\n                        - effect_id: \"6731657\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 雾镜 II\n                          resource_id: \"7147920433604465159\"\n                        - effect_id: \"15775885\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 震动光束\n                          resource_id: \"7246758527992074811\"\n                        - effect_id: \"16303237\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 震动发光\n                          resource_id: \"7249264623226982968\"\n                        - effect_id: \"6733311\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 震动屏闪\n                          resource_id: \"7171697545154925069\"\n                        - effect_id: \"67503342\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 震动扫光\n                          resource_id: \"7374053409546048052\"\n                        - effect_id: \"50238678\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 震动推镜\n                          resource_id: \"7345004981029704233\"\n                        - effect_id: \"30662744\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 震闪渐黑\n                          resource_id: \"7304249285577544201\"\n                        - effect_id: \"17710570\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 霓虹光线\n                          resource_id: \"7254125922222084663\"\n                        - effect_id: \"50455778\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 霓虹闪切\n                          resource_id: \"7345353688774349348\"\n                        - effect_id: \"83837896\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 飞机窗\n                          resource_id: \"7417827699902648868\"\n                        - effect_id: \"32503798\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 马赛克闪切\n                          resource_id: \"7308712918902641203\"\n                        - effect_id: \"49475327\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 高速彩光\n                          resource_id: \"7343527966145516042\"\n                        - effect_id: \"1418072\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 鱼眼 II\n                          resource_id: \"7023664868083372580\"\n                        - effect_id: \"1521356\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 鱼眼 III\n                          resource_id: \"7051881765975101983\"\n                        - effect_id: \"1790048\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 鱼眼 IV\n                          resource_id: \"7091597643553444359\"\n                        - effect_id: \"88503775\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 鱼眼星星\n                          resource_id: \"7432187089862529546\"\n                        - effect_id: \"98675391\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 鱼眼涂鸦\n                          resource_id: \"7453001309596160522\"\n                        - effect_id: \"88503776\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 鱼眼闪电\n                          resource_id: \"7432187089858351667\"\n                        - effect_id: \"1691558\"\n                          has_params: true\n                          icon_url: \"\"\n                          is_vip: true\n                          name: 黑白胶片\n                          resource_id: \"7085992144627831326\"\n        get_filters:\n            value:\n                ReqExample:\n                    mode: 0\n                RespExample:\n                    filters:\n                        - effect_id: \"7127828208690433311\"\n                          has_params: false\n                          is_vip: false\n                          name: \"1980\"\n                          resource_id: \"7127828208690433311\"\n                        - effect_id: \"7127679308897832206\"\n                          has_params: false\n                          is_vip: false\n                          name: ABG\n                          resource_id: \"7127679308897832206\"\n                        - effect_id: \"7195816046077496635\"\n                          has_params: false\n                          is_vip: false\n                          name: Ditto\n                          resource_id: \"7195816046077496635\"\n                        - effect_id: \"7127819154018536741\"\n                          has_params: false\n                          is_vip: false\n                          name: KE1\n                          resource_id: \"7127819154018536741\"\n                        - effect_id: \"7127578859217620254\"\n                          has_params: false\n                          is_vip: false\n                          name: KV5D\n                          resource_id: \"7127578859217620254\"\n                        - effect_id: \"7232216810031025468\"\n                          has_params: false\n                          is_vip: false\n                          name: Lofi II\n                          resource_id: \"7232216810031025468\"\n                        - effect_id: \"7127669764905782542\"\n                          has_params: false\n                          is_vip: false\n                          name: VHS III\n                          resource_id: \"7127669764905782542\"\n                        - effect_id: \"7127669338089311495\"\n                          has_params: false\n                          is_vip: false\n                          name: 三洋VPC\n                          resource_id: \"7127669338089311495\"\n                        - effect_id: \"7368493100127292723\"\n                          has_params: true\n                          is_vip: false\n                          name: 书意\n                          resource_id: \"7368493100127292723\"\n                        - effect_id: \"7166472327801097476\"\n                          has_params: false\n                          is_vip: false\n                          name: 亢奋\n                          resource_id: \"7166472327801097476\"\n                        - effect_id: \"7505804389395877120\"\n                          has_params: true\n                          is_vip: false\n                          name: 亮夏\n                          resource_id: \"7505804389395877120\"\n                        - effect_id: \"7127655008715230495\"\n                          has_params: false\n                          is_vip: false\n                          name: 亮肤\n                          resource_id: \"7127655008715230495\"\n                        - effect_id: \"7127675970252754189\"\n                          has_params: false\n                          is_vip: false\n                          name: 仲夏绿光\n                          resource_id: \"7127675970252754189\"\n                        - effect_id: \"7188014191834418493\"\n                          has_params: false\n                          is_vip: false\n                          name: 似锦\n                          resource_id: \"7188014191834418493\"\n                        - effect_id: \"7304170509661506843\"\n                          has_params: false\n                          is_vip: false\n                          name: 低保真\n                          resource_id: \"7304170509661506843\"\n                        - effect_id: \"7127609569416711455\"\n                          has_params: false\n                          is_vip: false\n                          name: 侘寂灰\n                          resource_id: \"7127609569416711455\"\n                        - effect_id: \"7457859598221987110\"\n                          has_params: true\n                          is_vip: false\n                          name: 元气新年\n                          resource_id: \"7457859598221987110\"\n                        - effect_id: \"7366640728493002018\"\n                          has_params: true\n                          is_vip: false\n                          name: 克洛伊\n                          resource_id: \"7366640728493002018\"\n                        - effect_id: \"7101096733958065421\"\n                          has_params: false\n                          is_vip: false\n                          name: 入夏\n                          resource_id: \"7101096733958065421\"\n                        - effect_id: \"7449704838763466035\"\n                          has_params: true\n                          is_vip: false\n                          name: 冬日烧烤\n                          resource_id: \"7449704838763466035\"\n                        - effect_id: \"7302324323270872346\"\n                          has_params: false\n                          is_vip: false\n                          name: 冬漫\n                          resource_id: \"7302324323270872346\"\n                        - effect_id: \"7300786822068571418\"\n                          has_params: false\n                          is_vip: false\n                          name: 冬离\n                          resource_id: \"7300786822068571418\"\n                        - effect_id: \"7303812389177265447\"\n                          has_params: false\n                          is_vip: false\n                          name: 冰火\n                          resource_id: \"7303812389177265447\"\n                        - effect_id: \"7199089344756370743\"\n                          has_params: false\n                          is_vip: false\n                          name: 冰肌\n                          resource_id: \"7199089344756370743\"\n                        - effect_id: \"7263359186883366155\"\n                          has_params: false\n                          is_vip: false\n                          name: 冷气机\n                          resource_id: \"7263359186883366155\"\n                        - effect_id: \"7127614731187178783\"\n                          has_params: false\n                          is_vip: false\n                          name: 冷白\n                          resource_id: \"7127614731187178783\"\n                        - effect_id: \"7127618237117877518\"\n                          has_params: false\n                          is_vip: false\n                          name: 冷蓝\n                          resource_id: \"7127618237117877518\"\n                        - effect_id: \"7411580367452376361\"\n                          has_params: true\n                          is_vip: false\n                          name: 净白肤\n                          resource_id: \"7411580367452376361\"\n                        - effect_id: \"7449996162343390473\"\n                          has_params: true\n                          is_vip: false\n                          name: 凛冬\n                          resource_id: \"7449996162343390473\"\n                        - effect_id: \"7298279202350976282\"\n                          has_params: true\n                          is_vip: false\n                          name: 凝黛\n                          resource_id: \"7298279202350976282\"\n                        - effect_id: \"7195812984306814267\"\n                          has_params: false\n                          is_vip: false\n                          name: 初恋\n                          resource_id: \"7195812984306814267\"\n                        - effect_id: \"7127824119294364959\"\n                          has_params: false\n                          is_vip: false\n                          name: 千玺IXU\n                          resource_id: \"7127824119294364959\"\n                        - effect_id: \"7208495854938901793\"\n                          has_params: false\n                          is_vip: false\n                          name: 千里江山\n                          resource_id: \"7208495854938901793\"\n                        - effect_id: \"7370585884078443802\"\n                          has_params: true\n                          is_vip: false\n                          name: 千金妝\n                          resource_id: \"7370585884078443802\"\n                        - effect_id: \"7301224597033192716\"\n                          has_params: false\n                          is_vip: false\n                          name: 卡露尔\n                          resource_id: \"7301224597033192716\"\n                        - effect_id: \"7127675868641594654\"\n                          has_params: false\n                          is_vip: false\n                          name: 即刻春光\n                          resource_id: \"7127675868641594654\"\n                        - effect_id: \"7127675195812351239\"\n                          has_params: false\n                          is_vip: false\n                          name: 原木\n                          resource_id: \"7127675195812351239\"\n                        - effect_id: \"7438854064458239258\"\n                          has_params: true\n                          is_vip: false\n                          name: 去黄增质\n                          resource_id: \"7438854064458239258\"\n                        - effect_id: \"7438853477616340250\"\n                          has_params: true\n                          is_vip: false\n                          name: 去黄提亮\n                          resource_id: \"7438853477616340250\"\n                        - effect_id: \"7462953965160893723\"\n                          has_params: true\n                          is_vip: false\n                          name: 古早韩系\n                          resource_id: \"7462953965160893723\"\n                        - effect_id: \"7473168869222370571\"\n                          has_params: true\n                          is_vip: false\n                          name: 古早韩风\n                          resource_id: \"7473168869222370571\"\n                        - effect_id: \"7242212640498568503\"\n                          has_params: false\n                          is_vip: false\n                          name: 古罗马\n                          resource_id: \"7242212640498568503\"\n                        - effect_id: \"7404104823563472137\"\n                          has_params: true\n                          is_vip: false\n                          name: 古风影视\n                          resource_id: \"7404104823563472137\"\n                        - effect_id: \"7437136821512949007\"\n                          has_params: true\n                          is_vip: false\n                          name: 告白\n                          resource_id: \"7437136821512949007\"\n                        - effect_id: \"7185440129442417931\"\n                          has_params: false\n                          is_vip: false\n                          name: 喜市\n                          resource_id: \"7185440129442417931\"\n                        - effect_id: \"7451265649273261363\"\n                          has_params: true\n                          is_vip: false\n                          name: 喜庆胶片\n                          resource_id: \"7451265649273261363\"\n                        - effect_id: \"7312102522733268251\"\n                          has_params: false\n                          is_vip: false\n                          name: 四喜\n                          resource_id: \"7312102522733268251\"\n                        - effect_id: \"7429295645669756195\"\n                          has_params: true\n                          is_vip: false\n                          name: 圣诞灯光\n                          resource_id: \"7429295645669756195\"\n                        - effect_id: \"7429295455953046818\"\n                          has_params: true\n                          is_vip: false\n                          name: 圣诞灯光II\n                          resource_id: \"7429295455953046818\"\n                        - effect_id: \"7429296137275755810\"\n                          has_params: true\n                          is_vip: false\n                          name: 圣诞灯光III\n                          resource_id: \"7429296137275755810\"\n                        - effect_id: \"7127608212483820837\"\n                          has_params: false\n                          is_vip: false\n                          name: 复古工业\n                          resource_id: \"7127608212483820837\"\n                        - effect_id: \"7494125821032975642\"\n                          has_params: true\n                          is_vip: false\n                          name: 夏日小美好\n                          resource_id: \"7494125821032975642\"\n                        - effect_id: \"7208548640279760140\"\n                          has_params: false\n                          is_vip: false\n                          name: 夏日泡泡\n                          resource_id: \"7208548640279760140\"\n                        - effect_id: \"7505632228659973416\"\n                          has_params: true\n                          is_vip: false\n                          name: 夏日清凉\n                          resource_id: \"7505632228659973416\"\n                        - effect_id: \"7502729392179776779\"\n                          has_params: true\n                          is_vip: false\n                          name: 夏日辣妹\n                          resource_id: \"7502729392179776779\"\n                        - effect_id: \"7127684611802418445\"\n                          has_params: false\n                          is_vip: false\n                          name: 夏日风吟\n                          resource_id: \"7127684611802418445\"\n                        - effect_id: \"7244817652424641830\"\n                          has_params: true\n                          is_vip: false\n                          name: 夏荷青瓷\n                          resource_id: \"7244817652424641830\"\n                        - effect_id: \"7493423027670109449\"\n                          has_params: true\n                          is_vip: false\n                          name: 大唐盛世\n                          resource_id: \"7493423027670109449\"\n                        - effect_id: \"7351684015906147621\"\n                          has_params: false\n                          is_vip: false\n                          name: 奈良\n                          resource_id: \"7351684015906147621\"\n                        - effect_id: \"7271142654505766183\"\n                          has_params: false\n                          is_vip: false\n                          name: 奥本海默\n                          resource_id: \"7271142654505766183\"\n                        - effect_id: \"7297134192100379938\"\n                          has_params: false\n                          is_vip: false\n                          name: 奶杏\n                          resource_id: \"7297134192100379938\"\n                        - effect_id: \"7127618513048571173\"\n                          has_params: false\n                          is_vip: false\n                          name: 奶油\n                          resource_id: \"7127618513048571173\"\n                        - effect_id: \"7463296170950020403\"\n                          has_params: true\n                          is_vip: false\n                          name: 奶油肤\n                          resource_id: \"7463296170950020403\"\n                        - effect_id: \"7127684319300029733\"\n                          has_params: false\n                          is_vip: false\n                          name: 奶绿\n                          resource_id: \"7127684319300029733\"\n                        - effect_id: \"7127624030135389471\"\n                          has_params: false\n                          is_vip: false\n                          name: 姜饼红\n                          resource_id: \"7127624030135389471\"\n                        - effect_id: \"7406553962922429735\"\n                          has_params: true\n                          is_vip: false\n                          name: 威尼之都\n                          resource_id: \"7406553962922429735\"\n                        - effect_id: \"7190242827543022880\"\n                          has_params: false\n                          is_vip: false\n                          name: 安愉\n                          resource_id: \"7190242827543022880\"\n                        - effect_id: \"7500223670678228262\"\n                          has_params: true\n                          is_vip: false\n                          name: 宫崎漫夏\n                          resource_id: \"7500223670678228262\"\n                        - effect_id: \"7268561903721401641\"\n                          has_params: false\n                          is_vip: false\n                          name: 富士CC II\n                          resource_id: \"7268561903721401641\"\n                        - effect_id: \"7295362817874480425\"\n                          has_params: false\n                          is_vip: false\n                          name: 寻荷\n                          resource_id: \"7295362817874480425\"\n                        - effect_id: \"7127654151688965384\"\n                          has_params: false\n                          is_vip: false\n                          name: 小镇\n                          resource_id: \"7127654151688965384\"\n                        - effect_id: \"7127662738884545806\"\n                          has_params: false\n                          is_vip: false\n                          name: 山系\n                          resource_id: \"7127662738884545806\"\n                        - effect_id: \"7363220647767592243\"\n                          has_params: false\n                          is_vip: false\n                          name: 巧克力\n                          resource_id: \"7363220647767592243\"\n                        - effect_id: \"7242208887883992381\"\n                          has_params: false\n                          is_vip: false\n                          name: 布兰卡\n                          resource_id: \"7242208887883992381\"\n                        - effect_id: \"7273777590102527290\"\n                          has_params: false\n                          is_vip: false\n                          name: 布朗\n                          resource_id: \"7273777590102527290\"\n                        - effect_id: \"7271141541521968396\"\n                          has_params: false\n                          is_vip: false\n                          name: 希望\n                          resource_id: \"7271141541521968396\"\n                        - effect_id: \"7330441280016715062\"\n                          has_params: true\n                          is_vip: false\n                          name: 幽蓝\n                          resource_id: \"7330441280016715062\"\n                        - effect_id: \"7175101541198679353\"\n                          has_params: false\n                          is_vip: false\n                          name: 彩果\n                          resource_id: \"7175101541198679353\"\n                        - effect_id: \"7226234868059917628\"\n                          has_params: false\n                          is_vip: false\n                          name: 彩檐\n                          resource_id: \"7226234868059917628\"\n                        - effect_id: \"7349953761059638555\"\n                          has_params: false\n                          is_vip: false\n                          name: 影叙\n                          resource_id: \"7349953761059638555\"\n                        - effect_id: \"7338406163848940840\"\n                          has_params: true\n                          is_vip: false\n                          name: 微澜\n                          resource_id: \"7338406163848940840\"\n                        - effect_id: \"7127678346472819982\"\n                          has_params: false\n                          is_vip: false\n                          name: 德古拉\n                          resource_id: \"7127678346472819982\"\n                        - effect_id: \"7143537677655100709\"\n                          has_params: false\n                          is_vip: false\n                          name: 快照I\n                          resource_id: \"7143537677655100709\"\n                        - effect_id: \"7330123964305378586\"\n                          has_params: false\n                          is_vip: false\n                          name: 忽风\n                          resource_id: \"7330123964305378586\"\n                        - effect_id: \"7505461557237730598\"\n                          has_params: true\n                          is_vip: false\n                          name: 情感电影\n                          resource_id: \"7505461557237730598\"\n                        - effect_id: \"7420000959759224118\"\n                          has_params: true\n                          is_vip: false\n                          name: 情绪电影\n                          resource_id: \"7420000959759224118\"\n                        - effect_id: \"7376146305736822028\"\n                          has_params: true\n                          is_vip: false\n                          name: 扫街\n                          resource_id: \"7376146305736822028\"\n                        - effect_id: \"7411911267859860746\"\n                          has_params: true\n                          is_vip: false\n                          name: 探店博主III\n                          resource_id: \"7411911267859860746\"\n                        - effect_id: \"7437011056653847808\"\n                          has_params: true\n                          is_vip: false\n                          name: 摩卡灰\n                          resource_id: \"7437011056653847808\"\n                        - effect_id: \"7127568601921408293\"\n                          has_params: false\n                          is_vip: false\n                          name: 敦刻尔克\n                          resource_id: \"7127568601921408293\"\n                        - effect_id: \"7127656350833806622\"\n                          has_params: false\n                          is_vip: false\n                          name: 料理\n                          resource_id: \"7127656350833806622\"\n                        - effect_id: \"7445550576210873663\"\n                          has_params: true\n                          is_vip: false\n                          name: 新年电影\n                          resource_id: \"7445550576210873663\"\n                        - effect_id: \"7342395072199019803\"\n                          has_params: true\n                          is_vip: false\n                          name: 新闪\n                          resource_id: \"7342395072199019803\"\n                        - effect_id: \"7325383700240256296\"\n                          has_params: false\n                          is_vip: false\n                          name: 日出\n                          resource_id: \"7325383700240256296\"\n                        - effect_id: \"7127664177870671135\"\n                          has_params: false\n                          is_vip: false\n                          name: 日系奶油\n                          resource_id: \"7127664177870671135\"\n                        - effect_id: \"7127669630667066655\"\n                          has_params: false\n                          is_vip: false\n                          name: 日落橘\n                          resource_id: \"7127669630667066655\"\n                        - effect_id: \"7505662247407013135\"\n                          has_params: true\n                          is_vip: false\n                          name: 日落飞车\n                          resource_id: \"7505662247407013135\"\n                        - effect_id: \"7239977329668263227\"\n                          has_params: false\n                          is_vip: false\n                          name: 旧乐园\n                          resource_id: \"7239977329668263227\"\n                        - effect_id: \"7232218563270954300\"\n                          has_params: false\n                          is_vip: false\n                          name: 旧时代I\n                          resource_id: \"7232218563270954300\"\n                        - effect_id: \"7367715162964446516\"\n                          has_params: true\n                          is_vip: false\n                          name: 明晰\n                          resource_id: \"7367715162964446516\"\n                        - effect_id: \"7127672042069036319\"\n                          has_params: false\n                          is_vip: false\n                          name: 星云\n                          resource_id: \"7127672042069036319\"\n                        - effect_id: \"7459274314634775827\"\n                          has_params: true\n                          is_vip: false\n                          name: 春日暖阳\n                          resource_id: \"7459274314634775827\"\n                        - effect_id: \"7463345622440037658\"\n                          has_params: true\n                          is_vip: false\n                          name: 春日绿妍\n                          resource_id: \"7463345622440037658\"\n                        - effect_id: \"7505660075252485376\"\n                          has_params: true\n                          is_vip: false\n                          name: 昭和夏\n                          resource_id: \"7505660075252485376\"\n                        - effect_id: \"7468552996008299791\"\n                          has_params: true\n                          is_vip: false\n                          name: 晴好春日\n                          resource_id: \"7468552996008299791\"\n                        - effect_id: \"7342503492311076137\"\n                          has_params: true\n                          is_vip: false\n                          name: 晴沐\n                          resource_id: \"7342503492311076137\"\n                        - effect_id: \"7472763263684578572\"\n                          has_params: true\n                          is_vip: false\n                          name: 晴研\n                          resource_id: \"7472763263684578572\"\n                        - effect_id: \"7127653100269210916\"\n                          has_params: false\n                          is_vip: false\n                          name: 暖食\n                          resource_id: \"7127653100269210916\"\n                        - effect_id: \"7127823728070659358\"\n                          has_params: false\n                          is_vip: false\n                          name: 暗夜\n                          resource_id: \"7127823728070659358\"\n                        - effect_id: \"7463118934061993242\"\n                          has_params: true\n                          is_vip: false\n                          name: 暗调氛围\n                          resource_id: \"7463118934061993242\"\n                        - effect_id: \"7127656352410848548\"\n                          has_params: false\n                          is_vip: false\n                          name: 暗雅\n                          resource_id: \"7127656352410848548\"\n                        - effect_id: \"7242211155131862332\"\n                          has_params: false\n                          is_vip: false\n                          name: 暮光\n                          resource_id: \"7242211155131862332\"\n                        - effect_id: \"7127594686541237535\"\n                          has_params: false\n                          is_vip: false\n                          name: 暮色\n                          resource_id: \"7127594686541237535\"\n                        - effect_id: \"7127819487419567373\"\n                          has_params: false\n                          is_vip: false\n                          name: 月升之国\n                          resource_id: \"7127819487419567373\"\n                        - effect_id: \"7143532202112912670\"\n                          has_params: false\n                          is_vip: false\n                          name: 月夜\n                          resource_id: \"7143532202112912670\"\n                        - effect_id: \"7340282260312182050\"\n                          has_params: true\n                          is_vip: false\n                          name: 未央\n                          resource_id: \"7340282260312182050\"\n                        - effect_id: \"7299055174880988479\"\n                          has_params: true\n                          is_vip: false\n                          name: 朱栗\n                          resource_id: \"7299055174880988479\"\n                        - effect_id: \"7127669342325443854\"\n                          has_params: false\n                          is_vip: false\n                          name: 松果棕\n                          resource_id: \"7127669342325443854\"\n                        - effect_id: \"7127663793827564808\"\n                          has_params: false\n                          is_vip: false\n                          name: 林间\n                          resource_id: \"7127663793827564808\"\n                        - effect_id: \"7127676358766923016\"\n                          has_params: false\n                          is_vip: false\n                          name: 柠檬青\n                          resource_id: \"7127676358766923016\"\n                        - effect_id: \"7345493751416016166\"\n                          has_params: false\n                          is_vip: false\n                          name: 梨花白\n                          resource_id: \"7345493751416016166\"\n                        - effect_id: \"7341767383259942155\"\n                          has_params: true\n                          is_vip: false\n                          name: 梵时\n                          resource_id: \"7341767383259942155\"\n                        - effect_id: \"7273779209934245179\"\n                          has_params: false\n                          is_vip: false\n                          name: 棕咖\n                          resource_id: \"7273779209934245179\"\n                        - effect_id: \"7332348414933421366\"\n                          has_params: true\n                          is_vip: false\n                          name: 棕宥\n                          resource_id: \"7332348414933421366\"\n                        - effect_id: \"7329819965920398604\"\n                          has_params: false\n                          is_vip: false\n                          name: 棠梨\n                          resource_id: \"7329819965920398604\"\n                        - effect_id: \"7252674515287788856\"\n                          has_params: false\n                          is_vip: false\n                          name: 椰林\n                          resource_id: \"7252674515287788856\"\n                        - effect_id: \"7341032461234654475\"\n                          has_params: true\n                          is_vip: false\n                          name: 椿和\n                          resource_id: \"7341032461234654475\"\n                        - effect_id: \"7347729407181704498\"\n                          has_params: false\n                          is_vip: false\n                          name: 椿来\n                          resource_id: \"7347729407181704498\"\n                        - effect_id: \"7127632545272925470\"\n                          has_params: false\n                          is_vip: false\n                          name: 樱粉\n                          resource_id: \"7127632545272925470\"\n                        - effect_id: \"7127657040348040479\"\n                          has_params: false\n                          is_vip: false\n                          name: 比佛利\n                          resource_id: \"7127657040348040479\"\n                        - effect_id: \"7127619120761212168\"\n                          has_params: false\n                          is_vip: false\n                          name: 气泡水\n                          resource_id: \"7127619120761212168\"\n                        - effect_id: \"7127838224344435981\"\n                          has_params: false\n                          is_vip: false\n                          name: 江浙沪\n                          resource_id: \"7127838224344435981\"\n                        - effect_id: \"7454497262480231718\"\n                          has_params: true\n                          is_vip: false\n                          name: 治愈萌宠\n                          resource_id: \"7454497262480231718\"\n                        - effect_id: \"7208495760520842529\"\n                          has_params: false\n                          is_vip: false\n                          name: 泥金\n                          resource_id: \"7208495760520842529\"\n                        - effect_id: \"7493764749054709001\"\n                          has_params: true\n                          is_vip: false\n                          name: 活力夏\n                          resource_id: \"7493764749054709001\"\n                        - effect_id: \"7127675565779307789\"\n                          has_params: false\n                          is_vip: false\n                          name: 流光金属\n                          resource_id: \"7127675565779307789\"\n                        - effect_id: \"7281163331245821239\"\n                          has_params: false\n                          is_vip: false\n                          name: 浅岛\n                          resource_id: \"7281163331245821239\"\n                        - effect_id: \"7446098658942078258\"\n                          has_params: true\n                          is_vip: false\n                          name: 浪漫烟火\n                          resource_id: \"7446098658942078258\"\n                        - effect_id: \"7340687187194678569\"\n                          has_params: true\n                          is_vip: false\n                          name: 浮生\n                          resource_id: \"7340687187194678569\"\n                        - effect_id: \"7401018435674688787\"\n                          has_params: true\n                          is_vip: false\n                          name: 海浪梦境\n                          resource_id: \"7401018435674688787\"\n                        - effect_id: \"7127615915004366116\"\n                          has_params: false\n                          is_vip: false\n                          name: 海街日记\n                          resource_id: \"7127615915004366116\"\n                        - effect_id: \"7189595107610447163\"\n                          has_params: false\n                          is_vip: false\n                          name: 海雾\n                          resource_id: \"7189595107610447163\"\n                        - effect_id: \"7127830050786823437\"\n                          has_params: false\n                          is_vip: false\n                          name: 海鸥DC\n                          resource_id: \"7127830050786823437\"\n                        - effect_id: \"7414897963752770828\"\n                          has_params: true\n                          is_vip: false\n                          name: 深沉\n                          resource_id: \"7414897963752770828\"\n                        - effect_id: \"7295596083101633842\"\n                          has_params: false\n                          is_vip: false\n                          name: 深秋\n                          resource_id: \"7295596083101633842\"\n                        - effect_id: \"7127615347703811336\"\n                          has_params: false\n                          is_vip: false\n                          name: 深褐\n                          resource_id: \"7127615347703811336\"\n                        - effect_id: \"7405602958748028186\"\n                          has_params: true\n                          is_vip: false\n                          name: 清冷\n                          resource_id: \"7405602958748028186\"\n                        - effect_id: \"7449939213430082867\"\n                          has_params: true\n                          is_vip: false\n                          name: 清冷冬日\n                          resource_id: \"7449939213430082867\"\n                        - effect_id: \"7469310117079420211\"\n                          has_params: true\n                          is_vip: false\n                          name: 清新\n                          resource_id: \"7469310117079420211\"\n                        - effect_id: \"7503936728286252323\"\n                          has_params: true\n                          is_vip: false\n                          name: 清新夏颜\n                          resource_id: \"7503936728286252323\"\n                        - effect_id: \"7480517561486953779\"\n                          has_params: true\n                          is_vip: false\n                          name: 清新漫和\n                          resource_id: \"7480517561486953779\"\n                        - effect_id: \"7208495962887621899\"\n                          has_params: false\n                          is_vip: false\n                          name: 清明上河\n                          resource_id: \"7208495962887621899\"\n                        - effect_id: \"7433813603758722342\"\n                          has_params: true\n                          is_vip: false\n                          name: 清晰明亮\n                          resource_id: \"7433813603758722342\"\n                        - effect_id: \"7448652759869525287\"\n                          has_params: true\n                          is_vip: false\n                          name: 清晰烟花\n                          resource_id: \"7448652759869525287\"\n                        - effect_id: \"7359419156619332902\"\n                          has_params: false\n                          is_vip: false\n                          name: 清澈\n                          resource_id: \"7359419156619332902\"\n                        - effect_id: \"7482047649831570726\"\n                          has_params: true\n                          is_vip: false\n                          name: 清透自然\n                          resource_id: \"7482047649831570726\"\n                        - effect_id: \"7351580023742090535\"\n                          has_params: false\n                          is_vip: false\n                          name: 温述\n                          resource_id: \"7351580023742090535\"\n                        - effect_id: \"7346017304909581587\"\n                          has_params: false\n                          is_vip: false\n                          name: 港历\n                          resource_id: \"7346017304909581587\"\n                        - effect_id: \"7127830945243090184\"\n                          has_params: false\n                          is_vip: false\n                          name: 港风\n                          resource_id: \"7127830945243090184\"\n                        - effect_id: \"7396701250764426546\"\n                          has_params: true\n                          is_vip: false\n                          name: 演唱会\n                          resource_id: \"7396701250764426546\"\n                        - effect_id: \"7366616947703991571\"\n                          has_params: true\n                          is_vip: false\n                          name: 漫夏\n                          resource_id: \"7366616947703991571\"\n                        - effect_id: \"7177269429972045089\"\n                          has_params: false\n                          is_vip: false\n                          name: 漫彩\n                          resource_id: \"7177269429972045089\"\n                        - effect_id: \"7332866997128105228\"\n                          has_params: true\n                          is_vip: false\n                          name: 漫春\n                          resource_id: \"7332866997128105228\"\n                        - effect_id: \"7263357613050563852\"\n                          has_params: false\n                          is_vip: false\n                          name: 漫步\n                          resource_id: \"7263357613050563852\"\n                        - effect_id: \"7312002825054211378\"\n                          has_params: false\n                          is_vip: false\n                          name: 漫谷\n                          resource_id: \"7312002825054211378\"\n                        - effect_id: \"7409669784155000090\"\n                          has_params: true\n                          is_vip: false\n                          name: 烈焰红\n                          resource_id: \"7409669784155000090\"\n                        - effect_id: \"7127675183246200072\"\n                          has_params: false\n                          is_vip: false\n                          name: 烘培\n                          resource_id: \"7127675183246200072\"\n                        - effect_id: \"7341204799590763788\"\n                          has_params: true\n                          is_vip: false\n                          name: 烟岚\n                          resource_id: \"7341204799590763788\"\n                        - effect_id: \"7446098755905965338\"\n                          has_params: true\n                          is_vip: false\n                          name: 烟火增色\n                          resource_id: \"7446098755905965338\"\n                        - effect_id: \"7444905127871270181\"\n                          has_params: true\n                          is_vip: false\n                          name: 烟花增强\n                          resource_id: \"7444905127871270181\"\n                        - effect_id: \"7143533042978524424\"\n                          has_params: false\n                          is_vip: false\n                          name: 烟霞\n                          resource_id: \"7143533042978524424\"\n                        - effect_id: \"7471880541189492007\"\n                          has_params: true\n                          is_vip: false\n                          name: 热烈\n                          resource_id: \"7471880541189492007\"\n                        - effect_id: \"7297144048903556388\"\n                          has_params: false\n                          is_vip: false\n                          name: 煦日\n                          resource_id: \"7297144048903556388\"\n                        - effect_id: \"7143575737881120037\"\n                          has_params: false\n                          is_vip: false\n                          name: 熔金\n                          resource_id: \"7143575737881120037\"\n                        - effect_id: \"7248571956860079395\"\n                          has_params: false\n                          is_vip: false\n                          name: 燃力\n                          resource_id: \"7248571956860079395\"\n                        - effect_id: \"7127822013074263310\"\n                          has_params: false\n                          is_vip: false\n                          name: 牛皮纸\n                          resource_id: \"7127822013074263310\"\n                        - effect_id: \"7127657509501914399\"\n                          has_params: false\n                          is_vip: false\n                          name: 珠光蓝\n                          resource_id: \"7127657509501914399\"\n                        - effect_id: \"7213575938615872823\"\n                          has_params: false\n                          is_vip: false\n                          name: 珠落\n                          resource_id: \"7213575938615872823\"\n                        - effect_id: \"7291179909718740259\"\n                          has_params: false\n                          is_vip: false\n                          name: 病娇\n                          resource_id: \"7291179909718740259\"\n                        - effect_id: \"7359223280714239268\"\n                          has_params: false\n                          is_vip: false\n                          name: 盐岚\n                          resource_id: \"7359223280714239268\"\n                        - effect_id: \"7281162649314889015\"\n                          has_params: false\n                          is_vip: false\n                          name: 矿野\n                          resource_id: \"7281162649314889015\"\n                        - effect_id: \"7300758676732677427\"\n                          has_params: false\n                          is_vip: false\n                          name: 砂红\n                          resource_id: \"7300758676732677427\"\n                        - effect_id: \"7340915058542759219\"\n                          has_params: true\n                          is_vip: false\n                          name: 砾绀\n                          resource_id: \"7340915058542759219\"\n                        - effect_id: \"7353555308448419098\"\n                          has_params: false\n                          is_vip: false\n                          name: 空灵\n                          resource_id: \"7353555308448419098\"\n                        - effect_id: \"7143532176313699620\"\n                          has_params: false\n                          is_vip: false\n                          name: 空谷\n                          resource_id: \"7143532176313699620\"\n                        - effect_id: \"7208496463293320480\"\n                          has_params: false\n                          is_vip: false\n                          name: 竹绢\n                          resource_id: \"7208496463293320480\"\n                        - effect_id: \"7221477781043973413\"\n                          has_params: false\n                          is_vip: false\n                          name: 米棕\n                          resource_id: \"7221477781043973413\"\n                        - effect_id: \"7127667757998411044\"\n                          has_params: false\n                          is_vip: false\n                          name: 粉瓷\n                          resource_id: \"7127667757998411044\"\n                        - effect_id: \"7296493947625557286\"\n                          has_params: false\n                          is_vip: false\n                          name: 粉肤\n                          resource_id: \"7296493947625557286\"\n                        - effect_id: \"7373693828328475941\"\n                          has_params: true\n                          is_vip: false\n                          name: 粹光\n                          resource_id: \"7373693828328475941\"\n                        - effect_id: \"7127671162758270245\"\n                          has_params: false\n                          is_vip: false\n                          name: 素肌\n                          resource_id: \"7127671162758270245\"\n                        - effect_id: \"7127622617699290399\"\n                          has_params: false\n                          is_vip: false\n                          name: 红绿\n                          resource_id: \"7127622617699290399\"\n                        - effect_id: \"7127667361456426248\"\n                          has_params: false\n                          is_vip: false\n                          name: 绝对红\n                          resource_id: \"7127667361456426248\"\n                        - effect_id: \"7127675252410223909\"\n                          has_params: false\n                          is_vip: false\n                          name: 绿妍\n                          resource_id: \"7127675252410223909\"\n                        - effect_id: \"7414142998075690279\"\n                          has_params: true\n                          is_vip: false\n                          name: 美味\n                          resource_id: \"7414142998075690279\"\n                        - effect_id: \"7127669912050420999\"\n                          has_params: false\n                          is_vip: false\n                          name: 老友记\n                          resource_id: \"7127669912050420999\"\n                        - effect_id: \"7127830961621847310\"\n                          has_params: false\n                          is_vip: false\n                          name: 胡桃木\n                          resource_id: \"7127830961621847310\"\n                        - effect_id: \"7127821314198342943\"\n                          has_params: false\n                          is_vip: false\n                          name: 自然\n                          resource_id: \"7127821314198342943\"\n                        - effect_id: \"7412691247992671497\"\n                          has_params: true\n                          is_vip: false\n                          name: 自然清晰\n                          resource_id: \"7412691247992671497\"\n                        - effect_id: \"7271143155544739108\"\n                          has_params: false\n                          is_vip: false\n                          name: 自由\n                          resource_id: \"7271143155544739108\"\n                        - effect_id: \"7306726303594564904\"\n                          has_params: false\n                          is_vip: false\n                          name: 臻金\n                          resource_id: \"7306726303594564904\"\n                        - effect_id: \"7226990672190950713\"\n                          has_params: false\n                          is_vip: false\n                          name: 花园\n                          resource_id: \"7226990672190950713\"\n                        - effect_id: \"7127539889553427719\"\n                          has_params: false\n                          is_vip: false\n                          name: 花椿\n                          resource_id: \"7127539889553427719\"\n                        - effect_id: \"7175071186185964812\"\n                          has_params: false\n                          is_vip: false\n                          name: 花火\n                          resource_id: \"7175071186185964812\"\n                        - effect_id: \"7460022261144177957\"\n                          has_params: true\n                          is_vip: false\n                          name: 花火夜焰\n                          resource_id: \"7460022261144177957\"\n                        - effect_id: \"7505429510930730275\"\n                          has_params: true\n                          is_vip: false\n                          name: 花花世界\n                          resource_id: \"7505429510930730275\"\n                        - effect_id: \"7166494058305670432\"\n                          has_params: false\n                          is_vip: false\n                          name: 落日\n                          resource_id: \"7166494058305670432\"\n                        - effect_id: \"7369501986401570099\"\n                          has_params: true\n                          is_vip: false\n                          name: 落日海岛\n                          resource_id: \"7369501986401570099\"\n                        - effect_id: \"7350133636890463498\"\n                          has_params: false\n                          is_vip: false\n                          name: 落日飞车\n                          resource_id: \"7350133636890463498\"\n                        - effect_id: \"7375415880118783295\"\n                          has_params: true\n                          is_vip: false\n                          name: 落牧\n                          resource_id: \"7375415880118783295\"\n                        - effect_id: \"7127671519450320159\"\n                          has_params: false\n                          is_vip: false\n                          name: 蒸汽波\n                          resource_id: \"7127671519450320159\"\n                        - effect_id: \"7343782317820857641\"\n                          has_params: true\n                          is_vip: false\n                          name: 薄荷\n                          resource_id: \"7343782317820857641\"\n                        - effect_id: \"7127668404764380447\"\n                          has_params: false\n                          is_vip: false\n                          name: 褪色\n                          resource_id: \"7127668404764380447\"\n                        - effect_id: \"7331590962696834313\"\n                          has_params: false\n                          is_vip: false\n                          name: 西野\n                          resource_id: \"7331590962696834313\"\n                        - effect_id: \"7127668806398315806\"\n                          has_params: false\n                          is_vip: false\n                          name: 西餐\n                          resource_id: \"7127668806398315806\"\n                        - effect_id: \"7301212776532380966\"\n                          has_params: false\n                          is_vip: false\n                          name: 谧歌\n                          resource_id: \"7301212776532380966\"\n                        - effect_id: \"7127668616991952158\"\n                          has_params: false\n                          is_vip: false\n                          name: 贝松绿\n                          resource_id: \"7127668616991952158\"\n                        - effect_id: \"7127653798155209997\"\n                          has_params: false\n                          is_vip: false\n                          name: 质感暗调\n                          resource_id: \"7127653798155209997\"\n                        - effect_id: \"7395858604311596299\"\n                          has_params: true\n                          is_vip: false\n                          name: 质感电影\n                          resource_id: \"7395858604311596299\"\n                        - effect_id: \"7127657979838516494\"\n                          has_params: false\n                          is_vip: false\n                          name: 赛博朋克\n                          resource_id: \"7127657979838516494\"\n                        - effect_id: \"7226251886360300837\"\n                          has_params: false\n                          is_vip: false\n                          name: 赤陀\n                          resource_id: \"7226251886360300837\"\n                        - effect_id: \"7127663117508660517\"\n                          has_params: false\n                          is_vip: false\n                          name: 赫本\n                          resource_id: \"7127663117508660517\"\n                        - effect_id: \"7302823953406446899\"\n                          has_params: false\n                          is_vip: false\n                          name: 赫石\n                          resource_id: \"7302823953406446899\"\n                        - effect_id: \"7127621137705618724\"\n                          has_params: false\n                          is_vip: false\n                          name: 轻食\n                          resource_id: \"7127621137705618724\"\n                        - effect_id: \"7300602459356040484\"\n                          has_params: true\n                          is_vip: false\n                          name: 达芬妮\n                          resource_id: \"7300602459356040484\"\n                        - effect_id: \"7127684611450178823\"\n                          has_params: false\n                          is_vip: false\n                          name: 迈阿密\n                          resource_id: \"7127684611450178823\"\n                        - effect_id: \"7127676762514885919\"\n                          has_params: false\n                          is_vip: false\n                          name: 酷白\n                          resource_id: \"7127676762514885919\"\n                        - effect_id: \"7246617998516063527\"\n                          has_params: false\n                          is_vip: false\n                          name: 野餐\n                          resource_id: \"7246617998516063527\"\n                        - effect_id: \"7127654151688949000\"\n                          has_params: false\n                          is_vip: false\n                          name: 金属\n                          resource_id: \"7127654151688949000\"\n                        - effect_id: \"7364705637931994405\"\n                          has_params: false\n                          is_vip: false\n                          name: 闪光灯\n                          resource_id: \"7364705637931994405\"\n                        - effect_id: \"7452726092126833959\"\n                          has_params: true\n                          is_vip: false\n                          name: 闪胶回忆\n                          resource_id: \"7452726092126833959\"\n                        - effect_id: \"7127823728267775263\"\n                          has_params: false\n                          is_vip: false\n                          name: 闻香识人\n                          resource_id: \"7127823728267775263\"\n                        - effect_id: \"7299130097632627979\"\n                          has_params: true\n                          is_vip: false\n                          name: 阿尔菲\n                          resource_id: \"7299130097632627979\"\n                        - effect_id: \"7302796570947243264\"\n                          has_params: false\n                          is_vip: false\n                          name: 雪鹿\n                          resource_id: \"7302796570947243264\"\n                        - effect_id: \"7169239634076060960\"\n                          has_params: false\n                          is_vip: false\n                          name: 雾瓷\n                          resource_id: \"7169239634076060960\"\n                        - effect_id: \"7505676110412254527\"\n                          has_params: true\n                          is_vip: false\n                          name: 青春古早\n                          resource_id: \"7505676110412254527\"\n                        - effect_id: \"7127615575865478430\"\n                          has_params: false\n                          is_vip: false\n                          name: 青橙\n                          resource_id: \"7127615575865478430\"\n                        - effect_id: \"7401896022214970650\"\n                          has_params: true\n                          is_vip: false\n                          name: 青橙电影\n                          resource_id: \"7401896022214970650\"\n                        - effect_id: \"7281575818621455628\"\n                          has_params: false\n                          is_vip: false\n                          name: 青红夜\n                          resource_id: \"7281575818621455628\"\n                        - effect_id: \"7405834787132280079\"\n                          has_params: true\n                          is_vip: false\n                          name: 音乐节\n                          resource_id: \"7405834787132280079\"\n                        - effect_id: \"7211001257996127547\"\n                          has_params: false\n                          is_vip: false\n                          name: 风铃\n                          resource_id: \"7211001257996127547\"\n                        - effect_id: \"7175094003493309757\"\n                          has_params: false\n                          is_vip: false\n                          name: 香松\n                          resource_id: \"7175094003493309757\"\n                        - effect_id: \"7452548610971012379\"\n                          has_params: true\n                          is_vip: false\n                          name: 高清4K电影\n                          resource_id: \"7452548610971012379\"\n                        - effect_id: \"7450317804554685708\"\n                          has_params: true\n                          is_vip: false\n                          name: 高清冬日\n                          resource_id: \"7450317804554685708\"\n                        - effect_id: \"7434564801990266162\"\n                          has_params: true\n                          is_vip: false\n                          name: 高清明亮\n                          resource_id: \"7434564801990266162\"\n                        - effect_id: \"7404503340576410906\"\n                          has_params: true\n                          is_vip: false\n                          name: 高清润白\n                          resource_id: \"7404503340576410906\"\n                        - effect_id: \"7446098482013768970\"\n                          has_params: true\n                          is_vip: false\n                          name: 高清烟火\n                          resource_id: \"7446098482013768970\"\n                        - effect_id: \"7460008665286855973\"\n                          has_params: true\n                          is_vip: false\n                          name: 高清福气\n                          resource_id: \"7460008665286855973\"\n                        - effect_id: \"7127653121966230814\"\n                          has_params: false\n                          is_vip: false\n                          name: 高饱和\n                          resource_id: \"7127653121966230814\"\n                        - effect_id: \"7291201164027252024\"\n                          has_params: false\n                          is_vip: false\n                          name: 鬼魅\n                          resource_id: \"7291201164027252024\"\n                        - effect_id: \"7441227246326582537\"\n                          has_params: true\n                          is_vip: false\n                          name: 鲜亮食光\n                          resource_id: \"7441227246326582537\"\n                        - effect_id: \"7460115630973340940\"\n                          has_params: true\n                          is_vip: false\n                          name: 鲜美年味\n                          resource_id: \"7460115630973340940\"\n                        - effect_id: \"7221805176410180921\"\n                          has_params: false\n                          is_vip: false\n                          name: 黑胶唱片\n                          resource_id: \"7221805176410180921\"\n                        - effect_id: \"7175100298610871610\"\n                          has_params: false\n                          is_vip: false\n                          name: 黑莓\n                          resource_id: \"7175100298610871610\"\n                        - effect_id: \"7202475126485503236\"\n                          has_params: false\n                          is_vip: false\n                          name: 黑豹\n                          resource_id: \"7202475126485503236\"\n                        - effect_id: \"7127655037026848031\"\n                          has_params: false\n                          is_vip: false\n                          name: 默片\n                          resource_id: \"7127655037026848031\"\n                        - effect_id: \"7190249807682800954\"\n                          has_params: false\n                          is_vip: true\n                          name: 160C\n                          resource_id: \"7190249807682800954\"\n                        - effect_id: \"7131347316111314189\"\n                          has_params: false\n                          is_vip: true\n                          name: \"2077\"\n                          resource_id: \"7131347316111314189\"\n                        - effect_id: \"7190236487152127269\"\n                          has_params: false\n                          is_vip: true\n                          name: 400H\n                          resource_id: \"7190236487152127269\"\n                        - effect_id: \"7477802799862992138\"\n                          has_params: true\n                          is_vip: true\n                          name: 4K画质\n                          resource_id: \"7477802799862992138\"\n                        - effect_id: \"7478641636092775743\"\n                          has_params: true\n                          is_vip: true\n                          name: 4K画质电影\n                          resource_id: \"7478641636092775743\"\n                        - effect_id: \"7480203423095213362\"\n                          has_params: true\n                          is_vip: true\n                          name: 4K高品质\n                          resource_id: \"7480203423095213362\"\n                        - effect_id: \"7190237757552348471\"\n                          has_params: false\n                          is_vip: true\n                          name: 800Z\n                          resource_id: \"7190237757552348471\"\n                        - effect_id: \"7478895015901613375\"\n                          has_params: true\n                          is_vip: true\n                          name: 8K画质\n                          resource_id: \"7478895015901613375\"\n                        - effect_id: \"7131366613823114503\"\n                          has_params: false\n                          is_vip: true\n                          name: 90s\n                          resource_id: \"7131366613823114503\"\n                        - effect_id: \"7263360572404550931\"\n                          has_params: false\n                          is_vip: true\n                          name: City Walk\n                          resource_id: \"7263360572404550931\"\n                        - effect_id: \"7200697197002886404\"\n                          has_params: false\n                          is_vip: true\n                          name: EOS3\n                          resource_id: \"7200697197002886404\"\n                        - effect_id: \"7332480052392774975\"\n                          has_params: false\n                          is_vip: true\n                          name: FXN\n                          resource_id: \"7332480052392774975\"\n                        - effect_id: \"7168098796860148995\"\n                          has_params: false\n                          is_vip: true\n                          name: GR正片\n                          resource_id: \"7168098796860148995\"\n                        - effect_id: \"7168121440141708576\"\n                          has_params: false\n                          is_vip: true\n                          name: GR绿\n                          resource_id: \"7168121440141708576\"\n                        - effect_id: \"7168097661160131879\"\n                          has_params: false\n                          is_vip: true\n                          name: GR蓝\n                          resource_id: \"7168097661160131879\"\n                        - effect_id: \"7221479156318489893\"\n                          has_params: false\n                          is_vip: true\n                          name: IG白\n                          resource_id: \"7221479156318489893\"\n                        - effect_id: \"7438279481191599411\"\n                          has_params: true\n                          is_vip: true\n                          name: INS亮肤\n                          resource_id: \"7438279481191599411\"\n                        - effect_id: \"7438279661588581669\"\n                          has_params: true\n                          is_vip: true\n                          name: INS晴肤\n                          resource_id: \"7438279661588581669\"\n                        - effect_id: \"7223645151820877093\"\n                          has_params: false\n                          is_vip: true\n                          name: INS暗\n                          resource_id: \"7223645151820877093\"\n                        - effect_id: \"7473409650746985779\"\n                          has_params: true\n                          is_vip: true\n                          name: INS暗调\n                          resource_id: \"7473409650746985779\"\n                        - effect_id: \"7438646040036789542\"\n                          has_params: true\n                          is_vip: true\n                          name: INS柔肤\n                          resource_id: \"7438646040036789542\"\n                        - effect_id: \"7200712753324035339\"\n                          has_params: false\n                          is_vip: true\n                          name: KONICA\n                          resource_id: \"7200712753324035339\"\n                        - effect_id: \"7127669605199318280\"\n                          has_params: false\n                          is_vip: true\n                          name: KU4\n                          resource_id: \"7127669605199318280\"\n                        - effect_id: \"7200999937960627459\"\n                          has_params: false\n                          is_vip: true\n                          name: PENTAX\n                          resource_id: \"7200999937960627459\"\n                        - effect_id: \"7493462285889899803\"\n                          has_params: false\n                          is_vip: true\n                          name: Pocket3\n                          resource_id: \"7493462285889899803\"\n                        - effect_id: \"7398034408139230490\"\n                          has_params: true\n                          is_vip: true\n                          name: Y3K\n                          resource_id: \"7398034408139230490\"\n                        - effect_id: \"7493542918276320539\"\n                          has_params: true\n                          is_vip: true\n                          name: doll感透白\n                          resource_id: \"7493542918276320539\"\n                        - effect_id: \"7393943544089627930\"\n                          has_params: true\n                          is_vip: true\n                          name: iPhone6s\n                          resource_id: \"7393943544089627930\"\n                        - effect_id: \"7426749131344841995\"\n                          has_params: true\n                          is_vip: true\n                          name: 万圣\n                          resource_id: \"7426749131344841995\"\n                        - effect_id: \"7503602197586791743\"\n                          has_params: true\n                          is_vip: true\n                          name: 下雨天\n                          resource_id: \"7503602197586791743\"\n                        - effect_id: \"7202480720843984131\"\n                          has_params: false\n                          is_vip: true\n                          name: 不要抬头\n                          resource_id: \"7202480720843984131\"\n                        - effect_id: \"7495673180904885516\"\n                          has_params: true\n                          is_vip: true\n                          name: 丝滑皮肤\n                          resource_id: \"7495673180904885516\"\n                        - effect_id: \"7127621445806525704\"\n                          has_params: false\n                          is_vip: true\n                          name: 中性\n                          resource_id: \"7127621445806525704\"\n                        - effect_id: \"7312646907908607244\"\n                          has_params: false\n                          is_vip: true\n                          name: 中性II\n                          resource_id: \"7312646907908607244\"\n                        - effect_id: \"7297138825359281423\"\n                          has_params: false\n                          is_vip: true\n                          name: 丹枫\n                          resource_id: \"7297138825359281423\"\n                        - effect_id: \"7193982146363673856\"\n                          has_params: false\n                          is_vip: true\n                          name: 乐游\n                          resource_id: \"7193982146363673856\"\n                        - effect_id: \"7314883649999015231\"\n                          has_params: false\n                          is_vip: true\n                          name: 云暖\n                          resource_id: \"7314883649999015231\"\n                        - effect_id: \"7393338906369903910\"\n                          has_params: true\n                          is_vip: true\n                          name: 亚裔II\n                          resource_id: \"7393338906369903910\"\n                        - effect_id: \"7127679758581697822\"\n                          has_params: false\n                          is_vip: true\n                          name: 京都\n                          resource_id: \"7127679758581697822\"\n                        - effect_id: \"7302325291634920755\"\n                          has_params: false\n                          is_vip: true\n                          name: 亭竹\n                          resource_id: \"7302325291634920755\"\n                        - effect_id: \"7413406043608272154\"\n                          has_params: true\n                          is_vip: true\n                          name: 亮丽\n                          resource_id: \"7413406043608272154\"\n                        - effect_id: \"7148844086869396743\"\n                          has_params: false\n                          is_vip: true\n                          name: 人生之事\n                          resource_id: \"7148844086869396743\"\n                        - effect_id: \"7127575884780817672\"\n                          has_params: false\n                          is_vip: true\n                          name: 仲夏\n                          resource_id: \"7127575884780817672\"\n                        - effect_id: \"7281166048273943867\"\n                          has_params: false\n                          is_vip: true\n                          name: 仲夏夜\n                          resource_id: \"7281166048273943867\"\n                        - effect_id: \"7503844955467648283\"\n                          has_params: true\n                          is_vip: true\n                          name: 仿撕拉片\n                          resource_id: \"7503844955467648283\"\n                        - effect_id: \"7195781682492984636\"\n                          has_params: false\n                          is_vip: true\n                          name: 伊豆\n                          resource_id: \"7195781682492984636\"\n                        - effect_id: \"7516859499404119296\"\n                          has_params: true\n                          is_vip: true\n                          name: 伤感故事电影\n                          resource_id: \"7516859499404119296\"\n                        - effect_id: \"7498948996816194843\"\n                          has_params: true\n                          is_vip: true\n                          name: 伤感电影\n                          resource_id: \"7498948996816194843\"\n                        - effect_id: \"7278616064018107707\"\n                          has_params: false\n                          is_vip: true\n                          name: 余晖\n                          resource_id: \"7278616064018107707\"\n                        - effect_id: \"7485292050917657906\"\n                          has_params: false\n                          is_vip: true\n                          name: 佳能G12\n                          resource_id: \"7485292050917657906\"\n                        - effect_id: \"7291597100389862707\"\n                          has_params: false\n                          is_vip: true\n                          name: 佳能G7X II\n                          resource_id: \"7291597100389862707\"\n                        - effect_id: \"7291595038688136474\"\n                          has_params: false\n                          is_vip: true\n                          name: 佳能G7X III\n                          resource_id: \"7291595038688136474\"\n                        - effect_id: \"7394713676789353737\"\n                          has_params: true\n                          is_vip: true\n                          name: 俏皮萌宠\n                          resource_id: \"7394713676789353737\"\n                        - effect_id: \"7239235794744003851\"\n                          has_params: false\n                          is_vip: true\n                          name: 俱乐部\n                          resource_id: \"7239235794744003851\"\n                        - effect_id: \"7332714336315526409\"\n                          has_params: true\n                          is_vip: true\n                          name: 倾森\n                          resource_id: \"7332714336315526409\"\n                        - effect_id: \"7405115979107274020\"\n                          has_params: true\n                          is_vip: true\n                          name: 假日海滩\n                          resource_id: \"7405115979107274020\"\n                        - effect_id: \"7517179906292190501\"\n                          has_params: true\n                          is_vip: true\n                          name: 假日电影感\n                          resource_id: \"7517179906292190501\"\n                        - effect_id: \"7500860668199914790\"\n                          has_params: true\n                          is_vip: true\n                          name: 健身II\n                          resource_id: \"7500860668199914790\"\n                        - effect_id: \"7226990270053649725\"\n                          has_params: false\n                          is_vip: true\n                          name: 傍晚\n                          resource_id: \"7226990270053649725\"\n                        - effect_id: \"7467923122545544499\"\n                          has_params: true\n                          is_vip: true\n                          name: 元宵祈福\n                          resource_id: \"7467923122545544499\"\n                        - effect_id: \"7472748943953169727\"\n                          has_params: true\n                          is_vip: true\n                          name: 元气粉肌\n                          resource_id: \"7472748943953169727\"\n                        - effect_id: \"7233732009070300473\"\n                          has_params: true\n                          is_vip: true\n                          name: 光流\n                          resource_id: \"7233732009070300473\"\n                        - effect_id: \"7444960658178821414\"\n                          has_params: true\n                          is_vip: true\n                          name: 冬日物语\n                          resource_id: \"7444960658178821414\"\n                        - effect_id: \"7446453265190948132\"\n                          has_params: true\n                          is_vip: true\n                          name: 冬日电影II\n                          resource_id: \"7446453265190948132\"\n                        - effect_id: \"7190250133672578316\"\n                          has_params: false\n                          is_vip: true\n                          name: 冬禧\n                          resource_id: \"7190250133672578316\"\n                        - effect_id: \"7258221827485486393\"\n                          has_params: false\n                          is_vip: true\n                          name: 冰夏\n                          resource_id: \"7258221827485486393\"\n                        - effect_id: \"7494313060480388389\"\n                          has_params: true\n                          is_vip: true\n                          name: 冰清蓝\n                          resource_id: \"7494313060480388389\"\n                        - effect_id: \"7196927862056701240\"\n                          has_params: false\n                          is_vip: true\n                          name: 冰瀑\n                          resource_id: \"7196927862056701240\"\n                        - effect_id: \"7131399016771800357\"\n                          has_params: false\n                          is_vip: true\n                          name: 冰茶\n                          resource_id: \"7131399016771800357\"\n                        - effect_id: \"7462637393783360809\"\n                          has_params: true\n                          is_vip: true\n                          name: 冰雪白\n                          resource_id: \"7462637393783360809\"\n                        - effect_id: \"7159132840179895590\"\n                          has_params: false\n                          is_vip: true\n                          name: 冷叙\n                          resource_id: \"7159132840179895590\"\n                        - effect_id: \"7300751893813366053\"\n                          has_params: false\n                          is_vip: true\n                          name: 冷墨\n                          resource_id: \"7300751893813366053\"\n                        - effect_id: \"7281165355353951543\"\n                          has_params: false\n                          is_vip: true\n                          name: 冷月夜\n                          resource_id: \"7281165355353951543\"\n                        - effect_id: \"7446290191557397814\"\n                          has_params: true\n                          is_vip: true\n                          name: 冷白圣诞\n                          resource_id: \"7446290191557397814\"\n                        - effect_id: \"7177729481300364548\"\n                          has_params: false\n                          is_vip: true\n                          name: 冷萃\n                          resource_id: \"7177729481300364548\"\n                        - effect_id: \"7434467628422270220\"\n                          has_params: false\n                          is_vip: true\n                          name: 冷调CCD\n                          resource_id: \"7434467628422270220\"\n                        - effect_id: \"7127667352782572807\"\n                          has_params: false\n                          is_vip: true\n                          name: 净白\n                          resource_id: \"7127667352782572807\"\n                        - effect_id: \"7377370212749839667\"\n                          has_params: true\n                          is_vip: true\n                          name: 凉夏\n                          resource_id: \"7377370212749839667\"\n                        - effect_id: \"7498004563954322726\"\n                          has_params: true\n                          is_vip: true\n                          name: 加州落日\n                          resource_id: \"7498004563954322726\"\n                        - effect_id: \"7248568097660013864\"\n                          has_params: false\n                          is_vip: true\n                          name: 劲闯\n                          resource_id: \"7248568097660013864\"\n                        - effect_id: \"7513608221735554330\"\n                          has_params: true\n                          is_vip: true\n                          name: 千禧潮酷\n                          resource_id: \"7513608221735554330\"\n                        - effect_id: \"7145391402661334280\"\n                          has_params: false\n                          is_vip: true\n                          name: 半衫\n                          resource_id: \"7145391402661334280\"\n                        - effect_id: \"7473037215426153728\"\n                          has_params: true\n                          is_vip: true\n                          name: 原生自然\n                          resource_id: \"7473037215426153728\"\n                        - effect_id: \"7271281225115897140\"\n                          has_params: false\n                          is_vip: true\n                          name: 原野\n                          resource_id: \"7271281225115897140\"\n                        - effect_id: \"7127559231062002951\"\n                          has_params: false\n                          is_vip: true\n                          name: 去灰\n                          resource_id: \"7127559231062002951\"\n                        - effect_id: \"7226991425160858937\"\n                          has_params: false\n                          is_vip: true\n                          name: 去灰II\n                          resource_id: \"7226991425160858937\"\n                        - effect_id: \"7436399689764834623\"\n                          has_params: true\n                          is_vip: true\n                          name: 去灰明晰\n                          resource_id: \"7436399689764834623\"\n                        - effect_id: \"7436400247540141348\"\n                          has_params: true\n                          is_vip: true\n                          name: 去灰高清\n                          resource_id: \"7436400247540141348\"\n                        - effect_id: \"7473437502787816740\"\n                          has_params: true\n                          is_vip: true\n                          name: 去雾\n                          resource_id: \"7473437502787816740\"\n                        - effect_id: \"7403222365217295667\"\n                          has_params: true\n                          is_vip: true\n                          name: 反差富士\n                          resource_id: \"7403222365217295667\"\n                        - effect_id: \"7434468515576319295\"\n                          has_params: true\n                          is_vip: true\n                          name: 发光CCD\n                          resource_id: \"7434468515576319295\"\n                        - effect_id: \"7477960070073027850\"\n                          has_params: true\n                          is_vip: true\n                          name: 发光肤\n                          resource_id: \"7477960070073027850\"\n                        - effect_id: \"7148961858320354573\"\n                          has_params: false\n                          is_vip: true\n                          name: 叠阳\n                          resource_id: \"7148961858320354573\"\n                        - effect_id: \"7470614335644077375\"\n                          has_params: true\n                          is_vip: true\n                          name: 古早像素\n                          resource_id: \"7470614335644077375\"\n                        - effect_id: \"7449798505385790746\"\n                          has_params: true\n                          is_vip: true\n                          name: 古早回忆\n                          resource_id: \"7449798505385790746\"\n                        - effect_id: \"7457910812439596339\"\n                          has_params: true\n                          is_vip: true\n                          name: 古早复古\n                          resource_id: \"7457910812439596339\"\n                        - effect_id: \"7366562482812456255\"\n                          has_params: false\n                          is_vip: true\n                          name: 古早记忆\n                          resource_id: \"7366562482812456255\"\n                        - effect_id: \"7469697255663078694\"\n                          has_params: true\n                          is_vip: true\n                          name: 古早韩式\n                          resource_id: \"7469697255663078694\"\n                        - effect_id: \"7127615616525126949\"\n                          has_params: false\n                          is_vip: true\n                          name: 古都\n                          resource_id: \"7127615616525126949\"\n                        - effect_id: \"7190241639070174503\"\n                          has_params: false\n                          is_vip: true\n                          name: 吉宵\n                          resource_id: \"7190241639070174503\"\n                        - effect_id: \"7281166220794055997\"\n                          has_params: false\n                          is_vip: true\n                          name: 味蕾\n                          resource_id: \"7281166220794055997\"\n                        - effect_id: \"7210651068324285754\"\n                          has_params: false\n                          is_vip: true\n                          name: 和歌山\n                          resource_id: \"7210651068324285754\"\n                        - effect_id: \"7291596720956329266\"\n                          has_params: false\n                          is_vip: true\n                          name: 哈苏I\n                          resource_id: \"7291596720956329266\"\n                        - effect_id: \"7291560741885480250\"\n                          has_params: false\n                          is_vip: true\n                          name: 哈苏II\n                          resource_id: \"7291560741885480250\"\n                        - effect_id: \"7361792059109313811\"\n                          has_params: true\n                          is_vip: true\n                          name: 哈苏蓝\n                          resource_id: \"7361792059109313811\"\n                        - effect_id: \"7337928347118275890\"\n                          has_params: false\n                          is_vip: true\n                          name: 哥谭\n                          resource_id: \"7337928347118275890\"\n                        - effect_id: \"7485986828164599067\"\n                          has_params: true\n                          is_vip: true\n                          name: 唤晴II\n                          resource_id: \"7485986828164599067\"\n                        - effect_id: \"7511971221785922826\"\n                          has_params: true\n                          is_vip: true\n                          name: 国民旧照\n                          resource_id: \"7511971221785922826\"\n                        - effect_id: \"7507263202682572044\"\n                          has_params: true\n                          is_vip: true\n                          name: 国风影视\n                          resource_id: \"7507263202682572044\"\n                        - effect_id: \"7409572381775138067\"\n                          has_params: true\n                          is_vip: true\n                          name: 国风电影\n                          resource_id: \"7409572381775138067\"\n                        - effect_id: \"7175100386007584060\"\n                          has_params: false\n                          is_vip: true\n                          name: 圣善夜\n                          resource_id: \"7175100386007584060\"\n                        - effect_id: \"7447162094572686592\"\n                          has_params: true\n                          is_vip: true\n                          name: 圣诞回忆录\n                          resource_id: \"7447162094572686592\"\n                        - effect_id: \"7428162298436537627\"\n                          has_params: true\n                          is_vip: true\n                          name: 圣诞愿景\n                          resource_id: \"7428162298436537627\"\n                        - effect_id: \"7438160882837835018\"\n                          has_params: true\n                          is_vip: true\n                          name: 圣诞拍立得\n                          resource_id: \"7438160882837835018\"\n                        - effect_id: \"7446329652706168100\"\n                          has_params: true\n                          is_vip: true\n                          name: 圣诞闪胶\n                          resource_id: \"7446329652706168100\"\n                        - effect_id: \"7446329592119332108\"\n                          has_params: true\n                          is_vip: true\n                          name: 圣诞闪胶II\n                          resource_id: \"7446329592119332108\"\n                        - effect_id: \"7405206230550973731\"\n                          has_params: true\n                          is_vip: true\n                          name: 城市赏月II\n                          resource_id: \"7405206230550973731\"\n                        - effect_id: \"7411476796526300452\"\n                          has_params: true\n                          is_vip: true\n                          name: 增色II\n                          resource_id: \"7411476796526300452\"\n                        - effect_id: \"7500847387959708978\"\n                          has_params: true\n                          is_vip: true\n                          name: 增质CCD\n                          resource_id: \"7500847387959708978\"\n                        - effect_id: \"7271284653816843554\"\n                          has_params: false\n                          is_vip: true\n                          name: 墨林\n                          resource_id: \"7271284653816843554\"\n                        - effect_id: \"7479800436778732863\"\n                          has_params: true\n                          is_vip: true\n                          name: 复古电影感\n                          resource_id: \"7479800436778732863\"\n                        - effect_id: \"7449048492665834779\"\n                          has_params: true\n                          is_vip: true\n                          name: 复古蓝调\n                          resource_id: \"7449048492665834779\"\n                        - effect_id: \"7258222828581915959\"\n                          has_params: false\n                          is_vip: true\n                          name: 夏天岛\n                          resource_id: \"7258222828581915959\"\n                        - effect_id: \"7159140854601469223\"\n                          has_params: false\n                          is_vip: true\n                          name: 夏威夷\n                          resource_id: \"7159140854601469223\"\n                        - effect_id: \"7497479023556070693\"\n                          has_params: true\n                          is_vip: true\n                          name: 夏日度假\n                          resource_id: \"7497479023556070693\"\n                        - effect_id: \"7503950769758948620\"\n                          has_params: true\n                          is_vip: true\n                          name: 夏日物语\n                          resource_id: \"7503950769758948620\"\n                        - effect_id: \"7261469707138518283\"\n                          has_params: false\n                          is_vip: true\n                          name: 夏日粉\n                          resource_id: \"7261469707138518283\"\n                        - effect_id: \"7508030199255026970\"\n                          has_params: true\n                          is_vip: true\n                          name: 夏日紫霞\n                          resource_id: \"7508030199255026970\"\n                        - effect_id: \"7509774929961684278\"\n                          has_params: true\n                          is_vip: true\n                          name: 夏日繁花\n                          resource_id: \"7509774929961684278\"\n                        - effect_id: \"7237441824611224889\"\n                          has_params: false\n                          is_vip: true\n                          name: 多巴胺\n                          resource_id: \"7237441824611224889\"\n                        - effect_id: \"7494135245709610275\"\n                          has_params: true\n                          is_vip: true\n                          name: 夜拍闪曝\n                          resource_id: \"7494135245709610275\"\n                        - effect_id: \"7462637606052941095\"\n                          has_params: false\n                          is_vip: true\n                          name: 夜拍高光\n                          resource_id: \"7462637606052941095\"\n                        - effect_id: \"7493208490832317705\"\n                          has_params: true\n                          is_vip: true\n                          name: 夜景人像增强\n                          resource_id: \"7493208490832317705\"\n                        - effect_id: \"7525110001959030042\"\n                          has_params: true\n                          is_vip: true\n                          name: 夜景去雾\n                          resource_id: \"7525110001959030042\"\n                        - effect_id: \"7341302999068757259\"\n                          has_params: true\n                          is_vip: true\n                          name: 夜景增色\n                          resource_id: \"7341302999068757259\"\n                        - effect_id: \"7411477748130139403\"\n                          has_params: true\n                          is_vip: true\n                          name: 夜景增色II\n                          resource_id: \"7411477748130139403\"\n                        - effect_id: \"7185289606600953092\"\n                          has_params: false\n                          is_vip: true\n                          name: 夜焰\n                          resource_id: \"7185289606600953092\"\n                        - effect_id: \"7168110568673479948\"\n                          has_params: false\n                          is_vip: true\n                          name: 夜雾\n                          resource_id: \"7168110568673479948\"\n                        - effect_id: \"7175076362997288230\"\n                          has_params: false\n                          is_vip: true\n                          name: 大吉岭\n                          resource_id: \"7175076362997288230\"\n                        - effect_id: \"7500853613342772507\"\n                          has_params: true\n                          is_vip: true\n                          name: 大海增色\n                          resource_id: \"7500853613342772507\"\n                        - effect_id: \"7512706064693988645\"\n                          has_params: true\n                          is_vip: true\n                          name: 大疆电影感\n                          resource_id: \"7512706064693988645\"\n                        - effect_id: \"7361792068475325735\"\n                          has_params: false\n                          is_vip: true\n                          name: 奥林巴斯\n                          resource_id: \"7361792068475325735\"\n                        - effect_id: \"7269236283019463972\"\n                          has_params: true\n                          is_vip: true\n                          name: 奥罗拉\n                          resource_id: \"7269236283019463972\"\n                        - effect_id: \"7395972887133441307\"\n                          has_params: true\n                          is_vip: true\n                          name: 奶呼萌宠\n                          resource_id: \"7395972887133441307\"\n                        - effect_id: \"7474592762331942184\"\n                          has_params: true\n                          is_vip: true\n                          name: 奶油II\n                          resource_id: \"7474592762331942184\"\n                        - effect_id: \"7501670015859445055\"\n                          has_params: true\n                          is_vip: true\n                          name: 奶油原生\n                          resource_id: \"7501670015859445055\"\n                        - effect_id: \"7482412177760996646\"\n                          has_params: true\n                          is_vip: true\n                          name: 奶油柔肤\n                          resource_id: \"7482412177760996646\"\n                        - effect_id: \"7398438142321134898\"\n                          has_params: true\n                          is_vip: true\n                          name: 奶油白\n                          resource_id: \"7398438142321134898\"\n                        - effect_id: \"7480210942026927423\"\n                          has_params: true\n                          is_vip: true\n                          name: 奶油美食\n                          resource_id: \"7480210942026927423\"\n                        - effect_id: \"7510488117430734118\"\n                          has_params: true\n                          is_vip: true\n                          name: 奶油风萌宠\n                          resource_id: \"7510488117430734118\"\n                        - effect_id: \"7478708795057753370\"\n                          has_params: true\n                          is_vip: true\n                          name: 奶白肌\n                          resource_id: \"7478708795057753370\"\n                        - effect_id: \"7226994281414692155\"\n                          has_params: true\n                          is_vip: true\n                          name: 好莱坞I\n                          resource_id: \"7226994281414692155\"\n                        - effect_id: \"7226995248814165308\"\n                          has_params: false\n                          is_vip: true\n                          name: 好莱坞II\n                          resource_id: \"7226995248814165308\"\n                        - effect_id: \"7312617341710372107\"\n                          has_params: false\n                          is_vip: true\n                          name: 好莱坞III\n                          resource_id: \"7312617341710372107\"\n                        - effect_id: \"7312647197462367524\"\n                          has_params: false\n                          is_vip: true\n                          name: 好莱坞IV\n                          resource_id: \"7312647197462367524\"\n                        - effect_id: \"7339908905713143051\"\n                          has_params: true\n                          is_vip: true\n                          name: 嫣时\n                          resource_id: \"7339908905713143051\"\n                        - effect_id: \"7300523145818148096\"\n                          has_params: false\n                          is_vip: true\n                          name: 嫩肤\n                          resource_id: \"7300523145818148096\"\n                        - effect_id: \"7131431284403981605\"\n                          has_params: false\n                          is_vip: true\n                          name: 嬉皮士\n                          resource_id: \"7131431284403981605\"\n                        - effect_id: \"7202480777387445507\"\n                          has_params: false\n                          is_vip: true\n                          name: 子弹列车\n                          resource_id: \"7202480777387445507\"\n                        - effect_id: \"7270142995712773415\"\n                          has_params: false\n                          is_vip: true\n                          name: 安西娅\n                          resource_id: \"7270142995712773415\"\n                        - effect_id: \"7330584144524643595\"\n                          has_params: true\n                          is_vip: true\n                          name: 家宴\n                          resource_id: \"7330584144524643595\"\n                        - effect_id: \"7127822311708691726\"\n                          has_params: false\n                          is_vip: true\n                          name: 宿营\n                          resource_id: \"7127822311708691726\"\n                        - effect_id: \"7268561936344780086\"\n                          has_params: false\n                          is_vip: true\n                          name: 富士CC I\n                          resource_id: \"7268561936344780086\"\n                        - effect_id: \"7159156535640296737\"\n                          has_params: false\n                          is_vip: true\n                          name: 富士NC I\n                          resource_id: \"7159156535640296737\"\n                        - effect_id: \"7159408376378559747\"\n                          has_params: false\n                          is_vip: true\n                          name: 富士NC II\n                          resource_id: \"7159408376378559747\"\n                        - effect_id: \"7159134459088899339\"\n                          has_params: false\n                          is_vip: true\n                          name: 富士NC III\n                          resource_id: \"7159134459088899339\"\n                        - effect_id: \"7447157317457513743\"\n                          has_params: false\n                          is_vip: true\n                          name: 富士NN\n                          resource_id: \"7447157317457513743\"\n                        - effect_id: \"7394357532912782629\"\n                          has_params: true\n                          is_vip: true\n                          name: 富士x100\n                          resource_id: \"7394357532912782629\"\n                        - effect_id: \"7497919307628825866\"\n                          has_params: true\n                          is_vip: true\n                          name: 富士电影\n                          resource_id: \"7497919307628825866\"\n                        - effect_id: \"7246720031118101816\"\n                          has_params: false\n                          is_vip: true\n                          name: 富士蓝\n                          resource_id: \"7246720031118101816\"\n                        - effect_id: \"7226994246471945530\"\n                          has_params: false\n                          is_vip: true\n                          name: 富士蓝II\n                          resource_id: \"7226994246471945530\"\n                        - effect_id: \"7226994214029184313\"\n                          has_params: false\n                          is_vip: true\n                          name: 富士青\n                          resource_id: \"7226994214029184313\"\n                        - effect_id: \"7208496124779302177\"\n                          has_params: false\n                          is_vip: true\n                          name: 富春山居\n                          resource_id: \"7208496124779302177\"\n                        - effect_id: \"7468493795479276835\"\n                          has_params: true\n                          is_vip: true\n                          name: 小美好\n                          resource_id: \"7468493795479276835\"\n                        - effect_id: \"7362076973981584691\"\n                          has_params: false\n                          is_vip: true\n                          name: 小麦色\n                          resource_id: \"7362076973981584691\"\n                        - effect_id: \"7131630640646081822\"\n                          has_params: false\n                          is_vip: true\n                          name: 尘杏\n                          resource_id: \"7131630640646081822\"\n                        - effect_id: \"7148958479326153991\"\n                          has_params: false\n                          is_vip: true\n                          name: 尘烟\n                          resource_id: \"7148958479326153991\"\n                        - effect_id: \"7246723856222719269\"\n                          has_params: false\n                          is_vip: true\n                          name: 山晴\n                          resource_id: \"7246723856222719269\"\n                        - effect_id: \"7156638423191784735\"\n                          has_params: false\n                          is_vip: true\n                          name: 山本\n                          resource_id: \"7156638423191784735\"\n                        - effect_id: \"7260771472107441471\"\n                          has_params: false\n                          is_vip: true\n                          name: 岚夏\n                          resource_id: \"7260771472107441471\"\n                        - effect_id: \"7221472488079904060\"\n                          has_params: false\n                          is_vip: true\n                          name: 岩灰\n                          resource_id: \"7221472488079904060\"\n                        - effect_id: \"7428504360910376229\"\n                          has_params: true\n                          is_vip: true\n                          name: 川秋\n                          resource_id: \"7428504360910376229\"\n                        - effect_id: \"7361032844484857142\"\n                          has_params: false\n                          is_vip: true\n                          name: 川野\n                          resource_id: \"7361032844484857142\"\n                        - effect_id: \"7145394707156323591\"\n                          has_params: false\n                          is_vip: true\n                          name: 市井\n                          resource_id: \"7145394707156323591\"\n                        - effect_id: \"7262350396566342975\"\n                          has_params: false\n                          is_vip: true\n                          name: 幽海\n                          resource_id: \"7262350396566342975\"\n                        - effect_id: \"7336763348492553499\"\n                          has_params: true\n                          is_vip: true\n                          name: 底特律\n                          resource_id: \"7336763348492553499\"\n                        - effect_id: \"7185309693131148555\"\n                          has_params: false\n                          is_vip: true\n                          name: 庙会\n                          resource_id: \"7185309693131148555\"\n                        - effect_id: \"7148812815246134541\"\n                          has_params: false\n                          is_vip: true\n                          name: 弥晖\n                          resource_id: \"7148812815246134541\"\n                        - effect_id: \"7127824109093866760\"\n                          has_params: false\n                          is_vip: true\n                          name: 彩光\n                          resource_id: \"7127824109093866760\"\n                        - effect_id: \"7168136171673963787\"\n                          has_params: false\n                          is_vip: true\n                          name: 影部\n                          resource_id: \"7168136171673963787\"\n                        - effect_id: \"7266322833800727844\"\n                          has_params: false\n                          is_vip: true\n                          name: 往昔\n                          resource_id: \"7266322833800727844\"\n                        - effect_id: \"7268562944093408523\"\n                          has_params: false\n                          is_vip: true\n                          name: 徕卡I\n                          resource_id: \"7268562944093408523\"\n                        - effect_id: \"7268563047776587020\"\n                          has_params: false\n                          is_vip: true\n                          name: 徕卡II\n                          resource_id: \"7268563047776587020\"\n                        - effect_id: \"7500447762404724018\"\n                          has_params: true\n                          is_vip: true\n                          name: 徕卡Q2\n                          resource_id: \"7500447762404724018\"\n                        - effect_id: \"7261461692096220428\"\n                          has_params: false\n                          is_vip: true\n                          name: 心动夏\n                          resource_id: \"7261461692096220428\"\n                        - effect_id: \"7271278427309755688\"\n                          has_params: true\n                          is_vip: true\n                          name: 忆山\n                          resource_id: \"7271278427309755688\"\n                        - effect_id: \"7266325161433910591\"\n                          has_params: false\n                          is_vip: true\n                          name: 忆时\n                          resource_id: \"7266325161433910591\"\n                        - effect_id: \"7143760738765655310\"\n                          has_params: false\n                          is_vip: true\n                          name: 快照II\n                          resource_id: \"7143760738765655310\"\n                        - effect_id: \"7494564488704806198\"\n                          has_params: true\n                          is_vip: true\n                          name: 怀旧\n                          resource_id: \"7494564488704806198\"\n                        - effect_id: \"7195889899738909990\"\n                          has_params: false\n                          is_vip: true\n                          name: 怦然心动\n                          resource_id: \"7195889899738909990\"\n                        - effect_id: \"7237446176629345593\"\n                          has_params: true\n                          is_vip: true\n                          name: 恍光\n                          resource_id: \"7237446176629345593\"\n                        - effect_id: \"7509005376835079439\"\n                          has_params: true\n                          is_vip: true\n                          name: 情感故事电影\n                          resource_id: \"7509005376835079439\"\n                        - effect_id: \"7398190560701386022\"\n                          has_params: true\n                          is_vip: true\n                          name: 情绪暗调\n                          resource_id: \"7398190560701386022\"\n                        - effect_id: \"7329826553477565705\"\n                          has_params: false\n                          is_vip: true\n                          name: 情辉\n                          resource_id: \"7329826553477565705\"\n                        - effect_id: \"7261185427703418169\"\n                          has_params: false\n                          is_vip: true\n                          name: 慕斯\n                          resource_id: \"7261185427703418169\"\n                        - effect_id: \"7487297020743404810\"\n                          has_params: true\n                          is_vip: true\n                          name: 扬帆远航\n                          resource_id: \"7487297020743404810\"\n                        - effect_id: \"7175093825659079991\"\n                          has_params: false\n                          is_vip: true\n                          name: 拐杖糖\n                          resource_id: \"7175093825659079991\"\n                        - effect_id: \"7248566556593098024\"\n                          has_params: false\n                          is_vip: true\n                          name: 捕风\n                          resource_id: \"7248566556593098024\"\n                        - effect_id: \"7131219052021779719\"\n                          has_params: false\n                          is_vip: true\n                          name: 摩登\n                          resource_id: \"7131219052021779719\"\n                        - effect_id: \"7508033223973244187\"\n                          has_params: true\n                          is_vip: true\n                          name: 摩登暗银\n                          resource_id: \"7508033223973244187\"\n                        - effect_id: \"7502647335218941220\"\n                          has_params: true\n                          is_vip: true\n                          name: 撕拉拍立得\n                          resource_id: \"7502647335218941220\"\n                        - effect_id: \"7195930274918567180\"\n                          has_params: false\n                          is_vip: true\n                          name: 攀岩\n                          resource_id: \"7195930274918567180\"\n                        - effect_id: \"7409360036096527670\"\n                          has_params: true\n                          is_vip: true\n                          name: 文艺少女\n                          resource_id: \"7409360036096527670\"\n                        - effect_id: \"7493945636518104360\"\n                          has_params: true\n                          is_vip: true\n                          name: 新中式电影感\n                          resource_id: \"7493945636518104360\"\n                        - effect_id: \"7210646550974876984\"\n                          has_params: false\n                          is_vip: true\n                          name: 新宿\n                          resource_id: \"7210646550974876984\"\n                        - effect_id: \"7452802706139352370\"\n                          has_params: true\n                          is_vip: true\n                          name: 新年欢愉\n                          resource_id: \"7452802706139352370\"\n                        - effect_id: \"7449639935717559561\"\n                          has_params: true\n                          is_vip: true\n                          name: 新年祈愿\n                          resource_id: \"7449639935717559561\"\n                        - effect_id: \"7457598693915594025\"\n                          has_params: true\n                          is_vip: true\n                          name: 新年祈福\n                          resource_id: \"7457598693915594025\"\n                        - effect_id: \"7449579862496431375\"\n                          has_params: true\n                          is_vip: true\n                          name: 新年粉肤\n                          resource_id: \"7449579862496431375\"\n                        - effect_id: \"7449639891694112010\"\n                          has_params: true\n                          is_vip: true\n                          name: 新年红\n                          resource_id: \"7449639891694112010\"\n                        - effect_id: \"7451471584533040395\"\n                          has_params: true\n                          is_vip: true\n                          name: 新年闪胶\n                          resource_id: \"7451471584533040395\"\n                        - effect_id: \"7343499312464137535\"\n                          has_params: true\n                          is_vip: true\n                          name: 日与\n                          resource_id: \"7343499312464137535\"\n                        - effect_id: \"7226985203540053305\"\n                          has_params: false\n                          is_vip: true\n                          name: 日光吻\n                          resource_id: \"7226985203540053305\"\n                        - effect_id: \"7486736825369840907\"\n                          has_params: true\n                          is_vip: true\n                          name: 日光肤\n                          resource_id: \"7486736825369840907\"\n                        - effect_id: \"7526422478206356787\"\n                          has_params: true\n                          is_vip: true\n                          name: 日出增色\n                          resource_id: \"7526422478206356787\"\n                        - effect_id: \"7338311462277991718\"\n                          has_params: true\n                          is_vip: true\n                          name: 日和\n                          resource_id: \"7338311462277991718\"\n                        - effect_id: \"7507632191380229402\"\n                          has_params: true\n                          is_vip: true\n                          name: 日料寿司\n                          resource_id: \"7507632191380229402\"\n                        - effect_id: \"7493804773515316491\"\n                          has_params: true\n                          is_vip: true\n                          name: 日漫增色\n                          resource_id: \"7493804773515316491\"\n                        - effect_id: \"7472373777469328667\"\n                          has_params: true\n                          is_vip: true\n                          name: 日系增色\n                          resource_id: \"7472373777469328667\"\n                        - effect_id: \"7473805992308837659\"\n                          has_params: true\n                          is_vip: true\n                          name: 日系春和\n                          resource_id: \"7473805992308837659\"\n                        - effect_id: \"7496524092779105551\"\n                          has_params: true\n                          is_vip: true\n                          name: 日落时刻\n                          resource_id: \"7496524092779105551\"\n                        - effect_id: \"7232217903536409893\"\n                          has_params: false\n                          is_vip: true\n                          name: 旧时代II\n                          resource_id: \"7232217903536409893\"\n                        - effect_id: \"7366562830486621459\"\n                          has_params: false\n                          is_vip: true\n                          name: 旧时来信\n                          resource_id: \"7366562830486621459\"\n                        - effect_id: \"7266320092386938124\"\n                          has_params: true\n                          is_vip: true\n                          name: 旧曲\n                          resource_id: \"7266320092386938124\"\n                        - effect_id: \"7159161900389977382\"\n                          has_params: false\n                          is_vip: true\n                          name: 旧金山\n                          resource_id: \"7159161900389977382\"\n                        - effect_id: \"7275698024892943655\"\n                          has_params: true\n                          is_vip: true\n                          name: 旷野\n                          resource_id: \"7275698024892943655\"\n                        - effect_id: \"7501717343156981046\"\n                          has_params: true\n                          is_vip: true\n                          name: 旷野自然\n                          resource_id: \"7501717343156981046\"\n                        - effect_id: \"7131513310733765918\"\n                          has_params: false\n                          is_vip: true\n                          name: 旷野蓝\n                          resource_id: \"7131513310733765918\"\n                        - effect_id: \"7485240505257807138\"\n                          has_params: true\n                          is_vip: true\n                          name: 明亮春味\n                          resource_id: \"7485240505257807138\"\n                        - effect_id: \"7470840671763565864\"\n                          has_params: true\n                          is_vip: true\n                          name: 明亮焕晴\n                          resource_id: \"7470840671763565864\"\n                        - effect_id: \"7482055184554806566\"\n                          has_params: true\n                          is_vip: true\n                          name: 明媚春景\n                          resource_id: \"7482055184554806566\"\n                        - effect_id: \"7480823852470177034\"\n                          has_params: true\n                          is_vip: true\n                          name: 明媚自然\n                          resource_id: \"7480823852470177034\"\n                        - effect_id: \"7506413750665121060\"\n                          has_params: true\n                          is_vip: true\n                          name: 明媚透亮\n                          resource_id: \"7506413750665121060\"\n                        - effect_id: \"7343287054228327691\"\n                          has_params: true\n                          is_vip: true\n                          name: 明煦\n                          resource_id: \"7343287054228327691\"\n                        - effect_id: \"7196921394163141946\"\n                          has_params: false\n                          is_vip: true\n                          name: 星沫\n                          resource_id: \"7196921394163141946\"\n                        - effect_id: \"7327596304173944127\"\n                          has_params: true\n                          is_vip: true\n                          name: 春和\n                          resource_id: \"7327596304173944127\"\n                        - effect_id: \"7325335963318750515\"\n                          has_params: false\n                          is_vip: true\n                          name: 春喜\n                          resource_id: \"7325335963318750515\"\n                        - effect_id: \"7479295356488977679\"\n                          has_params: true\n                          is_vip: true\n                          name: 春天淡彩\n                          resource_id: \"7479295356488977679\"\n                        - effect_id: \"7483069698981104947\"\n                          has_params: true\n                          is_vip: true\n                          name: 春忆胶卷\n                          resource_id: \"7483069698981104947\"\n                        - effect_id: \"7477922252470652198\"\n                          has_params: true\n                          is_vip: true\n                          name: 春日序\n                          resource_id: \"7477922252470652198\"\n                        - effect_id: \"7493076668009958668\"\n                          has_params: true\n                          is_vip: true\n                          name: 春日樱\n                          resource_id: \"7493076668009958668\"\n                        - effect_id: \"7477594530104085770\"\n                          has_params: true\n                          is_vip: true\n                          name: 春日清晰\n                          resource_id: \"7477594530104085770\"\n                        - effect_id: \"7485293187616066831\"\n                          has_params: false\n                          is_vip: true\n                          name: 春日清透\n                          resource_id: \"7485293187616066831\"\n                        - effect_id: \"7486868815364492554\"\n                          has_params: true\n                          is_vip: true\n                          name: 春日美食III\n                          resource_id: \"7486868815364492554\"\n                        - effect_id: \"7472064159065132325\"\n                          has_params: true\n                          is_vip: true\n                          name: 春日花间\n                          resource_id: \"7472064159065132325\"\n                        - effect_id: \"7481494936836197641\"\n                          has_params: true\n                          is_vip: true\n                          name: 春日韩胶\n                          resource_id: \"7481494936836197641\"\n                        - effect_id: \"7483917188638772517\"\n                          has_params: true\n                          is_vip: true\n                          name: 春桃肤\n                          resource_id: \"7483917188638772517\"\n                        - effect_id: \"7481693425218194725\"\n                          has_params: true\n                          is_vip: true\n                          name: 春橙肤\n                          resource_id: \"7481693425218194725\"\n                        - effect_id: \"7493581083628408102\"\n                          has_params: true\n                          is_vip: true\n                          name: 春游踏青\n                          resource_id: \"7493581083628408102\"\n                        - effect_id: \"7332492044327243049\"\n                          has_params: true\n                          is_vip: true\n                          name: 春澄\n                          resource_id: \"7332492044327243049\"\n                        - effect_id: \"7148963827239963918\"\n                          has_params: false\n                          is_vip: true\n                          name: 春风\n                          resource_id: \"7148963827239963918\"\n                        - effect_id: \"7195780237790154042\"\n                          has_params: false\n                          is_vip: true\n                          name: 昭和\n                          resource_id: \"7195780237790154042\"\n                        - effect_id: \"7302041028205333786\"\n                          has_params: true\n                          is_vip: true\n                          name: 晚宴\n                          resource_id: \"7302041028205333786\"\n                        - effect_id: \"7297143895408839947\"\n                          has_params: false\n                          is_vip: true\n                          name: 晚晴\n                          resource_id: \"7297143895408839947\"\n                        - effect_id: \"7262634564428778752\"\n                          has_params: false\n                          is_vip: true\n                          name: 晚柠\n                          resource_id: \"7262634564428778752\"\n                        - effect_id: \"7127609541839129886\"\n                          has_params: false\n                          is_vip: true\n                          name: 晚樱\n                          resource_id: \"7127609541839129886\"\n                        - effect_id: \"7392898170524618023\"\n                          has_params: true\n                          is_vip: true\n                          name: 晚霞增色\n                          resource_id: \"7392898170524618023\"\n                        - effect_id: \"7279062968501832972\"\n                          has_params: true\n                          is_vip: true\n                          name: 晨旭\n                          resource_id: \"7279062968501832972\"\n                        - effect_id: \"7127615578705104135\"\n                          has_params: false\n                          is_vip: true\n                          name: 普林斯顿\n                          resource_id: \"7127615578705104135\"\n                        - effect_id: \"7420253131079961868\"\n                          has_params: true\n                          is_vip: true\n                          name: 晴天\n                          resource_id: \"7420253131079961868\"\n                        - effect_id: \"7454234032570764581\"\n                          has_params: true\n                          is_vip: true\n                          name: 晴天亮丽\n                          resource_id: \"7454234032570764581\"\n                        - effect_id: \"7454234028141497610\"\n                          has_params: true\n                          is_vip: true\n                          name: 晴天增色\n                          resource_id: \"7454234028141497610\"\n                        - effect_id: \"7486890449207151891\"\n                          has_params: true\n                          is_vip: true\n                          name: '晴天灿烂 '\n                          resource_id: \"7486890449207151891\"\n                        - effect_id: \"7374709776623635724\"\n                          has_params: true\n                          is_vip: true\n                          name: 晴好假日\n                          resource_id: \"7374709776623635724\"\n                        - effect_id: \"7475397942715632922\"\n                          has_params: true\n                          is_vip: true\n                          name: 晴好风光\n                          resource_id: \"7475397942715632922\"\n                        - effect_id: \"7346542846863887635\"\n                          has_params: true\n                          is_vip: true\n                          name: 晴春\n                          resource_id: \"7346542846863887635\"\n                        - effect_id: \"7485769123176254770\"\n                          has_params: true\n                          is_vip: true\n                          name: 晴春奶蓝\n                          resource_id: \"7485769123176254770\"\n                        - effect_id: \"7434746357233028390\"\n                          has_params: true\n                          is_vip: true\n                          name: 晴朗\n                          resource_id: \"7434746357233028390\"\n                        - effect_id: \"7525755037050539307\"\n                          has_params: false\n                          is_vip: true\n                          name: 晴海\n                          resource_id: \"7525755037050539307\"\n                        - effect_id: \"7477810373060611338\"\n                          has_params: true\n                          is_vip: true\n                          name: 晴空漫游\n                          resource_id: \"7477810373060611338\"\n                        - effect_id: \"7365842976691604763\"\n                          has_params: true\n                          is_vip: true\n                          name: 晴肤\n                          resource_id: \"7365842976691604763\"\n                        - effect_id: \"7307191907514420491\"\n                          has_params: false\n                          is_vip: true\n                          name: 晴谷\n                          resource_id: \"7307191907514420491\"\n                        - effect_id: \"7468501080691789094\"\n                          has_params: true\n                          is_vip: true\n                          name: 晴颜\n                          resource_id: \"7468501080691789094\"\n                        - effect_id: \"7199095242476293435\"\n                          has_params: false\n                          is_vip: true\n                          name: 晶透\n                          resource_id: \"7199095242476293435\"\n                        - effect_id: \"7451897248885099795\"\n                          has_params: true\n                          is_vip: true\n                          name: 智能光线\n                          resource_id: \"7451897248885099795\"\n                        - effect_id: \"7312646382395936010\"\n                          has_params: false\n                          is_vip: true\n                          name: 暖晨\n                          resource_id: \"7312646382395936010\"\n                        - effect_id: \"7405241190435523866\"\n                          has_params: true\n                          is_vip: true\n                          name: 暖棕\n                          resource_id: \"7405241190435523866\"\n                        - effect_id: \"7127830631601458440\"\n                          has_params: false\n                          is_vip: true\n                          name: 暖黄\n                          resource_id: \"7127830631601458440\"\n                        - effect_id: \"7446318175991368997\"\n                          has_params: false\n                          is_vip: true\n                          name: 暗光提亮\n                          resource_id: \"7446318175991368997\"\n                        - effect_id: \"7159163878822153483\"\n                          has_params: false\n                          is_vip: true\n                          name: 暗匣\n                          resource_id: \"7159163878822153483\"\n                        - effect_id: \"7328364126449765671\"\n                          has_params: false\n                          is_vip: true\n                          name: 暗夜明肤\n                          resource_id: \"7328364126449765671\"\n                        - effect_id: \"7291203298630159676\"\n                          has_params: false\n                          is_vip: true\n                          name: 暗影\n                          resource_id: \"7291203298630159676\"\n                        - effect_id: \"7281163501047991608\"\n                          has_params: false\n                          is_vip: true\n                          name: 暗曛\n                          resource_id: \"7281163501047991608\"\n                        - effect_id: \"7485767950314655002\"\n                          has_params: true\n                          is_vip: true\n                          name: 暗调人像\n                          resource_id: \"7485767950314655002\"\n                        - effect_id: \"7413717074037525769\"\n                          has_params: true\n                          is_vip: true\n                          name: 暗调发光\n                          resource_id: \"7413717074037525769\"\n                        - effect_id: \"7505272278574206219\"\n                          has_params: true\n                          is_vip: true\n                          name: 暗调古风\n                          resource_id: \"7505272278574206219\"\n                        - effect_id: \"7494530599202327846\"\n                          has_params: true\n                          is_vip: true\n                          name: 暗调复古电影\n                          resource_id: \"7494530599202327846\"\n                        - effect_id: \"7402945560623336758\"\n                          has_params: true\n                          is_vip: true\n                          name: 暗调电影\n                          resource_id: \"7402945560623336758\"\n                        - effect_id: \"7493536391431785752\"\n                          has_params: true\n                          is_vip: true\n                          name: 暗调纪实电影\n                          resource_id: \"7493536391431785752\"\n                        - effect_id: \"7511619145864187136\"\n                          has_params: true\n                          is_vip: true\n                          name: 暗金\n                          resource_id: \"7511619145864187136\"\n                        - effect_id: \"7177725752513793284\"\n                          has_params: false\n                          is_vip: true\n                          name: 暗银\n                          resource_id: \"7177725752513793284\"\n                        - effect_id: \"7223630575888780602\"\n                          has_params: false\n                          is_vip: true\n                          name: 暗银II\n                          resource_id: \"7223630575888780602\"\n                        - effect_id: \"7279061785922080055\"\n                          has_params: false\n                          is_vip: true\n                          name: 暮信\n                          resource_id: \"7279061785922080055\"\n                        - effect_id: \"7262351934785408267\"\n                          has_params: true\n                          is_vip: true\n                          name: 暮川\n                          resource_id: \"7262351934785408267\"\n                        - effect_id: \"7341257736983760182\"\n                          has_params: true\n                          is_vip: true\n                          name: 暮樱\n                          resource_id: \"7341257736983760182\"\n                        - effect_id: \"7145394582933572878\"\n                          has_params: false\n                          is_vip: true\n                          name: 暮涛\n                          resource_id: \"7145394582933572878\"\n                        - effect_id: \"7332396398157090089\"\n                          has_params: false\n                          is_vip: true\n                          name: 暮色约会\n                          resource_id: \"7332396398157090089\"\n                        - effect_id: \"7233734975839898940\"\n                          has_params: false\n                          is_vip: true\n                          name: 曼波\n                          resource_id: \"7233734975839898940\"\n                        - effect_id: \"7168108694285159719\"\n                          has_params: false\n                          is_vip: true\n                          name: 月吟\n                          resource_id: \"7168108694285159719\"\n                        - effect_id: \"7476109983688576290\"\n                          has_params: true\n                          is_vip: true\n                          name: 月辉\n                          resource_id: \"7476109983688576290\"\n                        - effect_id: \"7493920442613288219\"\n                          has_params: true\n                          is_vip: true\n                          name: 朦胧气质棕\n                          resource_id: \"7493920442613288219\"\n                        - effect_id: \"7233731121610100020\"\n                          has_params: false\n                          is_vip: true\n                          name: 木葵\n                          resource_id: \"7233731121610100020\"\n                        - effect_id: \"7506099780947430668\"\n                          has_params: true\n                          is_vip: true\n                          name: 末世天使\n                          resource_id: \"7506099780947430668\"\n                        - effect_id: \"7295630593063193865\"\n                          has_params: false\n                          is_vip: true\n                          name: 杏铃\n                          resource_id: \"7295630593063193865\"\n                        - effect_id: \"7246723559047941433\"\n                          has_params: false\n                          is_vip: true\n                          name: 松绿\n                          resource_id: \"7246723559047941433\"\n                        - effect_id: \"7160594387594972446\"\n                          has_params: false\n                          is_vip: true\n                          name: 果酥\n                          resource_id: \"7160594387594972446\"\n                        - effect_id: \"7395596262252334373\"\n                          has_params: true\n                          is_vip: true\n                          name: 柔光\n                          resource_id: \"7395596262252334373\"\n                        - effect_id: \"7345412316621442354\"\n                          has_params: false\n                          is_vip: true\n                          name: 柔焦\n                          resource_id: \"7345412316621442354\"\n                        - effect_id: \"7258220845041061180\"\n                          has_params: false\n                          is_vip: true\n                          name: 柠檬海\n                          resource_id: \"7258220845041061180\"\n                        - effect_id: \"7517685395102977334\"\n                          has_params: true\n                          is_vip: true\n                          name: 柯达金200\n                          resource_id: \"7517685395102977334\"\n                        - effect_id: \"7349928965869538570\"\n                          has_params: false\n                          is_vip: true\n                          name: 栖海\n                          resource_id: \"7349928965869538570\"\n                        - effect_id: \"7177259623819316519\"\n                          has_params: false\n                          is_vip: true\n                          name: 栩栩\n                          resource_id: \"7177259623819316519\"\n                        - effect_id: \"7348301778909252879\"\n                          has_params: false\n                          is_vip: true\n                          name: 格金\n                          resource_id: \"7348301778909252879\"\n                        - effect_id: \"7252673818035064124\"\n                          has_params: false\n                          is_vip: true\n                          name: 桃木\n                          resource_id: \"7252673818035064124\"\n                        - effect_id: \"7297131749346135331\"\n                          has_params: false\n                          is_vip: true\n                          name: 桃粉\n                          resource_id: \"7297131749346135331\"\n                        - effect_id: \"7199093989742562597\"\n                          has_params: false\n                          is_vip: true\n                          name: 桃野\n                          resource_id: \"7199093989742562597\"\n                        - effect_id: \"7275699191253339455\"\n                          has_params: false\n                          is_vip: true\n                          name: 桐影\n                          resource_id: \"7275699191253339455\"\n                        - effect_id: \"7127675251604917517\"\n                          has_params: false\n                          is_vip: true\n                          name: 梦境\n                          resource_id: \"7127675251604917517\"\n                        - effect_id: \"7377370067798985993\"\n                          has_params: false\n                          is_vip: true\n                          name: 梦幻夏\n                          resource_id: \"7377370067798985993\"\n                        - effect_id: \"7272341241893768506\"\n                          has_params: false\n                          is_vip: true\n                          name: 梦暮\n                          resource_id: \"7272341241893768506\"\n                        - effect_id: \"7261463763344248103\"\n                          has_params: false\n                          is_vip: true\n                          name: 梦核紫\n                          resource_id: \"7261463763344248103\"\n                        - effect_id: \"7252676190073392444\"\n                          has_params: false\n                          is_vip: true\n                          name: 棕榈\n                          resource_id: \"7252676190073392444\"\n                        - effect_id: \"7242215081663008056\"\n                          has_params: false\n                          is_vip: true\n                          name: 森山\n                          resource_id: \"7242215081663008056\"\n                        - effect_id: \"7524262165273005321\"\n                          has_params: true\n                          is_vip: true\n                          name: 森林徒步\n                          resource_id: \"7524262165273005321\"\n                        - effect_id: \"7274575376095923497\"\n                          has_params: false\n                          is_vip: true\n                          name: 森秋\n                          resource_id: \"7274575376095923497\"\n                        - effect_id: \"7510128089511349555\"\n                          has_params: false\n                          is_vip: true\n                          name: 森绿\n                          resource_id: \"7510128089511349555\"\n                        - effect_id: \"7169350167903112451\"\n                          has_params: false\n                          is_vip: true\n                          name: 榄白\n                          resource_id: \"7169350167903112451\"\n                        - effect_id: \"7398486193924623628\"\n                          has_params: false\n                          is_vip: true\n                          name: 模糊氛围\n                          resource_id: \"7398486193924623628\"\n                        - effect_id: \"7467985496988241204\"\n                          has_params: true\n                          is_vip: true\n                          name: 樱花粉肤\n                          resource_id: \"7467985496988241204\"\n                        - effect_id: \"7526948433597336832\"\n                          has_params: true\n                          is_vip: true\n                          name: 橘子海\n                          resource_id: \"7526948433597336832\"\n                        - effect_id: \"7278615838628924733\"\n                          has_params: false\n                          is_vip: true\n                          name: 橘海\n                          resource_id: \"7278615838628924733\"\n                        - effect_id: \"7127561047048850718\"\n                          has_params: false\n                          is_vip: true\n                          name: 橙蓝\n                          resource_id: \"7127561047048850718\"\n                        - effect_id: \"7479295334930205952\"\n                          has_params: true\n                          is_vip: true\n                          name: 欧若淡彩\n                          resource_id: \"7479295334930205952\"\n                        - effect_id: \"7510863205011393844\"\n                          has_params: true\n                          is_vip: true\n                          name: 毕业胶片\n                          resource_id: \"7510863205011393844\"\n                        - effect_id: \"7417468417852099894\"\n                          has_params: true\n                          is_vip: true\n                          name: 气色\n                          resource_id: \"7417468417852099894\"\n                        - effect_id: \"7527311213869403402\"\n                          has_params: true\n                          is_vip: true\n                          name: 气色透亮\n                          resource_id: \"7527311213869403402\"\n                        - effect_id: \"7470913918186163468\"\n                          has_params: true\n                          is_vip: true\n                          name: 氧气甜白\n                          resource_id: \"7470913918186163468\"\n                        - effect_id: \"7501345307830013222\"\n                          has_params: true\n                          is_vip: true\n                          name: 氧气自然\n                          resource_id: \"7501345307830013222\"\n                        - effect_id: \"7210613511133646135\"\n                          has_params: false\n                          is_vip: true\n                          name: 水泽\n                          resource_id: \"7210613511133646135\"\n                        - effect_id: \"7148776798715776292\"\n                          has_params: false\n                          is_vip: true\n                          name: 沙漫\n                          resource_id: \"7148776798715776292\"\n                        - effect_id: \"7160580722774920461\"\n                          has_params: false\n                          is_vip: true\n                          name: 沙砾\n                          resource_id: \"7160580722774920461\"\n                        - effect_id: \"7480196177611230514\"\n                          has_params: true\n                          is_vip: true\n                          name: 法式少女\n                          resource_id: \"7480196177611230514\"\n                        - effect_id: \"7480196167372999973\"\n                          has_params: true\n                          is_vip: true\n                          name: 法式甜粉\n                          resource_id: \"7480196167372999973\"\n                        - effect_id: \"7127655700532186398\"\n                          has_params: false\n                          is_vip: true\n                          name: 法餐\n                          resource_id: \"7127655700532186398\"\n                        - effect_id: \"7476109684169133362\"\n                          has_params: true\n                          is_vip: true\n                          name: 洛丽塔粉\n                          resource_id: \"7476109684169133362\"\n                        - effect_id: \"7221481120083283257\"\n                          has_params: false\n                          is_vip: true\n                          name: 浅茶\n                          resource_id: \"7221481120083283257\"\n                        - effect_id: \"7195783041376111932\"\n                          has_params: false\n                          is_vip: true\n                          name: 浅草\n                          resource_id: \"7195783041376111932\"\n                        - effect_id: \"7499121362351574282\"\n                          has_params: true\n                          is_vip: true\n                          name: 浓郁胶卷\n                          resource_id: \"7499121362351574282\"\n                        - effect_id: \"7376495406487801139\"\n                          has_params: true\n                          is_vip: true\n                          name: 浪语\n                          resource_id: \"7376495406487801139\"\n                        - effect_id: \"7527721135824211243\"\n                          has_params: true\n                          is_vip: true\n                          name: 海上冲浪\n                          resource_id: \"7527721135824211243\"\n                        - effect_id: \"7145394304377163045\"\n                          has_params: false\n                          is_vip: true\n                          name: 海松\n                          resource_id: \"7145394304377163045\"\n                        - effect_id: \"7494117715142053130\"\n                          has_params: true\n                          is_vip: true\n                          name: 海水正蓝\n                          resource_id: \"7494117715142053130\"\n                        - effect_id: \"7210611719180193083\"\n                          has_params: false\n                          is_vip: true\n                          name: 海湾\n                          resource_id: \"7210611719180193083\"\n                        - effect_id: \"7473034636436852031\"\n                          has_params: true\n                          is_vip: true\n                          name: 海盐\n                          resource_id: \"7473034636436852031\"\n                        - effect_id: \"7501729703544343820\"\n                          has_params: true\n                          is_vip: true\n                          name: 海盐夏日\n                          resource_id: \"7501729703544343820\"\n                        - effect_id: \"7495702685765651775\"\n                          has_params: true\n                          is_vip: true\n                          name: 海盐蓝\n                          resource_id: \"7495702685765651775\"\n                        - effect_id: \"7497887075627257114\"\n                          has_params: true\n                          is_vip: true\n                          name: 海边胶片\n                          resource_id: \"7497887075627257114\"\n                        - effect_id: \"7199093300526173501\"\n                          has_params: false\n                          is_vip: true\n                          name: 润光\n                          resource_id: \"7199093300526173501\"\n                        - effect_id: \"7366518614729493799\"\n                          has_params: true\n                          is_vip: true\n                          name: 润白\n                          resource_id: \"7366518614729493799\"\n                        - effect_id: \"7210645355136961852\"\n                          has_params: false\n                          is_vip: true\n                          name: 涩谷\n                          resource_id: \"7210645355136961852\"\n                        - effect_id: \"7127668617101020423\"\n                          has_params: false\n                          is_vip: true\n                          name: 淡奶油\n                          resource_id: \"7127668617101020423\"\n                        - effect_id: \"7493171130753174835\"\n                          has_params: true\n                          is_vip: true\n                          name: 清冷国风\n                          resource_id: \"7493171130753174835\"\n                        - effect_id: \"7398191077364124955\"\n                          has_params: true\n                          is_vip: true\n                          name: 清冷暗黑\n                          resource_id: \"7398191077364124955\"\n                        - effect_id: \"7503785630606904630\"\n                          has_params: true\n                          is_vip: true\n                          name: 清新度假\n                          resource_id: \"7503785630606904630\"\n                        - effect_id: \"7493819626330017078\"\n                          has_params: true\n                          is_vip: true\n                          name: 清新感\n                          resource_id: \"7493819626330017078\"\n                        - effect_id: \"7429759193361435955\"\n                          has_params: true\n                          is_vip: true\n                          name: 清新明亮\n                          resource_id: \"7429759193361435955\"\n                        - effect_id: \"7463798716542111030\"\n                          has_params: true\n                          is_vip: true\n                          name: 清新春日\n                          resource_id: \"7463798716542111030\"\n                        - effect_id: \"7456482453444726026\"\n                          has_params: true\n                          is_vip: true\n                          name: 清新晴空\n                          resource_id: \"7456482453444726026\"\n                        - effect_id: \"7481862972801879346\"\n                          has_params: true\n                          is_vip: true\n                          name: 清新暖食\n                          resource_id: \"7481862972801879346\"\n                        - effect_id: \"7459675263652220171\"\n                          has_params: true\n                          is_vip: true\n                          name: 清新氧晴\n                          resource_id: \"7459675263652220171\"\n                        - effect_id: \"7436078162217274687\"\n                          has_params: true\n                          is_vip: true\n                          name: 清新绿妍\n                          resource_id: \"7436078162217274687\"\n                        - effect_id: \"7478775634630659378\"\n                          has_params: true\n                          is_vip: true\n                          name: 清新花妍\n                          resource_id: \"7478775634630659378\"\n                        - effect_id: \"7456482275618835763\"\n                          has_params: true\n                          is_vip: true\n                          name: 清新质感\n                          resource_id: \"7456482275618835763\"\n                        - effect_id: \"7439995840799722815\"\n                          has_params: true\n                          is_vip: true\n                          name: 清新透亮\n                          resource_id: \"7439995840799722815\"\n                        - effect_id: \"7447719105563610404\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰\n                          resource_id: \"7447719105563610404\"\n                        - effect_id: \"7449939197223243058\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰严冬\n                          resource_id: \"7449939197223243058\"\n                        - effect_id: \"7483183184826420519\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰净透\n                          resource_id: \"7483183184826420519\"\n                        - effect_id: \"7436068361622129929\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰增强\n                          resource_id: \"7436068361622129929\"\n                        - effect_id: \"7428650549572144411\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰增色\n                          resource_id: \"7428650549572144411\"\n                        - effect_id: \"7441960726274559282\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰增质\n                          resource_id: \"7441960726274559282\"\n                        - effect_id: \"7443101069539953931\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰提升\n                          resource_id: \"7443101069539953931\"\n                        - effect_id: \"7435151579029769511\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰电影\n                          resource_id: \"7435151579029769511\"\n                        - effect_id: \"7441541255760284939\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰画质\n                          resource_id: \"7441541255760284939\"\n                        - effect_id: \"7494607226519260442\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰绿妍\n                          resource_id: \"7494607226519260442\"\n                        - effect_id: \"7473805985388317978\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰自然\n                          resource_id: \"7473805985388317978\"\n                        - effect_id: \"7493197626645531928\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰花朵\n                          resource_id: \"7493197626645531928\"\n                        - effect_id: \"7503810545670311206\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰萌宠\n                          resource_id: \"7503810545670311206\"\n                        - effect_id: \"7442390492307836186\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰质感\n                          resource_id: \"7442390492307836186\"\n                        - effect_id: \"7440517981374893327\"\n                          has_params: true\n                          is_vip: true\n                          name: 清晰透亮\n                          resource_id: \"7440517981374893327\"\n                        - effect_id: \"7392897785755897100\"\n                          has_params: false\n                          is_vip: true\n                          name: 清爽\n                          resource_id: \"7392897785755897100\"\n                        - effect_id: \"7499484084197018889\"\n                          has_params: true\n                          is_vip: true\n                          name: 清爽夏颜\n                          resource_id: \"7499484084197018889\"\n                        - effect_id: \"7493540929874218281\"\n                          has_params: true\n                          is_vip: true\n                          name: 清透光感\n                          resource_id: \"7493540929874218281\"\n                        - effect_id: \"7496156231392873767\"\n                          has_params: true\n                          is_vip: true\n                          name: 清透感\n                          resource_id: \"7496156231392873767\"\n                        - effect_id: \"7403664041945681191\"\n                          has_params: true\n                          is_vip: true\n                          name: 清透美食\n                          resource_id: \"7403664041945681191\"\n                        - effect_id: \"7473126624322391308\"\n                          has_params: true\n                          is_vip: true\n                          name: 清透萌宠\n                          resource_id: \"7473126624322391308\"\n                        - effect_id: \"7486694625009339689\"\n                          has_params: true\n                          is_vip: true\n                          name: 清风绿妍\n                          resource_id: \"7486694625009339689\"\n                        - effect_id: \"7493874443639377164\"\n                          has_params: true\n                          is_vip: true\n                          name: 港风复古\n                          resource_id: \"7493874443639377164\"\n                        - effect_id: \"7408952560549104923\"\n                          has_params: true\n                          is_vip: true\n                          name: 港风夜景\n                          resource_id: \"7408952560549104923\"\n                        - effect_id: \"7493845947546455307\"\n                          has_params: true\n                          is_vip: true\n                          name: 港风电影\n                          resource_id: \"7493845947546455307\"\n                        - effect_id: \"7347670931646549282\"\n                          has_params: false\n                          is_vip: true\n                          name: 漠土\n                          resource_id: \"7347670931646549282\"\n                        - effect_id: \"7356883843376221475\"\n                          has_params: false\n                          is_vip: true\n                          name: 漫樱\n                          resource_id: \"7356883843376221475\"\n                        - effect_id: \"7210749292888280359\"\n                          has_params: false\n                          is_vip: true\n                          name: 漫空\n                          resource_id: \"7210749292888280359\"\n                        - effect_id: \"7210758351595048195\"\n                          has_params: false\n                          is_vip: true\n                          name: 漫荫\n                          resource_id: \"7210758351595048195\"\n                        - effect_id: \"7145394477249678606\"\n                          has_params: false\n                          is_vip: true\n                          name: 漱石\n                          resource_id: \"7145394477249678606\"\n                        - effect_id: \"7127620215290039566\"\n                          has_params: false\n                          is_vip: true\n                          name: 潘多拉\n                          resource_id: \"7127620215290039566\"\n                        - effect_id: \"7145394908608662814\"\n                          has_params: false\n                          is_vip: true\n                          name: 灯会\n                          resource_id: \"7145394908608662814\"\n                        - effect_id: \"7262351970193640715\"\n                          has_params: true\n                          is_vip: true\n                          name: 灯塔\n                          resource_id: \"7262351970193640715\"\n                        - effect_id: \"7199460195502689574\"\n                          has_params: false\n                          is_vip: true\n                          name: 灰芋\n                          resource_id: \"7199460195502689574\"\n                        - effect_id: \"7476126948708617482\"\n                          has_params: true\n                          is_vip: true\n                          name: 灰调中性\n                          resource_id: \"7476126948708617482\"\n                        - effect_id: \"7484662695443090715\"\n                          has_params: true\n                          is_vip: true\n                          name: 灰调日常\n                          resource_id: \"7484662695443090715\"\n                        - effect_id: \"7312645421271158070\"\n                          has_params: false\n                          is_vip: true\n                          name: 灰麻\n                          resource_id: \"7312645421271158070\"\n                        - effect_id: \"7467879231914118412\"\n                          has_params: true\n                          is_vip: true\n                          name: 灿金彩带\n                          resource_id: \"7467879231914118412\"\n                        - effect_id: \"7194083900333755704\"\n                          has_params: false\n                          is_vip: true\n                          name: 炊烟\n                          resource_id: \"7194083900333755704\"\n                        - effect_id: \"7145395383475113230\"\n                          has_params: false\n                          is_vip: true\n                          name: 烈日\n                          resource_id: \"7145395383475113230\"\n                        - effect_id: \"7246722333010824508\"\n                          has_params: false\n                          is_vip: true\n                          name: 烈空\n                          resource_id: \"7246722333010824508\"\n                        - effect_id: \"7160598329817091364\"\n                          has_params: false\n                          is_vip: true\n                          name: 烘挞\n                          resource_id: \"7160598329817091364\"\n                        - effect_id: \"7131582482608164132\"\n                          has_params: false\n                          is_vip: true\n                          name: 烟橙\n                          resource_id: \"7131582482608164132\"\n                        - effect_id: \"7328363415313993001\"\n                          has_params: false\n                          is_vip: true\n                          name: 烟花璀璨\n                          resource_id: \"7328363415313993001\"\n                        - effect_id: \"7377368986276646171\"\n                          has_params: true\n                          is_vip: true\n                          name: 热带季风\n                          resource_id: \"7377368986276646171\"\n                        - effect_id: \"7463372376038755603\"\n                          has_params: true\n                          is_vip: true\n                          name: 热气腾腾\n                          resource_id: \"7463372376038755603\"\n                        - effect_id: \"7447164085122256143\"\n                          has_params: false\n                          is_vip: true\n                          name: 热红酒\n                          resource_id: \"7447164085122256143\"\n                        - effect_id: \"7127674287238008078\"\n                          has_params: false\n                          is_vip: true\n                          name: 焕肤\n                          resource_id: \"7127674287238008078\"\n                        - effect_id: \"7131539023817936158\"\n                          has_params: false\n                          is_vip: true\n                          name: 焰色\n                          resource_id: \"7131539023817936158\"\n                        - effect_id: \"7145395127089909028\"\n                          has_params: false\n                          is_vip: true\n                          name: 熏柏\n                          resource_id: \"7145395127089909028\"\n                        - effect_id: \"7328694736565439807\"\n                          has_params: true\n                          is_vip: true\n                          name: 爱丽丝\n                          resource_id: \"7328694736565439807\"\n                        - effect_id: \"7131656881805741325\"\n                          has_params: false\n                          is_vip: true\n                          name: 爱之城\n                          resource_id: \"7131656881805741325\"\n                        - effect_id: \"7337929076042222899\"\n                          has_params: false\n                          is_vip: true\n                          name: 爱之城II\n                          resource_id: \"7337929076042222899\"\n                        - effect_id: \"7172285234296278309\"\n                          has_params: false\n                          is_vip: true\n                          name: 牙白\n                          resource_id: \"7172285234296278309\"\n                        - effect_id: \"7473369111490317595\"\n                          has_params: true\n                          is_vip: true\n                          name: 牛奶肌\n                          resource_id: \"7473369111490317595\"\n                        - effect_id: \"7397751642390564134\"\n                          has_params: true\n                          is_vip: true\n                          name: 牧野\n                          resource_id: \"7397751642390564134\"\n                        - effect_id: \"7202485617026977056\"\n                          has_params: false\n                          is_vip: true\n                          name: 独行侠\n                          resource_id: \"7202485617026977056\"\n                        - effect_id: \"7148806074601164062\"\n                          has_params: false\n                          is_vip: true\n                          name: 猎梦\n                          resource_id: \"7148806074601164062\"\n                        - effect_id: \"7405509975939894567\"\n                          has_params: true\n                          is_vip: true\n                          name: 玄影灵\n                          resource_id: \"7405509975939894567\"\n                        - effect_id: \"7177267248753610023\"\n                          has_params: false\n                          is_vip: true\n                          name: 玩趣\n                          resource_id: \"7177267248753610023\"\n                        - effect_id: \"7295599414180138250\"\n                          has_params: false\n                          is_vip: true\n                          name: 琥珀\n                          resource_id: \"7295599414180138250\"\n                        - effect_id: \"7468943213143821587\"\n                          has_params: true\n                          is_vip: true\n                          name: 璀璨\n                          resource_id: \"7468943213143821587\"\n                        - effect_id: \"7486871767642950966\"\n                          has_params: true\n                          is_vip: true\n                          name: 甜妹感\n                          resource_id: \"7486871767642950966\"\n                        - effect_id: \"7505303260148878630\"\n                          has_params: true\n                          is_vip: true\n                          name: 甜心芭比\n                          resource_id: \"7505303260148878630\"\n                        - effect_id: \"7374709634088668452\"\n                          has_params: true\n                          is_vip: true\n                          name: 田园野餐\n                          resource_id: \"7374709634088668452\"\n                        - effect_id: \"7439365849703550247\"\n                          has_params: true\n                          is_vip: true\n                          name: 电影增强\n                          resource_id: \"7439365849703550247\"\n                        - effect_id: \"7435151398783765799\"\n                          has_params: true\n                          is_vip: true\n                          name: 电影增质\n                          resource_id: \"7435151398783765799\"\n                        - effect_id: \"7486832436819578151\"\n                          has_params: true\n                          is_vip: true\n                          name: 电影感增强\n                          resource_id: \"7486832436819578151\"\n                        - effect_id: \"7447126702137904420\"\n                          has_params: true\n                          is_vip: true\n                          name: 电影柔光\n                          resource_id: \"7447126702137904420\"\n                        - effect_id: \"7494169971136711977\"\n                          has_params: true\n                          is_vip: true\n                          name: 电影校正\n                          resource_id: \"7494169971136711977\"\n                        - effect_id: \"7472770427245448474\"\n                          has_params: true\n                          is_vip: true\n                          name: 电影画质\n                          resource_id: \"7472770427245448474\"\n                        - effect_id: \"7441124730066701604\"\n                          has_params: true\n                          is_vip: true\n                          name: 电影雪肤\n                          resource_id: \"7441124730066701604\"\n                        - effect_id: \"7239979137404833083\"\n                          has_params: false\n                          is_vip: true\n                          name: 画报\n                          resource_id: \"7239979137404833083\"\n                        - effect_id: \"7507148382536764682\"\n                          has_params: true\n                          is_vip: true\n                          name: 画质修复\n                          resource_id: \"7507148382536764682\"\n                        - effect_id: \"7439560136630471963\"\n                          has_params: true\n                          is_vip: true\n                          name: 画质高清\n                          resource_id: \"7439560136630471963\"\n                        - effect_id: \"7195925533031435558\"\n                          has_params: false\n                          is_vip: true\n                          name: 登高\n                          resource_id: \"7195925533031435558\"\n                        - effect_id: \"7302336985513970963\"\n                          has_params: false\n                          is_vip: true\n                          name: 白富美\n                          resource_id: \"7302336985513970963\"\n                        - effect_id: \"7300522962937990415\"\n                          has_params: true\n                          is_vip: true\n                          name: 白桃\n                          resource_id: \"7300522962937990415\"\n                        - effect_id: \"7524363630498827530\"\n                          has_params: true\n                          is_vip: true\n                          name: 白皙\n                          resource_id: \"7524363630498827530\"\n                        - effect_id: \"7210616269597314362\"\n                          has_params: false\n                          is_vip: true\n                          name: 百川\n                          resource_id: \"7210616269597314362\"\n                        - effect_id: \"7127823742830398757\"\n                          has_params: false\n                          is_vip: true\n                          name: 盐系\n                          resource_id: \"7127823742830398757\"\n                        - effect_id: \"7500997115917651227\"\n                          has_params: true\n                          is_vip: true\n                          name: 盐系清透\n                          resource_id: \"7500997115917651227\"\n                        - effect_id: \"7194091413728922941\"\n                          has_params: false\n                          is_vip: true\n                          name: 石山\n                          resource_id: \"7194091413728922941\"\n                        - effect_id: \"7131655685321821477\"\n                          has_params: false\n                          is_vip: true\n                          name: 砂金\n                          resource_id: \"7131655685321821477\"\n                        - effect_id: \"7348707347419712794\"\n                          has_params: false\n                          is_vip: true\n                          name: 破晓\n                          resource_id: \"7348707347419712794\"\n                        - effect_id: \"7127663097162075399\"\n                          has_params: false\n                          is_vip: true\n                          name: 硬朗\n                          resource_id: \"7127663097162075399\"\n                        - effect_id: \"7524592387742567689\"\n                          has_params: true\n                          is_vip: true\n                          name: 硬朗男孩\n                          resource_id: \"7524592387742567689\"\n                        - effect_id: \"7148945136280440101\"\n                          has_params: false\n                          is_vip: true\n                          name: 碎芒\n                          resource_id: \"7148945136280440101\"\n                        - effect_id: \"7363537225620983067\"\n                          has_params: false\n                          is_vip: true\n                          name: 碳烤\n                          resource_id: \"7363537225620983067\"\n                        - effect_id: \"7323020458050260262\"\n                          has_params: false\n                          is_vip: true\n                          name: 福桔\n                          resource_id: \"7323020458050260262\"\n                        - effect_id: \"7453122471810714930\"\n                          has_params: true\n                          is_vip: true\n                          name: 福运\n                          resource_id: \"7453122471810714930\"\n                        - effect_id: \"7260770496055168310\"\n                          has_params: true\n                          is_vip: true\n                          name: 禾美\n                          resource_id: \"7260770496055168310\"\n                        - effect_id: \"7127674303306419464\"\n                          has_params: false\n                          is_vip: true\n                          name: 私语\n                          resource_id: \"7127674303306419464\"\n                        - effect_id: \"7404121905780772122\"\n                          has_params: true\n                          is_vip: true\n                          name: 秋日物语II\n                          resource_id: \"7404121905780772122\"\n                        - effect_id: \"7145391965717253406\"\n                          has_params: false\n                          is_vip: true\n                          name: 秋池\n                          resource_id: \"7145391965717253406\"\n                        - effect_id: \"7196920471043050812\"\n                          has_params: false\n                          is_vip: true\n                          name: 秋波\n                          resource_id: \"7196920471043050812\"\n                        - effect_id: \"7493760868576988443\"\n                          has_params: true\n                          is_vip: true\n                          name: 秋田胶片\n                          resource_id: \"7493760868576988443\"\n                        - effect_id: \"7502329862581996854\"\n                          has_params: true\n                          is_vip: true\n                          name: 科切拉\n                          resource_id: \"7502329862581996854\"\n                        - effect_id: \"7501988309900528935\"\n                          has_params: true\n                          is_vip: true\n                          name: 科幻星球\n                          resource_id: \"7501988309900528935\"\n                        - effect_id: \"7127561998556073247\"\n                          has_params: false\n                          is_vip: true\n                          name: 简餐\n                          resource_id: \"7127561998556073247\"\n                        - effect_id: \"7503540725334723875\"\n                          has_params: true\n                          is_vip: true\n                          name: 粉柔撕拉片\n                          resource_id: \"7503540725334723875\"\n                        - effect_id: \"7131467442789846285\"\n                          has_params: false\n                          is_vip: true\n                          name: 粉橘\n                          resource_id: \"7131467442789846285\"\n                        - effect_id: \"7156647258342034702\"\n                          has_params: false\n                          is_vip: true\n                          name: 粉白\n                          resource_id: \"7156647258342034702\"\n                        - effect_id: \"7481194247610174757\"\n                          has_params: true\n                          is_vip: true\n                          name: 粉白微曝光\n                          resource_id: \"7481194247610174757\"\n                        - effect_id: \"7462636960557927699\"\n                          has_params: true\n                          is_vip: true\n                          name: 粉蓝烟花\n                          resource_id: \"7462636960557927699\"\n                        - effect_id: \"7351018816215764233\"\n                          has_params: false\n                          is_vip: true\n                          name: 素净\n                          resource_id: \"7351018816215764233\"\n                        - effect_id: \"7300968790391606567\"\n                          has_params: false\n                          is_vip: true\n                          name: 素简\n                          resource_id: \"7300968790391606567\"\n                        - effect_id: \"7507920355613248803\"\n                          has_params: true\n                          is_vip: true\n                          name: 紫霞时分\n                          resource_id: \"7507920355613248803\"\n                        - effect_id: \"7322666518536359204\"\n                          has_params: false\n                          is_vip: true\n                          name: 繁花似锦\n                          resource_id: \"7322666518536359204\"\n                        - effect_id: \"7322665314980859177\"\n                          has_params: false\n                          is_vip: true\n                          name: 繁花如梦\n                          resource_id: \"7322665314980859177\"\n                        - effect_id: \"7322665617373351231\"\n                          has_params: false\n                          is_vip: true\n                          name: 繁花璀璨\n                          resource_id: \"7322665617373351231\"\n                        - effect_id: \"7325421708809096467\"\n                          has_params: false\n                          is_vip: true\n                          name: 红运\n                          resource_id: \"7325421708809096467\"\n                        - effect_id: \"7493535052098358590\"\n                          has_params: true\n                          is_vip: true\n                          name: 纪实电影\n                          resource_id: \"7493535052098358590\"\n                        - effect_id: \"7501954865518677267\"\n                          has_params: true\n                          is_vip: true\n                          name: 纪实电影胶片\n                          resource_id: \"7501954865518677267\"\n                        - effect_id: \"7260772961462799627\"\n                          has_params: false\n                          is_vip: true\n                          name: 纱雾\n                          resource_id: \"7260772961462799627\"\n                        - effect_id: \"7148965677376736542\"\n                          has_params: false\n                          is_vip: true\n                          name: 织乐\n                          resource_id: \"7148965677376736542\"\n                        - effect_id: \"7449048410004507914\"\n                          has_params: true\n                          is_vip: true\n                          name: 经典港风\n                          resource_id: \"7449048410004507914\"\n                        - effect_id: \"7148796681176288548\"\n                          has_params: false\n                          is_vip: true\n                          name: 绮思\n                          resource_id: \"7148796681176288548\"\n                        - effect_id: \"7361401117672066345\"\n                          has_params: true\n                          is_vip: true\n                          name: 绿妍II\n                          resource_id: \"7361401117672066345\"\n                        - effect_id: \"7148817459095670029\"\n                          has_params: false\n                          is_vip: true\n                          name: 绿野\n                          resource_id: \"7148817459095670029\"\n                        - effect_id: \"7355426069840661798\"\n                          has_params: false\n                          is_vip: true\n                          name: 绿野仙踪\n                          resource_id: \"7355426069840661798\"\n                        - effect_id: \"7409674961595518258\"\n                          has_params: true\n                          is_vip: true\n                          name: 绿野漫旅\n                          resource_id: \"7409674961595518258\"\n                        - effect_id: \"7494869214751182121\"\n                          has_params: true\n                          is_vip: true\n                          name: 美味brunch\n                          resource_id: \"7494869214751182121\"\n                        - effect_id: \"7332345211621887251\"\n                          has_params: false\n                          is_vip: true\n                          name: 美好瞬间\n                          resource_id: \"7332345211621887251\"\n                        - effect_id: \"7273782607257685309\"\n                          has_params: false\n                          is_vip: true\n                          name: 美拉德\n                          resource_id: \"7273782607257685309\"\n                        - effect_id: \"7495821426562288915\"\n                          has_params: true\n                          is_vip: true\n                          name: 美白嫩肤\n                          resource_id: \"7495821426562288915\"\n                        - effect_id: \"7403664465390013735\"\n                          has_params: true\n                          is_vip: true\n                          name: 美食增色\n                          resource_id: \"7403664465390013735\"\n                        - effect_id: \"7239236880858877217\"\n                          has_params: false\n                          is_vip: true\n                          name: 美高\n                          resource_id: \"7239236880858877217\"\n                        - effect_id: \"7213573482850880827\"\n                          has_params: false\n                          is_vip: true\n                          name: 羽梦\n                          resource_id: \"7213573482850880827\"\n                        - effect_id: \"7325416529166732583\"\n                          has_params: false\n                          is_vip: true\n                          name: 老街\n                          resource_id: \"7325416529166732583\"\n                        - effect_id: \"7279063581092531510\"\n                          has_params: true\n                          is_vip: true\n                          name: 聆时\n                          resource_id: \"7279063581092531510\"\n                        - effect_id: \"7320428711487098153\"\n                          has_params: false\n                          is_vip: true\n                          name: 聚焦\n                          resource_id: \"7320428711487098153\"\n                        - effect_id: \"7496103061845249316\"\n                          has_params: true\n                          is_vip: true\n                          name: 胶片电影\n                          resource_id: \"7496103061845249316\"\n                        - effect_id: \"7477552975246937380\"\n                          has_params: true\n                          is_vip: true\n                          name: 自然增色\n                          resource_id: \"7477552975246937380\"\n                        - effect_id: \"7478210864818965779\"\n                          has_params: true\n                          is_vip: true\n                          name: 自然春色\n                          resource_id: \"7478210864818965779\"\n                        - effect_id: \"7446467221666204969\"\n                          has_params: true\n                          is_vip: true\n                          name: 自然雪肤\n                          resource_id: \"7446467221666204969\"\n                        - effect_id: \"7226257534313631037\"\n                          has_params: true\n                          is_vip: true\n                          name: 舞霞\n                          resource_id: \"7226257534313631037\"\n                        - effect_id: \"7269240546810400011\"\n                          has_params: false\n                          is_vip: true\n                          name: 艾丽莎\n                          resource_id: \"7269240546810400011\"\n                        - effect_id: \"7259718549634157882\"\n                          has_params: false\n                          is_vip: true\n                          name: 芭比\n                          resource_id: \"7259718549634157882\"\n                        - effect_id: \"7340950375127649577\"\n                          has_params: true\n                          is_vip: true\n                          name: 花容\n                          resource_id: \"7340950375127649577\"\n                        - effect_id: \"7446691478761508108\"\n                          has_params: true\n                          is_vip: true\n                          name: 花火增色\n                          resource_id: \"7446691478761508108\"\n                        - effect_id: \"7211008985187487036\"\n                          has_params: false\n                          is_vip: true\n                          name: 花间\n                          resource_id: \"7211008985187487036\"\n                        - effect_id: \"7356877435184450851\"\n                          has_params: false\n                          is_vip: true\n                          name: 花间II\n                          resource_id: \"7356877435184450851\"\n                        - effect_id: \"7261180740283403578\"\n                          has_params: false\n                          is_vip: true\n                          name: 花食\n                          resource_id: \"7261180740283403578\"\n                        - effect_id: \"7131605817958075685\"\n                          has_params: false\n                          is_vip: true\n                          name: 苍橘\n                          resource_id: \"7131605817958075685\"\n                        - effect_id: \"7493339669950729481\"\n                          has_params: true\n                          is_vip: true\n                          name: 苦尽柑来\n                          resource_id: \"7493339669950729481\"\n                        - effect_id: \"7481337713443048755\"\n                          has_params: true\n                          is_vip: true\n                          name: 英伦复古\n                          resource_id: \"7481337713443048755\"\n                        - effect_id: \"7177728466354326822\"\n                          has_params: false\n                          is_vip: true\n                          name: 茶墨\n                          resource_id: \"7177728466354326822\"\n                        - effect_id: \"7160603159486827783\"\n                          has_params: false\n                          is_vip: true\n                          name: 茶酪\n                          resource_id: \"7160603159486827783\"\n                        - effect_id: \"7410401136387132724\"\n                          has_params: true\n                          is_vip: true\n                          name: 荒原\n                          resource_id: \"7410401136387132724\"\n                        - effect_id: \"7274241173764525324\"\n                          has_params: false\n                          is_vip: true\n                          name: 荷郁\n                          resource_id: \"7274241173764525324\"\n                        - effect_id: \"7131419324622982408\"\n                          has_params: false\n                          is_vip: true\n                          name: 莫吉托\n                          resource_id: \"7131419324622982408\"\n                        - effect_id: \"7500930664041172278\"\n                          has_params: true\n                          is_vip: true\n                          name: 莫奈花园\n                          resource_id: \"7500930664041172278\"\n                        - effect_id: \"7381020276177276214\"\n                          has_params: true\n                          is_vip: true\n                          name: 莱顿\n                          resource_id: \"7381020276177276214\"\n                        - effect_id: \"7394022809317526834\"\n                          has_params: true\n                          is_vip: true\n                          name: 萌宠\n                          resource_id: \"7394022809317526834\"\n                        - effect_id: \"7374708995501739305\"\n                          has_params: true\n                          is_vip: true\n                          name: 落日派对\n                          resource_id: \"7374708995501739305\"\n                        - effect_id: \"7511197003057990952\"\n                          has_params: true\n                          is_vip: true\n                          name: 落日火烧云\n                          resource_id: \"7511197003057990952\"\n                        - effect_id: \"7501223866988039434\"\n                          has_params: true\n                          is_vip: true\n                          name: 落日电影\n                          resource_id: \"7501223866988039434\"\n                        - effect_id: \"7368141858603666698\"\n                          has_params: true\n                          is_vip: true\n                          name: 落日粉\n                          resource_id: \"7368141858603666698\"\n                        - effect_id: \"7374251948058447158\"\n                          has_params: true\n                          is_vip: true\n                          name: 落日鎏金\n                          resource_id: \"7374251948058447158\"\n                        - effect_id: \"7232220370667883837\"\n                          has_params: false\n                          is_vip: true\n                          name: 蒸汽机\n                          resource_id: \"7232220370667883837\"\n                        - effect_id: \"7237440664139484473\"\n                          has_params: false\n                          is_vip: true\n                          name: 蓝梦核\n                          resource_id: \"7237440664139484473\"\n                        - effect_id: \"7337929426493132058\"\n                          has_params: false\n                          is_vip: true\n                          name: 蓝橙II\n                          resource_id: \"7337929426493132058\"\n                        - effect_id: \"7127667757839076645\"\n                          has_params: false\n                          is_vip: true\n                          name: 蓝灰\n                          resource_id: \"7127667757839076645\"\n                        - effect_id: \"7127664822921022734\"\n                          has_params: false\n                          is_vip: true\n                          name: 蓝调\n                          resource_id: \"7127664822921022734\"\n                        - effect_id: \"7392898023505792319\"\n                          has_params: true\n                          is_vip: true\n                          name: 蓝调时刻\n                          resource_id: \"7392898023505792319\"\n                        - effect_id: \"7328363887542209828\"\n                          has_params: false\n                          is_vip: true\n                          name: 蓝调烟火\n                          resource_id: \"7328363887542209828\"\n                        - effect_id: \"7366562845120646463\"\n                          has_params: false\n                          is_vip: true\n                          name: 蓝调舞曲\n                          resource_id: \"7366562845120646463\"\n                        - effect_id: \"7341300292148907327\"\n                          has_params: true\n                          is_vip: true\n                          name: 蓝金\n                          resource_id: \"7341300292148907327\"\n                        - effect_id: \"7487297018998607131\"\n                          has_params: true\n                          is_vip: true\n                          name: 蔚蓝海域\n                          resource_id: \"7487297018998607131\"\n                        - effect_id: \"7344374695053102371\"\n                          has_params: true\n                          is_vip: true\n                          name: 薄绿\n                          resource_id: \"7344374695053102371\"\n                        - effect_id: \"7478775705195547930\"\n                          has_params: true\n                          is_vip: true\n                          name: 薄荷奶绿\n                          resource_id: \"7478775705195547930\"\n                        - effect_id: \"7199458491315145988\"\n                          has_params: false\n                          is_vip: true\n                          name: 薄霞\n                          resource_id: \"7199458491315145988\"\n                        - effect_id: \"7199455696017018151\"\n                          has_params: false\n                          is_vip: true\n                          name: 薰草\n                          resource_id: \"7199455696017018151\"\n                        - effect_id: \"7159133894975999244\"\n                          has_params: false\n                          is_vip: true\n                          name: 藤宅\n                          resource_id: \"7159133894975999244\"\n                        - effect_id: \"7263357855678467364\"\n                          has_params: false\n                          is_vip: true\n                          name: 街头\n                          resource_id: \"7263357855678467364\"\n                        - effect_id: \"7127671519450303775\"\n                          has_params: false\n                          is_vip: true\n                          name: 裸粉\n                          resource_id: \"7127671519450303775\"\n                        - effect_id: \"7502716416567545099\"\n                          has_params: true\n                          is_vip: true\n                          name: 褪色胶卷\n                          resource_id: \"7502716416567545099\"\n                        - effect_id: \"7131899038625975559\"\n                          has_params: false\n                          is_vip: true\n                          name: 西冷\n                          resource_id: \"7131899038625975559\"\n                        - effect_id: \"7131488780451663140\"\n                          has_params: false\n                          is_vip: true\n                          name: 西西里\n                          resource_id: \"7131488780451663140\"\n                        - effect_id: \"7159175960414194982\"\n                          has_params: false\n                          is_vip: true\n                          name: 西雅图\n                          resource_id: \"7159175960414194982\"\n                        - effect_id: \"7330543523042708790\"\n                          has_params: true\n                          is_vip: true\n                          name: 诗诺\n                          resource_id: \"7330543523042708790\"\n                        - effect_id: \"7385930407901990153\"\n                          has_params: true\n                          is_vip: true\n                          name: 诗野\n                          resource_id: \"7385930407901990153\"\n                        - effect_id: \"7131656881805856013\"\n                          has_params: false\n                          is_vip: true\n                          name: 贝果\n                          resource_id: \"7131656881805856013\"\n                        - effect_id: \"7493589321014906162\"\n                          has_params: true\n                          is_vip: true\n                          name: 质感增蓝\n                          resource_id: \"7493589321014906162\"\n                        - effect_id: \"7482072671715396901\"\n                          has_params: true\n                          is_vip: true\n                          name: 质感婚礼\n                          resource_id: \"7482072671715396901\"\n                        - effect_id: \"7493945660903787803\"\n                          has_params: true\n                          is_vip: true\n                          name: 质感新中式\n                          resource_id: \"7493945660903787803\"\n                        - effect_id: \"7486202141447589174\"\n                          has_params: true\n                          is_vip: true\n                          name: 质感明亮\n                          resource_id: \"7486202141447589174\"\n                        - effect_id: \"7482408418578271514\"\n                          has_params: true\n                          is_vip: true\n                          name: 质感晴春\n                          resource_id: \"7482408418578271514\"\n                        - effect_id: \"7127608379056459015\"\n                          has_params: false\n                          is_vip: true\n                          name: 赏味\n                          resource_id: \"7127608379056459015\"\n                        - effect_id: \"7226238039155150139\"\n                          has_params: true\n                          is_vip: true\n                          name: 赤墙\n                          resource_id: \"7226238039155150139\"\n                        - effect_id: \"7437195358075145484\"\n                          has_params: true\n                          is_vip: true\n                          name: 超清电影\n                          resource_id: \"7437195358075145484\"\n                        - effect_id: \"7475289663381540150\"\n                          has_params: true\n                          is_vip: true\n                          name: 超清电影卷\n                          resource_id: \"7475289663381540150\"\n                        - effect_id: \"7460107425375472935\"\n                          has_params: true\n                          is_vip: true\n                          name: 超清画质\n                          resource_id: \"7460107425375472935\"\n                        - effect_id: \"7302338645938261287\"\n                          has_params: false\n                          is_vip: true\n                          name: 超白\n                          resource_id: \"7302338645938261287\"\n                        - effect_id: \"7471501720732863753\"\n                          has_params: true\n                          is_vip: true\n                          name: 超高清\n                          resource_id: \"7471501720732863753\"\n                        - effect_id: \"7193989203930123554\"\n                          has_params: false\n                          is_vip: true\n                          name: 越岭\n                          resource_id: \"7193989203930123554\"\n                        - effect_id: \"7195931118166609190\"\n                          has_params: false\n                          is_vip: true\n                          name: 越野\n                          resource_id: \"7195931118166609190\"\n                        - effect_id: \"7522455016272121124\"\n                          has_params: true\n                          is_vip: true\n                          name: 轻氧夏\n                          resource_id: \"7522455016272121124\"\n                        - effect_id: \"7368463117287804197\"\n                          has_params: true\n                          is_vip: true\n                          name: 轻胶少女\n                          resource_id: \"7368463117287804197\"\n                        - effect_id: \"7361791960652238143\"\n                          has_params: false\n                          is_vip: true\n                          name: 过期电影卷\n                          resource_id: \"7361791960652238143\"\n                        - effect_id: \"7515060642705952011\"\n                          has_params: true\n                          is_vip: true\n                          name: 运动质感\n                          resource_id: \"7515060642705952011\"\n                        - effect_id: \"7233731748545203493\"\n                          has_params: false\n                          is_vip: true\n                          name: 迷幻\n                          resource_id: \"7233731748545203493\"\n                        - effect_id: \"7160594413847203085\"\n                          has_params: false\n                          is_vip: true\n                          name: 迷雾\n                          resource_id: \"7160594413847203085\"\n                        - effect_id: \"7503403496117521690\"\n                          has_params: true\n                          is_vip: true\n                          name: 逆光拯救\n                          resource_id: \"7503403496117521690\"\n                        - effect_id: \"7366260047401323811\"\n                          has_params: true\n                          is_vip: true\n                          name: 逆光提亮\n                          resource_id: \"7366260047401323811\"\n                        - effect_id: \"7486780026029870386\"\n                          has_params: true\n                          is_vip: true\n                          name: 透氧肌肤\n                          resource_id: \"7486780026029870386\"\n                        - effect_id: \"7530582568769522980\"\n                          has_params: true\n                          is_vip: true\n                          name: 通透\n                          resource_id: \"7530582568769522980\"\n                        - effect_id: \"7409674549467352374\"\n                          has_params: true\n                          is_vip: true\n                          name: 通透暖食\n                          resource_id: \"7409674549467352374\"\n                        - effect_id: \"7506758417143450890\"\n                          has_params: true\n                          is_vip: true\n                          name: 通透氧感\n                          resource_id: \"7506758417143450890\"\n                        - effect_id: \"7271145889119440147\"\n                          has_params: false\n                          is_vip: true\n                          name: 邂逅\n                          resource_id: \"7271145889119440147\"\n                        - effect_id: \"7343831195924303123\"\n                          has_params: true\n                          is_vip: true\n                          name: 郁金香\n                          resource_id: \"7343831195924303123\"\n                        - effect_id: \"7341296364598480178\"\n                          has_params: true\n                          is_vip: true\n                          name: 都卡\n                          resource_id: \"7341296364598480178\"\n                        - effect_id: \"7148817291583474980\"\n                          has_params: false\n                          is_vip: true\n                          name: 都城\n                          resource_id: \"7148817291583474980\"\n                        - effect_id: \"7312646683672825100\"\n                          has_params: false\n                          is_vip: true\n                          name: 都市\n                          resource_id: \"7312646683672825100\"\n                        - effect_id: \"7406976302122618123\"\n                          has_params: true\n                          is_vip: true\n                          name: 都市电影II\n                          resource_id: \"7406976302122618123\"\n                        - effect_id: \"7131322091839753502\"\n                          has_params: false\n                          is_vip: true\n                          name: 酚蓝\n                          resource_id: \"7131322091839753502\"\n                        - effect_id: \"7506178551725542696\"\n                          has_params: true\n                          is_vip: true\n                          name: 酷感辣妹\n                          resource_id: \"7506178551725542696\"\n                        - effect_id: \"7281165120980454713\"\n                          has_params: false\n                          is_vip: true\n                          name: 酷绿\n                          resource_id: \"7281165120980454713\"\n                        - effect_id: \"7211006465358843196\"\n                          has_params: false\n                          is_vip: true\n                          name: 醒春\n                          resource_id: \"7211006465358843196\"\n                        - effect_id: \"7131643870714006821\"\n                          has_params: false\n                          is_vip: true\n                          name: 里昂\n                          resource_id: \"7131643870714006821\"\n                        - effect_id: \"7395470918245502234\"\n                          has_params: true\n                          is_vip: true\n                          name: 野林\n                          resource_id: \"7395470918245502234\"\n                        - effect_id: \"7193983160231742772\"\n                          has_params: false\n                          is_vip: true\n                          name: 野趣\n                          resource_id: \"7193983160231742772\"\n                        - effect_id: \"7323022101735083315\"\n                          has_params: false\n                          is_vip: true\n                          name: 金喜\n                          resource_id: \"7323022101735083315\"\n                        - effect_id: \"7233733326517832995\"\n                          has_params: false\n                          is_vip: true\n                          name: 金姜\n                          resource_id: \"7233733326517832995\"\n                        - effect_id: \"7385416407049194787\"\n                          has_params: true\n                          is_vip: true\n                          name: 金照落日\n                          resource_id: \"7385416407049194787\"\n                        - effect_id: \"7145394185108065567\"\n                          has_params: false\n                          is_vip: true\n                          name: 金秋\n                          resource_id: \"7145394185108065567\"\n                        - effect_id: \"7376141023656873254\"\n                          has_params: true\n                          is_vip: true\n                          name: 金色韶华\n                          resource_id: \"7376141023656873254\"\n                        - effect_id: \"7131509679246675208\"\n                          has_params: false\n                          is_vip: true\n                          name: 铅绿\n                          resource_id: \"7131509679246675208\"\n                        - effect_id: \"7145394266209127694\"\n                          has_params: false\n                          is_vip: true\n                          name: 银蓝\n                          resource_id: \"7145394266209127694\"\n                        - effect_id: \"7145390299370638600\"\n                          has_params: false\n                          is_vip: true\n                          name: 镜粉\n                          resource_id: \"7145390299370638600\"\n                        - effect_id: \"7346450662185569555\"\n                          has_params: false\n                          is_vip: true\n                          name: 闪星\n                          resource_id: \"7346450662185569555\"\n                        - effect_id: \"7471169568484953363\"\n                          has_params: true\n                          is_vip: true\n                          name: 闪耀派对\n                          resource_id: \"7471169568484953363\"\n                        - effect_id: \"7361399516454604071\"\n                          has_params: true\n                          is_vip: true\n                          name: 阴天拯救\n                          resource_id: \"7361399516454604071\"\n                        - effect_id: \"7377370363035979034\"\n                          has_params: true\n                          is_vip: true\n                          name: 阿勒泰\n                          resource_id: \"7377370363035979034\"\n                        - effect_id: \"7234793127867878712\"\n                          has_params: false\n                          is_vip: true\n                          name: 陶瓷肌\n                          resource_id: \"7234793127867878712\"\n                        - effect_id: \"7271140658071588132\"\n                          has_params: false\n                          is_vip: true\n                          name: 随性\n                          resource_id: \"7271140658071588132\"\n                        - effect_id: \"7145394848361729288\"\n                          has_params: false\n                          is_vip: true\n                          name: 雀染\n                          resource_id: \"7145394848361729288\"\n                        - effect_id: \"7145678373530946824\"\n                          has_params: false\n                          is_vip: true\n                          name: 雨皂\n                          resource_id: \"7145678373530946824\"\n                        - effect_id: \"7196917591909109052\"\n                          has_params: false\n                          is_vip: true\n                          name: 雨空\n                          resource_id: \"7196917591909109052\"\n                        - effect_id: \"7431914829876694324\"\n                          has_params: true\n                          is_vip: true\n                          name: 雪地胶片\n                          resource_id: \"7431914829876694324\"\n                        - effect_id: \"7431914902177991970\"\n                          has_params: true\n                          is_vip: true\n                          name: 雪地胶片II\n                          resource_id: \"7431914902177991970\"\n                        - effect_id: \"7431914955747691810\"\n                          has_params: true\n                          is_vip: true\n                          name: 雪地胶片III\n                          resource_id: \"7431914955747691810\"\n                        - effect_id: \"7262376135202327871\"\n                          has_params: false\n                          is_vip: true\n                          name: 雪挞\n                          resource_id: \"7262376135202327871\"\n                        - effect_id: \"7426222844872330522\"\n                          has_params: true\n                          is_vip: true\n                          name: 雪白肤\n                          resource_id: \"7426222844872330522\"\n                        - effect_id: \"7312646650202262820\"\n                          has_params: false\n                          is_vip: true\n                          name: 雾都\n                          resource_id: \"7312646650202262820\"\n                        - effect_id: \"7127823362356727077\"\n                          has_params: false\n                          is_vip: true\n                          name: 雾野\n                          resource_id: \"7127823362356727077\"\n                        - effect_id: \"7185425707231644961\"\n                          has_params: false\n                          is_vip: true\n                          name: 青巷\n                          resource_id: \"7185425707231644961\"\n                        - effect_id: \"7131290518838938887\"\n                          has_params: false\n                          is_vip: true\n                          name: 青提\n                          resource_id: \"7131290518838938887\"\n                        - effect_id: \"7502056246804024611\"\n                          has_params: true\n                          is_vip: true\n                          name: 青春\n                          resource_id: \"7502056246804024611\"\n                        - effect_id: \"7513077194952936767\"\n                          has_params: true\n                          is_vip: true\n                          name: 青春照\n                          resource_id: \"7513077194952936767\"\n                        - effect_id: \"7511949534042311946\"\n                          has_params: true\n                          is_vip: true\n                          name: 青春物语\n                          resource_id: \"7511949534042311946\"\n                        - effect_id: \"7510888042761096459\"\n                          has_params: true\n                          is_vip: true\n                          name: 青春胶片\n                          resource_id: \"7510888042761096459\"\n                        - effect_id: \"7495811579095682367\"\n                          has_params: true\n                          is_vip: true\n                          name: 青春记忆\n                          resource_id: \"7495811579095682367\"\n                        - effect_id: \"7145390299106381086\"\n                          has_params: false\n                          is_vip: true\n                          name: 青森\n                          resource_id: \"7145390299106381086\"\n                        - effect_id: \"7478335987777572137\"\n                          has_params: true\n                          is_vip: true\n                          name: 青橙电影感\n                          resource_id: \"7478335987777572137\"\n                        - effect_id: \"7127671508264078599\"\n                          has_params: false\n                          is_vip: true\n                          name: 青灰\n                          resource_id: \"7127671508264078599\"\n                        - effect_id: \"7127541821332409630\"\n                          has_params: false\n                          is_vip: true\n                          name: 青黄\n                          resource_id: \"7127541821332409630\"\n                        - effect_id: \"7337932621046910262\"\n                          has_params: false\n                          is_vip: true\n                          name: 青黄II\n                          resource_id: \"7337932621046910262\"\n                        - effect_id: \"7226989951911562553\"\n                          has_params: false\n                          is_vip: true\n                          name: 韦斯\n                          resource_id: \"7226989951911562553\"\n                        - effect_id: \"7186934131484331322\"\n                          has_params: false\n                          is_vip: true\n                          name: 顺意\n                          resource_id: \"7186934131484331322\"\n                        - effect_id: \"7484983198800301321\"\n                          has_params: true\n                          is_vip: true\n                          name: 颜白\n                          resource_id: \"7484983198800301321\"\n                        - effect_id: \"7330579916272012580\"\n                          has_params: true\n                          is_vip: true\n                          name: 风味\n                          resource_id: \"7330579916272012580\"\n                        - effect_id: \"7261466919688015140\"\n                          has_params: false\n                          is_vip: true\n                          name: 风铃蓝\n                          resource_id: \"7261466919688015140\"\n                        - effect_id: \"7248568718265978112\"\n                          has_params: false\n                          is_vip: true\n                          name: 飒意\n                          resource_id: \"7248568718265978112\"\n                        - effect_id: \"7478181967532543259\"\n                          has_params: true\n                          is_vip: true\n                          name: 食光II\n                          resource_id: \"7478181967532543259\"\n                        - effect_id: \"7131644140340776205\"\n                          has_params: false\n                          is_vip: true\n                          name: 食色\n                          resource_id: \"7131644140340776205\"\n                        - effect_id: \"7330588808666156307\"\n                          has_params: true\n                          is_vip: true\n                          name: 香浓\n                          resource_id: \"7330588808666156307\"\n                        - effect_id: \"7145394213339860261\"\n                          has_params: false\n                          is_vip: true\n                          name: 驮月\n                          resource_id: \"7145394213339860261\"\n                        - effect_id: \"7486890470149246219\"\n                          has_params: true\n                          is_vip: true\n                          name: 高晴画质\n                          resource_id: \"7486890470149246219\"\n                        - effect_id: \"7447039744229428534\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清\n                          resource_id: \"7447039744229428534\"\n                        - effect_id: \"7463103811276655881\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清4K\n                          resource_id: \"7463103811276655881\"\n                        - effect_id: \"7454130417562553651\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清4k电影\n                          resource_id: \"7454130417562553651\"\n                        - effect_id: \"7325426821267295551\"\n                          has_params: false\n                          is_vip: true\n                          name: 高清II\n                          resource_id: \"7325426821267295551\"\n                        - effect_id: \"7476126917280730378\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清中性灰\n                          resource_id: \"7476126917280730378\"\n                        - effect_id: \"7474611627338239282\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清亮粉\n                          resource_id: \"7474611627338239282\"\n                        - effect_id: \"7471501728546966835\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清修复\n                          resource_id: \"7471501728546966835\"\n                        - effect_id: \"7402847660165713190\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清修复III\n                          resource_id: \"7402847660165713190\"\n                        - effect_id: \"7446737538967932186\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清冷冬\n                          resource_id: \"7446737538967932186\"\n                        - effect_id: \"7478329447545081129\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清冷调\n                          resource_id: \"7478329447545081129\"\n                        - effect_id: \"7446290162922818870\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清圣诞\n                          resource_id: \"7446290162922818870\"\n                        - effect_id: \"7426668776491453707\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清增强\n                          resource_id: \"7426668776491453707\"\n                        - effect_id: \"7440518219409968384\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清增色\n                          resource_id: \"7440518219409968384\"\n                        - effect_id: \"7436815358410886435\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清增质\n                          resource_id: \"7436815358410886435\"\n                        - effect_id: \"7449684693982743817\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清寒冬\n                          resource_id: \"7449684693982743817\"\n                        - effect_id: \"7437098009827036455\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清影视\n                          resource_id: \"7437098009827036455\"\n                        - effect_id: \"7414810241453280549\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清感\n                          resource_id: \"7414810241453280549\"\n                        - effect_id: \"7414810073731435785\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清感II\n                          resource_id: \"7414810073731435785\"\n                        - effect_id: \"7414810202706447625\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清感III\n                          resource_id: \"7414810202706447625\"\n                        - effect_id: \"7439995842477428004\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清提亮\n                          resource_id: \"7439995842477428004\"\n                        - effect_id: \"7443710725773675803\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清提升\n                          resource_id: \"7443710725773675803\"\n                        - effect_id: \"7476104906924100915\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清春日\n                          resource_id: \"7476104906924100915\"\n                        - effect_id: \"7442389591140748570\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清晴天\n                          resource_id: \"7442389591140748570\"\n                        - effect_id: \"7448290256476065035\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清晴日\n                          resource_id: \"7448290256476065035\"\n                        - effect_id: \"7431187754379136266\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清暖调\n                          resource_id: \"7431187754379136266\"\n                        - effect_id: \"7428629277110848768\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清润颜\n                          resource_id: \"7428629277110848768\"\n                        - effect_id: \"7442344329114422565\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清漫晴\n                          resource_id: \"7442344329114422565\"\n                        - effect_id: \"7471955373340101927\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清焕晴\n                          resource_id: \"7471955373340101927\"\n                        - effect_id: \"7413062310580800831\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清电影\n                          resource_id: \"7413062310580800831\"\n                        - effect_id: \"7452946862581058853\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清电影卷\n                          resource_id: \"7452946862581058853\"\n                        - effect_id: \"7465342226118266162\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清画质\n                          resource_id: \"7465342226118266162\"\n                        - effect_id: \"7451808659320900891\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清绿妍\n                          resource_id: \"7451808659320900891\"\n                        - effect_id: \"7435865312907676978\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清美食\n                          resource_id: \"7435865312907676978\"\n                        - effect_id: \"7433451928773807397\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清质感\n                          resource_id: \"7433451928773807397\"\n                        - effect_id: \"7444960692853148955\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清雪景\n                          resource_id: \"7444960692853148955\"\n                        - effect_id: \"7447397442603076899\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清雪肤\n                          resource_id: \"7447397442603076899\"\n                        - effect_id: \"7435675065498275081\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清鲜明\n                          resource_id: \"7435675065498275081\"\n                        - effect_id: \"7429744855724641545\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清黑白\n                          resource_id: \"7429744855724641545\"\n                        - effect_id: \"7450134286071631141\"\n                          has_params: true\n                          is_vip: true\n                          name: 高清默冬\n                          resource_id: \"7450134286071631141\"\n                        - effect_id: \"7513959933310749991\"\n                          has_params: true\n                          is_vip: true\n                          name: 高级影视\n                          resource_id: \"7513959933310749991\"\n                        - effect_id: \"7145394469666376991\"\n                          has_params: false\n                          is_vip: true\n                          name: 高街\n                          resource_id: \"7145394469666376991\"\n                        - effect_id: \"7175076304058895619\"\n                          has_params: false\n                          is_vip: true\n                          name: 魅影\n                          resource_id: \"7175076304058895619\"\n                        - effect_id: \"7166480345666260263\"\n                          has_params: false\n                          is_vip: true\n                          name: 魔都\n                          resource_id: \"7166480345666260263\"\n                        - effect_id: \"7428441733123345702\"\n                          has_params: true\n                          is_vip: true\n                          name: 鲜亮\n                          resource_id: \"7428441733123345702\"\n                        - effect_id: \"7320434750018047251\"\n                          has_params: false\n                          is_vip: true\n                          name: 鲜明\n                          resource_id: \"7320434750018047251\"\n                        - effect_id: \"7361400073533820196\"\n                          has_params: true\n                          is_vip: true\n                          name: 鲜明II\n                          resource_id: \"7361400073533820196\"\n                        - effect_id: \"7451608395745889586\"\n                          has_params: true\n                          is_vip: true\n                          name: 鲜明增强\n                          resource_id: \"7451608395745889586\"\n                        - effect_id: \"7463798839258909963\"\n                          has_params: true\n                          is_vip: true\n                          name: 鲜明增色\n                          resource_id: \"7463798839258909963\"\n                        - effect_id: \"7330581892510649636\"\n                          has_params: true\n                          is_vip: true\n                          name: 鲜美\n                          resource_id: \"7330581892510649636\"\n                        - effect_id: \"7497157143502654732\"\n                          has_params: true\n                          is_vip: true\n                          name: 鲜艳增色\n                          resource_id: \"7497157143502654732\"\n                        - effect_id: \"7494505446158503179\"\n                          has_params: true\n                          is_vip: true\n                          name: 鲜花增彩\n                          resource_id: \"7494505446158503179\"\n                        - effect_id: \"7493083101426453796\"\n                          has_params: true\n                          is_vip: true\n                          name: 鲜花增色\n                          resource_id: \"7493083101426453796\"\n                        - effect_id: \"7493457725431631142\"\n                          has_params: true\n                          is_vip: true\n                          name: 鲜花增艳\n                          resource_id: \"7493457725431631142\"\n                        - effect_id: \"7308714123913612607\"\n                          has_params: false\n                          is_vip: true\n                          name: 鹅冠\n                          resource_id: \"7308714123913612607\"\n                        - effect_id: \"7272330168717430075\"\n                          has_params: false\n                          is_vip: true\n                          name: 黄昏\n                          resource_id: \"7272330168717430075\"\n                        - effect_id: \"7418828782020168999\"\n                          has_params: true\n                          is_vip: true\n                          name: 黄昏时\n                          resource_id: \"7418828782020168999\"\n                        - effect_id: \"7131522303082466597\"\n                          has_params: false\n                          is_vip: true\n                          name: 黑冰\n                          resource_id: \"7131522303082466597\"\n                        - effect_id: \"7408496787398446362\"\n                          has_params: false\n                          is_vip: true\n                          name: 黑暗神话\n                          resource_id: \"7408496787398446362\"\n                        - effect_id: \"7223712396769119545\"\n                          has_params: false\n                          is_vip: true\n                          name: 黑曜\n                          resource_id: \"7223712396769119545\"\n                        - effect_id: \"7414902721733479699\"\n                          has_params: true\n                          is_vip: true\n                          name: 黑金\n                          resource_id: \"7414902721733479699\"\n                        - effect_id: \"7341266486536768831\"\n                          has_params: true\n                          is_vip: true\n                          name: 黑金红\n                          resource_id: \"7341266486536768831\"\n                        - effect_id: \"7252674245396942139\"\n                          has_params: false\n                          is_vip: true\n                          name: 龙舌兰\n                          resource_id: \"7252674245396942139\"\n        get_image_animations:\n            value:\n                ReqExample:\n                    mode: 0\n                    type: in\n                RespExample:\n                    effects:\n                        - category_id: pic_ruchang\n                          category_name: 图片入场\n                          duration: 600000\n                          icon_url: https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/fade_in_pic_icon\n                          id: \"35395179\"\n                          material_type: sticker\n                          name: 渐显出现\n                          panel: \"\"\n                          path: \"\"\n                          platform: all\n                          request_id: \"\"\n                          resource_id: \"7314291622525538844\"\n                          start: 0\n                          type: in\n                        - category_id: pic_ruchang\n                          category_name: 图片入场\n                          duration: 800000\n                          icon_url: https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/scale_in_pic_icon\n                          id: \"77035160\"\n                          material_type: sticker\n                          name: 缩放入场\n                          panel: \"\"\n                          path: \"\"\n                          platform: all\n                          request_id: \"\"\n                          resource_id: \"7397306443147252234\"\n                          start: 0\n                          type: in\n                        - category_id: pic_ruchang\n                          category_name: 图片入场\n                          duration: 700000\n                          icon_url: https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/fly_in_pic_icon\n                          id: \"12345679\"\n                          material_type: sticker\n                          name: 飞入效果\n                          panel: \"\"\n                          path: \"\"\n                          platform: all\n                          request_id: \"\"\n                          resource_id: \"7298765432109876544\"\n                          start: 0\n                          type: in\n                        - category_id: pic_ruchang\n                          category_name: 图片入场\n                          duration: 900000\n                          icon_url: https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/light_emerge_pic_icon\n                          id: \"98765432\"\n                          material_type: sticker\n                          name: 光影浮现\n                          panel: \"\"\n                          path: \"\"\n                          platform: all\n                          request_id: \"\"\n                          resource_id: \"7456789012345678901\"\n                          start: 0\n                          type: in\n        get_text_animations:\n            value:\n                ReqExample:\n                    mode: 0\n                    type: in\n                RespExample:\n                    effects:\n                        - category_id: ruchang\n                          category_name: 入场\n                          duration: 500000\n                          icon_url: https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/459c196951cadbd024456a63db89481f\n                          id: \"35395178\"\n                          material_type: sticker\n                          name: 冰雪飘动\n                          panel: \"\"\n                          path: \"\"\n                          platform: all\n                          request_id: \"\"\n                          resource_id: \"7314291622525538843\"\n                          start: 0\n                          type: in\n                        - category_id: ruchang\n                          category_name: 入场\n                          duration: 500000\n                          icon_url: https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/c15f5c313f8170c558043abf300a0692\n                          id: \"77035159\"\n                          material_type: sticker\n                          name: 变色输入\n                          panel: \"\"\n                          path: \"\"\n                          platform: all\n                          request_id: \"\"\n                          resource_id: \"7397306443147252233\"\n                          start: 0\n                          type: in\n                        - category_id: ruchang\n                          category_name: 入场\n                          duration: 750000\n                          icon_url: https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/fade_in_icon\n                          id: \"12345678\"\n                          material_type: sticker\n                          name: 渐显入场\n                          panel: \"\"\n                          path: \"\"\n                          platform: all\n                          request_id: \"\"\n                          resource_id: \"7298765432109876543\"\n                          start: 0\n                          type: in\n        get_url:\n            value:\n                ReqExample:\n                    output: 中国人https://assets.jcaigc.cn/test1.mp3\n                RespExample:\n                    output: 中国人https://assets.jcaigc.cn/test1.mp3\n        imgs_infos:\n            value:\n                ReqExample:\n                    height: 1024\n                    imgs:\n                        - https://assets.jcaigc.cn/demo.png\n                        - https://assets.jcaigc.cn/demo1.png\n                    timelines:\n                        - end: 284891428\n                          start: 0\n                        - end: 579578774\n                          start: 284891428\n                    width: 1024\n                RespExample:\n                    infos: '[{\"image_url\": \"https://assets.jcaigc.cn/demo.png\", \"start\": 0, \"end\": 284891428, \"height\": 1024, \"width\": 1024}, {\"image_url\": \"https://assets.jcaigc.cn/demo1.png\", \"start\": 284891428, \"end\": 579578774, \"height\": 1024, \"width\": 1024}]'\n        keyframes_infos:\n            value:\n                ReqExample:\n                    ctype: KFTypePositionX\n                    height: 1080\n                    offsets: 0|100\n                    segment_infos:\n                        - end: 5000000\n                          id: c1369c795ca64fe38bac1f2a93e8a811\n                          start: 0\n                    values: 1|2\n                    width: 1920\n                RespExample:\n                    keyframes_infos: '[{\"offset\": 0, \"property\": \"KFTypePositionX\", \"segment_id\": \"c1369c795ca64fe38bac1f2a93e8a811\", \"value\": 0.0005208333333333333}, {\"offset\": 5000000, \"property\": \"KFTypePositionX\", \"segment_id\": \"c1369c795ca64fe38bac1f2a93e8a811\", \"value\": 0.0010416666666666667}]'\n        objs_to_str_list:\n            value:\n                ReqExample:\n                    outputs:\n                        - output: https://assets.jcaigc.cn/max.mp4\n                        - output: https://assets.jcaigc.cn/min.mp4\n                RespExample:\n                    infos:\n                        - https://assets.jcaigc.cn/max.mp4\n                        - https://assets.jcaigc.cn/min.mp4\n        save_draft:\n            value:\n                ReqExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=20251126220753b7e35362\n                RespExample:\n                    draft_url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=20251126220753b7e35362\n                    message: 成功\n        search_sticker:\n            value:\n                ReqExample:\n                    keyword: 人\n                RespExample:\n                    data:\n                        - sticker:\n                            large_image:\n                                image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/91ada02f8fec440798fbce5b6c8052f4~tplv-3jr8j4ixpe-image.image?x-expires=1797257777&x-signature=JGLXAdKzUC1SNFOG1DBIj7deSm0%3D\n                            preview_cover: \"\"\n                            sticker_package:\n                                height_per_frame: 128\n                                size: 2233\n                                width_per_frame: 128\n                            sticker_type: 1\n                            track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/91ada02f8fec440798fbce5b6c8052f4~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=OlE4ZjEFzZ0%2BZE2hx984dtqX1JY%3D&format=.png\n                          sticker_id: \"7128787497496120613\"\n                          title: '人物剪影 '\n                        - sticker:\n                            large_image:\n                                image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/dde1931edf4e4026b24b52bdf83cdcc0~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=C69yhUjUgvAfbKC%2B3lnqRj4d4Mo%3D\n                            preview_cover: \"\"\n                            sticker_package:\n                                height_per_frame: 512\n                                size: 34542\n                                width_per_frame: 512\n                            sticker_type: 1\n                            track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/dde1931edf4e4026b24b52bdf83cdcc0~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=4zY6CNDljdwTfxWGCcNdI7VX54U%3D&format=.png\n                          sticker_id: \"7075169384330726663\"\n                          title: 男性卡通手绘人物\n                        - sticker:\n                            large_image:\n                                image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/edbd487bfbe347b49183ac297dece704~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=w%2FYtiqgjYd89ZRiBz0CmlhPaYWg%3D\n                            preview_cover: \"\"\n                            sticker_package:\n                                height_per_frame: 452\n                                size: 172903\n                                width_per_frame: 256\n                            sticker_type: 1\n                            track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/edbd487bfbe347b49183ac297dece704~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=GAb5g%2B0hERhVIOqy9HG%2BGzvBR2E%3D&format=.png\n                          sticker_id: \"7141375321454021922\"\n                          title: 3d 人物\n                        - sticker:\n                            large_image:\n                                image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/e42cb5d3d37146738d2b9b714c9a0ce3~tplv-3jr8j4ixpe-resize:1920:1920.gif?x-expires=1797257777&x-signature=5%2BKU1MAEkt4E6uRzqBiqpG6GPKw%3D\n                            preview_cover: \"\"\n                            sticker_package:\n                                height_per_frame: 280\n                                size: 122700\n                                width_per_frame: 280\n                            sticker_type: 2\n                            track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/e42cb5d3d37146738d2b9b714c9a0ce3~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=uF1QWPpgsM62Jc%2BgIpKFkH0PwwM%3D&format=.png\n                          sticker_id: \"7002854862090210590\"\n                          title: 人挤人\n                        - sticker:\n                            large_image:\n                                image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/d05c664aceba49d2896660562ae5fe4d~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=dTV36p4iN055SxRvTcovbiq9QEs%3D\n                            preview_cover: \"\"\n                            sticker_package:\n                                height_per_frame: 490\n                                size: 126967\n                                width_per_frame: 463\n                            sticker_type: 1\n                            track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/d05c664aceba49d2896660562ae5fe4d~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=jmY7LUydyEJr9vVpGFBPQFhYp7Y%3D&format=.png\n                          sticker_id: \"6989061706173500703\"\n                          title: 人物背影\n                        - sticker:\n                            large_image:\n                                image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/adff9a9ac6b14db291eb1da1964b140f~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=ISDIKQ6grSn9cyZW0TFq%2BF86y5M%3D\n                            preview_cover: \"\"\n                            sticker_package:\n                                height_per_frame: 419\n                                size: 91220\n                                width_per_frame: 540\n                            sticker_type: 1\n                            track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/adff9a9ac6b14db291eb1da1964b140f~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=OQokcDqdpZrfjbbJ5I2miMz9vF8%3D&format=.png\n                          sticker_id: \"6972844711287524621\"\n                          title: 商务人物工作会议人员扁平化职场 (28)\n                        - sticker:\n                            large_image:\n                                image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/656e900a0bb6415db5199c58e8148b55~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=MLWZQjACxbpcUkQyznGMzpyHn9I%3D\n                            preview_cover: \"\"\n                            sticker_package:\n                                height_per_frame: 512\n                                size: 33884\n                                width_per_frame: 512\n                            sticker_type: 1\n                            track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/656e900a0bb6415db5199c58e8148b55~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=\n                          sticker_id: \"6972844711287524622\"\n                          title: 商务人物工作会议人员扁平化职场 (29)\n                        - sticker:\n                            large_image:\n                                image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/4f77f60ad9924712baa4e32d534e342c~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797258668&x-signature=Co7%2B81Xhn880nPNA7UBRlI2UPyE%3D\n                            preview_cover: \"\"\n                            sticker_package:\n                                height_per_frame: 540\n                                size: 104066\n                                width_per_frame: 540\n                            sticker_type: 1\n                            track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/4f77f60ad9924712baa4e32d534e342c~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797258668&x-signature=V7SlC36041lGmBHWsvY3lYgEuRk%3D&format=.png\n                          sticker_id: \"7243670138606718265\"\n                          title: 人气爆款标签\n                    message: 成功\n        str_list_to_objs:\n            value:\n                ReqExample:\n                    infos:\n                        - https://assets.jcaigc.cn/min.mp4\n                        - https://assets.jcaigc.cn/max.mp4\n                RespExample:\n                    infos:\n                        - output: https://assets.jcaigc.cn/min.mp4\n                        - output: https://assets.jcaigc.cn/max.mp4\n        str_to_list:\n            value:\n                ReqExample:\n                    obj: '{   \"infos\": [     \"https://assets.jcaigc.cn/min.mp4\",     \"https://assets.jcaigc.cn/max.mp4\"   ] }'\n                RespExample:\n                    infos:\n                        - '{   \"infos\": [     \"https://assets.jcaigc.cn/min.mp4\",     \"https://assets.jcaigc.cn/max.mp4\"   ] }'\n        timelines:\n            value:\n                ReqExample:\n                    duration: 10000000\n                    num: 2\n                    start: 0\n                    type: 0\n                RespExample:\n                    all_timelines:\n                        - end: 10000000\n                          start: 0\n                    timelines:\n                        - end: 5000000\n                          start: 0\n                        - end: 10000000\n                          start: 5000000\n        video_infos:\n            value:\n                ReqExample:\n                    height: \"1080\"\n                    mask: 爱心\n                    timelines:\n                        - end: 284891428\n                          start: 0\n                        - end: 579578774\n                          start: 284891428\n                    transition: 推近\n                    transition_duration: 1\n                    video_urls:\n                        - https://assets.jcaigc.cn/min.mp4\n                        - https://assets.jcaigc.cn/max.mp4\n                    volume: 1\n                    width: 1920\n                RespExample:\n                    infos: '[{\"video_url\": \"https://assets.jcaigc.cn/min.mp4\", \"start\": 0, \"end\": 284891428, \"duration\": 284891428, \"width\": 1920, \"height\": 1080, \"mask\": \"爱心\", \"transition\": \"推近\", \"transition_duration\": 1, \"volume\": 1.0}, {\"video_url\": \"https://assets.jcaigc.cn/max.mp4\", \"start\": 284891428, \"end\": 579578774, \"duration\": 294687346, \"width\": 1920, \"height\": 1080, \"mask\": \"爱心\", \"transition\": \"推近\", \"transition_duration\": 1, \"volume\": 1.0}]'\ninfo:\n    description: 剪映小助手一个开源且免费的剪映插件，兼容剪映V5.9及以上所有版本。\n    title: 开源剪映小助手\n    version: v1\nopenapi: 3.0.1\npaths:\n    /add_audios:\n        post:\n            operationId: add_audios\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                audio_infos:\n                                    description: '音频信息，示例：[{\"audio_url\": \"http://example.com/audio1.mp3\",\"duration\":120,\"start\":0,\"end\":12000000,\"audio_effect\":\"教堂\"}]'\n                                    type: string\n                                draft_url:\n                                    description: 草稿地址，使用create_draft输出的draft_url即可\n                                    type: string\n                            required:\n                                - draft_url\n                                - audio_infos\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    audio_ids:\n                                        items:\n                                            type: string\n                                        type: array\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    draft_url:\n                                        type: string\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                    track_id:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 批量添加音频\n    /add_captions:\n        post:\n            operationId: add_captions\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                alignment:\n                                    default: 1\n                                    description: 文本对齐方式（0-5）\n                                    type: integer\n                                alpha:\n                                    default: 1\n                                    description: 文本透明度（0.0-1.0）\n                                    type: number\n                                bold:\n                                    default: false\n                                    description: 文本加粗开关\n                                    type: boolean\n                                border_color:\n                                    description: 边框颜色（十六进制）\n                                    type: string\n                                captions:\n                                    description: JSON字符串格式的字幕信息数组\n                                    type: string\n                                draft_url:\n                                    description: 剪映草稿URL\n                                    type: string\n                                font:\n                                    description: 字体名称\n                                    type: string\n                                font_size:\n                                    default: 15\n                                    description: 字体大小\n                                    type: integer\n                                has_shadow:\n                                    default: false\n                                    description: '文本阴影开关（true为打开，false为关闭），如果打开了，但没有填shadow_info，默认就是{ \"shadow_color\": \"#000000\", \"shadow_alpha\": 0.9, \"shadow_diffuse\": 15, \"shadow_distance\": 5, \"shadow_angle\", -45 }'\n                                    type: boolean\n                                italic:\n                                    default: false\n                                    description: 文本斜线开关(true为打开，false为关闭)，默认关闭\n                                    type: boolean\n                                letter_spacing:\n                                    default: 0\n                                    description: 字间距\n                                    type: number\n                                line_spacing:\n                                    default: 0\n                                    description: 行间距\n                                    type: number\n                                scale_x:\n                                    default: 1\n                                    description: 水平缩放\n                                    type: number\n                                scale_y:\n                                    default: 1\n                                    description: 垂直缩放\n                                    type: number\n                                shadow_info:\n                                    description: 文本阴影\n                                    properties:\n                                        shadow_alpha:\n                                            description: 阴影不透明度, 取值范围为[0, 1]\n                                            type: number\n                                        shadow_angle:\n                                            description: 阴影角度, 取值范围为[-180, 180]\n                                            type: number\n                                        shadow_color:\n                                            description: 阴影颜色（十六进制）\n                                            type: string\n                                        shadow_diffuse:\n                                            description: 阴影扩散程度, 取值范围为[0, 100]\n                                            type: number\n                                        shadow_distance:\n                                            description: 阴影距离, 取值范围为[0, 100]\n                                            type: number\n                                    type: object\n                                style_text:\n                                    default: 0\n                                    description: 是否使用样式文本\n                                    type: integer\n                                text_color:\n                                    default: '#ffffff'\n                                    description: 文本颜色（十六进制）\n                                    type: string\n                                text_effect:\n                                    description: 文本花字\n                                    type: string\n                                transform_x:\n                                    default: 0\n                                    description: 水平位移\n                                    type: number\n                                transform_y:\n                                    default: 0\n                                    description: 垂直位移\n                                    type: number\n                                underline:\n                                    default: false\n                                    description: 文本下划线开关(true为打开，false为关闭)\n                                    type: boolean\n                            required:\n                                - draft_url\n                                - captions\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    draft_url:\n                                        type: string\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                    segment_ids:\n                                        items:\n                                            type: string\n                                        type: array\n                                    segment_infos:\n                                        items:\n                                            properties:\n                                                end:\n                                                    type: number\n                                                id:\n                                                    type: string\n                                                start:\n                                                    type: number\n                                            type: object\n                                        type: array\n                                    text_ids:\n                                        items:\n                                            type: string\n                                        type: array\n                                    track_id:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 批量添加字幕\n    /add_effects:\n        post:\n            operationId: add_effects\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                draft_url:\n                                    description: 草稿地址，使用create_draft输出的draft_url即可\n                                    type: string\n                                effect_infos:\n                                    description: 特效数组内容，eg:[{\"effect_title\":\"金粉闪闪\",\"end\":5000000,\"start\":0}]\n                                    type: string\n                            required:\n                                - draft_url\n                                - effect_infos\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    draft_url:\n                                        type: string\n                                    effect_ids:\n                                        items:\n                                            type: string\n                                        type: array\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                    segment_ids:\n                                        items:\n                                            type: string\n                                        type: array\n                                    track_id:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 添加特效\n    /add_filters:\n        post:\n            operationId: add_filters\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                draft_url:\n                                    description: 草稿地址\n                                    type: string\n                                filter_infos:\n                                    description: '滤镜信息，示例：[{\"filter_title\": \"清透感\", \"start\": 0, \"end\": 5000000, \"intensity\": 100.0}]'\n                                    type: string\n                            required:\n                                - draft_url\n                                - filter_infos\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    draft_url:\n                                        type: string\n                                    filter_ids:\n                                        items:\n                                            type: string\n                                        type: array\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                    segment_ids:\n                                        items:\n                                            type: string\n                                        type: array\n                                    track_id:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 批量添加滤镜。\n    /add_images:\n        post:\n            operationId: add_images\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                alpha:\n                                    default: 1\n                                    description: 图片透明度，值0-1\n                                    type: number\n                                draft_url:\n                                    description: 草稿地址，使用create_draft输出的draft_url即可\n                                    type: string\n                                image_infos:\n                                    description: \"图片信息，示例：[ \\t{ \\t\\t\\\"image_url\\\":\\\"https://assets.jcaigc.cn/demo.png\\\", // 图片URL \\t\\t\\\"width\\\":1920, // 宽 \\t\\t\\\"height\\\":1080, // 高 \\t\\t\\\"start\\\":0, // 开始时间，单位：毫秒 \\t\\t\\\"end\\\":5000000,// 结束时间，单位：毫秒 \\t\\t\\\"duration\\\":5000000, // 时长 \\t\\t\\\"animation\\\":\\\"淡入淡出\\\", // 动画 \\t\\t\\\"transition\\\":\\\"溶解\\\",   // 转场 \\t\\t\\\"transition_duration\\\":500000 // 转场时间 \\t} \"\n                                    type: string\n                                scale_x:\n                                    default: 1\n                                    description: x缩放\n                                    type: number\n                                scale_y:\n                                    default: 1\n                                    description: y缩放\n                                    type: number\n                                transform_x:\n                                    default: 0\n                                    description: 移动transform_x\n                                    type: number\n                                transform_y:\n                                    default: 0\n                                    description: 移动transform_y\n                                    type: number\n                            required:\n                                - draft_url\n                                - image_infos\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    draft_url:\n                                        type: string\n                                    image_ids:\n                                        items:\n                                            type: string\n                                        type: array\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                    segment_ids:\n                                        items:\n                                            type: string\n                                        type: array\n                                    segment_infos:\n                                        items:\n                                            properties:\n                                                end:\n                                                    type: number\n                                                id:\n                                                    type: string\n                                                start:\n                                                    type: number\n                                            type: object\n                                        type: array\n                                    track_id:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 批量添加图片\n    /add_keyframes:\n        post:\n            operationId: add_keyframes\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                draft_url:\n                                    description: 草稿地址，使用create_draft输出的draft_url即可\n                                    type: string\n                                keyframes:\n                                    description: '关键帧数据，格式： [ { \"offset\": 5000000, \"property\": \"KFTypePositionX\", \"segment_id\": \"acc5b516-046b-4eae-a179-f686f35e70a8\", \"value\": 0 } ]'\n                                    type: string\n                            required:\n                                - draft_url\n                                - keyframes\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    affected_segments:\n                                        items:\n                                            type: string\n                                        type: array\n                                        x-global-disable: true\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    draft_url:\n                                        type: string\n                                    keyframes_added:\n                                        type: number\n                                        x-global-disable: true\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 添加关键帧\n    /add_masks:\n        post:\n            operationId: add_masks\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                X:\n                                    description: 对应剪映的X位置\n                                    type: integer\n                                \"Y\":\n                                    description: 对应剪映的Y位置\n                                    type: integer\n                                draft_url:\n                                    description: 草稿地址，使用create_draft输出的draft_url即可\n                                    type: string\n                                feather:\n                                    description: 羽化0-100\n                                    type: integer\n                                height:\n                                    description: 对应剪映的宽高\n                                    type: integer\n                                invert:\n                                    description: 是否反转\n                                    type: boolean\n                                name:\n                                    description: 蒙板类型：线性/镜面/圆形/矩形/爱心/星形\n                                    type: string\n                                rotation:\n                                    description: 旋转角度0-360\n                                    type: integer\n                                roundCorner:\n                                    description: 矩形的圆角\n                                    type: integer\n                                segment_ids:\n                                    description: add_videos或者add_images的返回值\n                                    items:\n                                        description: 片段id\n                                        type: string\n                                    type: array\n                                width:\n                                    description: 对应剪映的宽高\n                                    type: integer\n                            required:\n                                - draft_url\n                                - segment_ids\n                                - name\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    affected_segments:\n                                        items:\n                                            type: string\n                                        type: array\n                                        x-global-disable: true\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    draft_url:\n                                        type: string\n                                    mask_ids:\n                                        items:\n                                            type: string\n                                        type: array\n                                        x-global-disable: true\n                                    masks_added:\n                                        type: number\n                                        x-global-disable: true\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 增加蒙版\n    /add_sticker:\n        post:\n            operationId: add_sticker\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                draft_url:\n                                    description: 目标草稿的完整URL\n                                    type: string\n                                end:\n                                    description: 贴纸结束时间（微秒）\n                                    type: integer\n                                scale:\n                                    default: 1\n                                    description: 贴纸缩放比例\n                                    type: number\n                                start:\n                                    description: 贴纸开始时间（微秒）\n                                    type: integer\n                                sticker_id:\n                                    description: 贴纸的唯一标识ID\n                                    type: string\n                                transform_x:\n                                    default: 0\n                                    description: X轴位置偏移（像素）\n                                    type: integer\n                                transform_y:\n                                    default: 0\n                                    description: Y轴位置偏移（像素）\n                                    type: integer\n                            required:\n                                - draft_url\n                                - end\n                                - start\n                                - sticker_id\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    draft_url:\n                                        type: string\n                                    duration:\n                                        type: number\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                    segment_id:\n                                        type: string\n                                    sticker_id:\n                                        type: string\n                                    track_id:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: '添加贴纸，批处理时，并发要设置成1 '\n    /add_text_style:\n        post:\n            operationId: add_text_style\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                font_size:\n                                    default: 15\n                                    description: 普通文本的字体大小\n                                    type: integer\n                                keyword:\n                                    description: 关键词，多个用 | 分隔\n                                    type: string\n                                keyword_color:\n                                    default: '#ff7100'\n                                    description: 关键词文本颜色（十六进制）\n                                    type: string\n                                keyword_font_size:\n                                    default: 15\n                                    description: 关键词字体大小\n                                    type: integer\n                                text:\n                                    description: 要处理的文本内容\n                                    type: string\n                            required:\n                                - keyword\n                                - text\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                    text_style:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 创建文本富文本样式\n    /add_videos:\n        post:\n            operationId: add_videos\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                alpha:\n                                    default: 1\n                                    description: 透明度：0-1 ，默认1\n                                    type: number\n                                draft_url:\n                                    description: 草稿地址，使用create_draft输出的draft_url即可\n                                    type: string\n                                scale_x:\n                                    default: 1\n                                    description: 剪映scale_x 缩放\n                                    type: number\n                                scale_y:\n                                    default: 1\n                                    description: 剪映scale_y 缩放\n                                    type: number\n                                scene_timelines:\n                                    description: '分镜时间线，自动变速，例如：[{start: 0, end: 6000000}]'\n                                    items:\n                                        description: 分镜时间线\n                                        properties:\n                                            curve_speed:\n                                                description: 曲线变速参数\n                                                type: string\n                                            end:\n                                                description: 结束时间线\n                                                type: integer\n                                            start:\n                                                description: 开始时间线\n                                                type: integer\n                                        type: object\n                                    type: array\n                                transform_x:\n                                    default: 0\n                                    description: 剪映x位置\n                                    type: number\n                                transform_y:\n                                    default: 0\n                                    description: 剪映y位置\n                                    type: number\n                                video_infos:\n                                    description: '[ { \"video_url\": \"https://example.com/video1.mp4\", \"duration\": 12000000, // 视频时长，以秒*1000000为单位 \"width\": 1920, // 视频宽度 \"height\": 1080, // 视频高度 \"start\": 0, // 视频在时间轴上的开始时间 \"end\": 12000000 // 视频在时间轴上的结束时间 } ]'\n                                    type: string\n                            required:\n                                - draft_url\n                                - video_infos\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    draft_url:\n                                        type: string\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                    segment_ids:\n                                        items:\n                                            type: string\n                                        type: array\n                                    track_id:\n                                        type: string\n                                    video_ids:\n                                        items:\n                                            type: string\n                                        type: array\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 批量添加视频\n    /audio_infos:\n        post:\n            operationId: audio_infos\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                audio_effect:\n                                    description: 特效音，eg：教堂，默认无\n                                    type: string\n                                mp3_urls:\n                                    description: 音频列表\n                                    items:\n                                        description: 音频连接地址\n                                        type: string\n                                    type: array\n                                timelines:\n                                    description: 时间线\n                                    items:\n                                        description: 时间线对象\n                                        properties:\n                                            end:\n                                                description: 结束时间\n                                                type: integer\n                                            start:\n                                                description: 开始时间\n                                                type: integer\n                                        required:\n                                            - start\n                                            - end\n                                        type: object\n                                    type: array\n                                volume:\n                                    description: 音量大小，0-10,默认1\n                                    type: number\n                            required:\n                                - mp3_urls\n                                - timelines\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    infos:\n                                        type: string\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 根据时间线制作音频数据\n    /audio_timelines:\n        post:\n            operationId: audio_timelines\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                links:\n                                    description: 音频链接列表\n                                    items:\n                                        description: 音频链接\n                                        type: string\n                                    type: array\n                            required:\n                                - links\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    all_timelines:\n                                        items:\n                                            properties:\n                                                end:\n                                                    type: number\n                                                start:\n                                                    type: number\n                                            type: object\n                                        type: array\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                    timelines:\n                                        items:\n                                            properties:\n                                                end:\n                                                    type: number\n                                                start:\n                                                    type: number\n                                            type: object\n                                        type: array\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 从音频列表中获取时间线列表\n    /caption_infos:\n        post:\n            operationId: caption_infos\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                font_size:\n                                    description: 字体大小\n                                    type: integer\n                                in_animation:\n                                    description: 入场动画名称\n                                    type: string\n                                in_animation_duration:\n                                    description: 入场动画时长\n                                    type: integer\n                                keyword_border_color:\n                                    description: 关键边框颜色，示例：#ff0000\n                                    type: string\n                                keyword_color:\n                                    description: 关键词颜色\n                                    type: string\n                                keyword_font_size:\n                                    description: 关键词字大小\n                                    type: integer\n                                keywords:\n                                    description: 文本里面的重点词列表\n                                    items:\n                                        description: 重点词\n                                        type: string\n                                    type: array\n                                loop_animation:\n                                    description: 对应剪映的循环动画名字，多个动画请用英文|分割，比如：扫光|晃动\n                                    type: string\n                                loop_animation_duration:\n                                    description: 循环动画时长\n                                    type: integer\n                                out_animation:\n                                    description: 对应剪映的出场动画名字，多个动画请用英文|分割，比如：消散|闭幕\n                                    type: string\n                                out_animation_duration:\n                                    description: 出场动画时长\n                                    type: integer\n                                texts:\n                                    description: 文本列表\n                                    items:\n                                        description: 文本\n                                        type: string\n                                    type: array\n                                timelines:\n                                    description: 时间节点，只接收结构：[{\"start\":0,\"end\":4612}]，一般从audio_timeline节点的输出获取\n                                    items:\n                                        description: 时间线\n                                        properties:\n                                            end:\n                                                description: 结束时间\n                                                type: integer\n                                            start:\n                                                description: 开始时间\n                                                type: integer\n                                        required:\n                                            - start\n                                            - end\n                                        type: object\n                                    type: array\n                            required:\n                                - texts\n                                - timelines\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    infos:\n                                        type: string\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 根据时间线制作字幕数据\n    /create_draft:\n        post:\n            operationId: create_draft\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                height:\n                                    default: 1920\n                                    description: 高\n                                    type: integer\n                                width:\n                                    default: 1080\n                                    description: 高\n                                    type: integer\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    draft_url:\n                                        type: string\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                    tip_url:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 插件入口-创建草稿\n    /easy_create_material:\n        post:\n            operationId: easy_create_material\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                audio_url:\n                                    description: 音频文件URL，不能为空或\"null\"\n                                    type: string\n                                draft_url:\n                                    description: 目标草稿的完整URL\n                                    type: string\n                                font_size:\n                                    default: 15\n                                    description: 字体大小\n                                    type: integer\n                                img_url:\n                                    description: 图片文件URL\n                                    type: string\n                                text:\n                                    description: 要添加的文字内容\n                                    type: string\n                                text_color:\n                                    default: '#ffffff'\n                                    description: 文字颜色（十六进制格式）\n                                    type: string\n                                text_transform_y:\n                                    default: 0\n                                    description: 文字Y轴位置偏移\n                                    type: integer\n                                video_url:\n                                    description: 视频文件URL\n                                    type: string\n                            required:\n                                - audio_url\n                                - draft_url\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    draft_url:\n                                        type: string\n                                    message:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: |-\n                快速上手，简易创建素材轨道\n                create_draft+easy_create_material即可\n    /effect_infos:\n        post:\n            operationId: effect_infos\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                effects:\n                                    description: 特效名字列表\n                                    items:\n                                        description: 特效名\n                                        type: string\n                                    type: array\n                                timelines:\n                                    description: 时间节点，只接收结构：[{\"start\":0,\"end\":4612}]，一般从audio_timeline节点的输出获取\n                                    items:\n                                        description: 时间线\n                                        properties:\n                                            end:\n                                                description: 结束时间\n                                                type: integer\n                                            start:\n                                                description: 开始时间\n                                                type: integer\n                                        required:\n                                            - start\n                                            - end\n                                        type: object\n                                    type: array\n                            required:\n                                - effects\n                                - timelines\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    infos:\n                                        type: string\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 根据时间线关联特效\n    /filter_infos:\n        post:\n            operationId: filter_infos\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                filters:\n                                    description: 滤镜名称列表，示例：[ \"清透感\" ]\n                                    items:\n                                        description: 滤镜名称，在剪映中查看\n                                        type: string\n                                    type: array\n                                intensities:\n                                    description: 强度列表\n                                    items:\n                                        description: 强度，取值[0, 100]\n                                        type: integer\n                                    type: array\n                                timelines:\n                                    description: 时间线列表\n                                    items:\n                                        description: 时间线\n                                        properties:\n                                            end:\n                                                description: 结束时间\n                                                type: integer\n                                            start:\n                                                description: 开始时间\n                                                type: integer\n                                        required:\n                                            - start\n                                            - end\n                                        type: object\n                                    type: array\n                            required:\n                                - filters\n                                - timelines\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    infos:\n                                        type: string\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 为插件add_filters构造添加滤镜的参数。\n    /gen_video:\n        post:\n            operationId: gen_video\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                apiKey:\n                                    description: 从官网(www.jcaigc.cn)获取\n                                    type: string\n                                draft_url:\n                                    description: 剪映草稿地址\n                                    type: string\n                            required:\n                                - draft_url\n                                - apiKey\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                    message:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 将剪映草稿导出为视频。\n    /gen_video_status:\n        post:\n            operationId: gen_video_status\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                draft_url:\n                                    description: 剪映草稿地址\n                                    type: string\n                            required:\n                                - draft_url\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                    completed_at:\n                                        type: string\n                                    created_at:\n                                        type: string\n                                    draft_url:\n                                        type: string\n                                    error_message:\n                                        type: string\n                                    message:\n                                        type: string\n                                    progress:\n                                        type: number\n                                    started_at:\n                                        type: string\n                                    status:\n                                        type: string\n                                    video_url:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 查询视频导出状态和进度。\n    /get_audio_duration:\n        post:\n            operationId: get_audio_duration\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                mp3_url:\n                                    description: 音频/视频文件URL\n                                    type: string\n                            required:\n                                - mp3_url\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    duration:\n                                        type: integer\n                                    message:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 获取音频/视频文件时长\n    /get_effects:\n        post:\n            operationId: get_effects\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                mode:\n                                    default: 0\n                                    description: 特效模式，0=所有，1=VIP，2=免费，默认值为 0\n                                    type: integer\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    effects:\n                                        items:\n                                            properties:\n                                                effect_id:\n                                                    type: string\n                                                has_params:\n                                                    type: boolean\n                                                icon_url:\n                                                    type: string\n                                                is_vip:\n                                                    type: boolean\n                                                name:\n                                                    type: string\n                                                resource_id:\n                                                    type: string\n                                            type: object\n                                        type: array\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 获取支持的特效列表。\n    /get_filters:\n        post:\n            operationId: get_filters\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                mode:\n                                    default: 0\n                                    description: 滤镜模式，0=所有，1=VIP，2=免费，默认值为 0\n                                    type: integer\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    filters:\n                                        items:\n                                            properties:\n                                                effect_id:\n                                                    type: string\n                                                has_params:\n                                                    type: boolean\n                                                is_vip:\n                                                    type: boolean\n                                                name:\n                                                    type: string\n                                                resource_id:\n                                                    type: string\n                                            type: object\n                                        type: array\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 获取支持的滤镜列表\n    /get_image_animations:\n        post:\n            operationId: get_image_animations\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                mode:\n                                    default: 0\n                                    description: 默认0 全部 1 vip 2 免费\n                                    type: integer\n                                type:\n                                    default: in\n                                    description: in：入场 ，out：出场，loop：组合\n                                    type: string\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    effects:\n                                        items:\n                                            properties:\n                                                category_id:\n                                                    type: string\n                                                category_name:\n                                                    type: string\n                                                duration:\n                                                    type: number\n                                                icon_url:\n                                                    type: string\n                                                id:\n                                                    type: string\n                                                material_type:\n                                                    type: string\n                                                name:\n                                                    type: string\n                                                panel:\n                                                    type: string\n                                                path:\n                                                    type: string\n                                                platform:\n                                                    type: string\n                                                request_id:\n                                                    type: string\n                                                resource_id:\n                                                    type: string\n                                                start:\n                                                    type: number\n                                                type:\n                                                    type: string\n                                            type: object\n                                        type: array\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 获取图片出入场动画\n    /get_text_animations:\n        post:\n            operationId: get_text_animations\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                mode:\n                                    default: 0\n                                    description: 0：所有，1：VIP， 2：免费\n                                    type: integer\n                                type:\n                                    default: in\n                                    description: in：入场，out：出场，loop：循环\n                                    type: string\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    effects:\n                                        items:\n                                            properties:\n                                                category_id:\n                                                    type: string\n                                                category_name:\n                                                    type: string\n                                                duration:\n                                                    type: number\n                                                icon_url:\n                                                    type: string\n                                                id:\n                                                    type: string\n                                                material_type:\n                                                    type: string\n                                                name:\n                                                    type: string\n                                                panel:\n                                                    type: string\n                                                path:\n                                                    type: string\n                                                platform:\n                                                    type: string\n                                                request_id:\n                                                    type: string\n                                                resource_id:\n                                                    type: string\n                                                start:\n                                                    type: number\n                                                type:\n                                                    type: string\n                                            type: object\n                                        type: array\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 获取文字出入场动画\n    /get_url:\n        post:\n            operationId: get_url\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                output:\n                                    description: 提取内容\n                                    type: string\n                            required:\n                                - output\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                    output:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 提取链接，用于多值返回变成单值返回\n    /imgs_infos:\n        post:\n            operationId: imgs_infos\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                height:\n                                    default: 1024\n                                    description: 图片高\n                                    type: integer\n                                imgs:\n                                    description: 图片列表\n                                    items:\n                                        description: 图片地址\n                                        type: string\n                                    type: array\n                                in_animation:\n                                    description: 对应剪映的入场动画名字 可选，多个动画请用英文|分割，比如：动画1|动画2\n                                    type: string\n                                in_animation_duration:\n                                    description: 对应剪映的入场动画时长 可选\n                                    type: integer\n                                loop_animation:\n                                    description: 对应剪映的组合动画名字 可选，多个动画请用英文|分割，比如：动画1|动画2\n                                    type: string\n                                loop_animation_duration:\n                                    description: ' 组合动画时长'\n                                    type: integer\n                                out_animation:\n                                    description: 对应剪映的出场动画名字。可选，多个动画请用英文|分割，比如：动画1|动画2\n                                    type: string\n                                out_animation_duration:\n                                    description: 对应剪映的出场动画时长 可选\n                                    type: integer\n                                timelines:\n                                    description: 时间节点，只接收结构：[{\"start\":0,\"end\":4612}]，一般从audio_timeline节点的输出获取\n                                    items:\n                                        description: 时间线\n                                        properties:\n                                            end:\n                                                description: 结束时间\n                                                type: integer\n                                            start:\n                                                description: 开始时间\n                                                type: integer\n                                        required:\n                                            - start\n                                            - end\n                                        type: object\n                                    type: array\n                                transition:\n                                    description: 对应剪映的转场动画名字 可选\n                                    type: string\n                                transition_duration:\n                                    description: 对应剪映的转场动画时长 ，范围是500000-2500000 可选\n                                    type: string\n                                width:\n                                    default: 1024\n                                    description: 图片宽\n                                    type: integer\n                            required:\n                                - imgs\n                                - timelines\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    infos:\n                                        type: string\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 根据时间线制作图片数据\n    /keyframes_infos:\n        post:\n            operationId: keyframes_infos\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                ctype:\n                                    description: '关键帧类型： KFTypePositionX: X轴移动，需要提供width参数，值会被除以width进行归一化 KFTypePositionY: Y轴移动，需要提供height参数，值会被除以height进行归一化 KFTypeRotation: 旋转角度，值范围必须在0-360度之间 UNIFORM_SCALE: 均匀缩放，值范围必须在0.01-5之间 KFTypeAlpha: 透明度，值范围必须在0-1之间'\n                                    type: string\n                                height:\n                                    description: 视频高度\n                                    type: integer\n                                offsets:\n                                    description: 需要放置关键帧的位置比例，eg：0|100 这个就是代表在开始和结尾放置，0|50|100代表在开头，中间，结尾放置3个关键帧\n                                    type: string\n                                segment_infos:\n                                    description: 轨道数据，add_images节点输出\n                                    items:\n                                        description: 轨道数据\n                                        properties:\n                                            end:\n                                                description: 结束时间\n                                                type: integer\n                                            id:\n                                                description: 轨道id\n                                                type: string\n                                            start:\n                                                description: 开始时间\n                                                type: integer\n                                        required:\n                                            - id\n                                            - start\n                                            - end\n                                        type: object\n                                    type: array\n                                values:\n                                    description: 对应offsets的值，长度要一致，比如1|2，或者1|2|1\n                                    type: string\n                                width:\n                                    description: 视频宽度\n                                    type: integer\n                            required:\n                                - ctype\n                                - offsets\n                                - segment_infos\n                                - values\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    keyframes_infos:\n                                        type: string\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 关键帧数据生成器\n    /objs_to_str_list:\n        post:\n            operationId: objs_to_str_list\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                outputs:\n                                    description: 数据对象，接收get_outputs节点的输出\n                                    items:\n                                        description: 内容\n                                        properties:\n                                            output:\n                                                description: 内容\n                                                type: string\n                                        required:\n                                            - output\n                                        type: object\n                                    type: array\n                            required:\n                                - outputs\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    infos:\n                                        items:\n                                            type: string\n                                        type: array\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 对象列表转化成字符串列表\n    /save_draft:\n        post:\n            operationId: save_draft\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                draft_url:\n                                    description: 剪映草稿地址，由创建草稿插件create_draft返回。\n                                    type: string\n                            required:\n                                - draft_url\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    draft_url:\n                                        type: string\n                                    message:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 保存剪映草稿\n    /search_sticker:\n        post:\n            operationId: search_sticker\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                keyword:\n                                    description: 关键词\n                                    type: string\n                            required:\n                                - keyword\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    data:\n                                        items:\n                                            properties:\n                                                sticker:\n                                                    properties:\n                                                        large_image:\n                                                            properties:\n                                                                image_url:\n                                                                    type: string\n                                                            type: object\n                                                        preview_cover:\n                                                            type: string\n                                                        sticker_package:\n                                                            properties:\n                                                                height_per_frame:\n                                                                    type: number\n                                                                size:\n                                                                    type: number\n                                                                width_per_frame:\n                                                                    type: number\n                                                            type: object\n                                                        sticker_type:\n                                                            type: number\n                                                        track_thumbnail:\n                                                            type: string\n                                                    type: object\n                                                sticker_id:\n                                                    type: string\n                                                title:\n                                                    type: string\n                                            type: object\n                                        type: array\n                                    message:\n                                        type: string\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 查找贴纸\n    /str_list_to_objs:\n        post:\n            operationId: str_list_to_objs\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                infos:\n                                    description: 列表内容\n                                    items:\n                                        description: 内容\n                                        type: string\n                                    type: array\n                            required:\n                                - infos\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    infos:\n                                        items:\n                                            properties:\n                                                output:\n                                                    type: string\n                                            type: object\n                                        type: array\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 字符串列表转化成对象列表\n    /str_to_list:\n        post:\n            operationId: str_to_list\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                obj:\n                                    description: 对象内容\n                                    type: string\n                            required:\n                                - obj\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    infos:\n                                        items:\n                                            type: string\n                                        type: array\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 字符转列表\n    /timelines:\n        post:\n            operationId: timelines\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                duration:\n                                    description: 总长度，单位微秒，eg：10000000\n                                    type: integer\n                                num:\n                                    description: 时间线上的个数\n                                    type: integer\n                                start:\n                                    default: 0\n                                    description: 默认开始0，如果设置了，就从start开始\n                                    type: integer\n                                type:\n                                    default: 0\n                                    description: 方式，0平均分，1 随机，默认0\n                                    type: integer\n                            required:\n                                - duration\n                                - num\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    all_timelines:\n                                        items:\n                                            properties:\n                                                end:\n                                                    type: number\n                                                start:\n                                                    type: number\n                                            type: object\n                                        type: array\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                    timelines:\n                                        items:\n                                            properties:\n                                                end:\n                                                    type: number\n                                                start:\n                                                    type: number\n                                            type: object\n                                        type: array\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 自定义创建时间线列表\n    /video_infos:\n        post:\n            operationId: video_infos\n            requestBody:\n                content:\n                    application/json:\n                        schema:\n                            properties:\n                                height:\n                                    description: 视频高度\n                                    type: string\n                                mask:\n                                    description: 视频蒙版，可填写值：圆形，矩形，爱心，星形\n                                    type: string\n                                timelines:\n                                    description: 时间节点，只接收结构：[{\"start\":0,\"end\":4612}]，一般从audio_timeline节点的输出获取\n                                    items:\n                                        description: 时间线\n                                        properties:\n                                            end:\n                                                description: 结束时间\n                                                type: integer\n                                            start:\n                                                description: 开始时间\n                                                type: integer\n                                        required:\n                                            - start\n                                            - end\n                                        type: object\n                                    type: array\n                                transition:\n                                    description: 转场\n                                    type: string\n                                transition_duration:\n                                    description: 转场的时长\n                                    type: integer\n                                video_urls:\n                                    description: 视频列表\n                                    items:\n                                        description: 视频链接\n                                        type: string\n                                    type: array\n                                volume:\n                                    description: 音量大小，0-10,默认1\n                                    type: number\n                                width:\n                                    description: 视频宽度\n                                    type: integer\n                            required:\n                                - video_urls\n                                - timelines\n                            type: object\n            responses:\n                \"200\":\n                    content:\n                        application/json:\n                            schema:\n                                properties:\n                                    code:\n                                        type: number\n                                        x-global-disable: true\n                                    infos:\n                                        type: string\n                                    message:\n                                        type: string\n                                        x-global-disable: true\n                                type: object\n                    description: new desc\n                default:\n                    description: \"\"\n            summary: 根据时间线制作视频数据\nservers:\n    - url: https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[project]\nname = \"capcut-mate\"\nversion = \"1.0.0\"\ndescription = \"CapCut Mate API Service\"\nauthors = [\n    { name = \"Hommy\", email = \"taohongmin51@gmail.com\" }\n]\nrequires-python = \">=3.11\"\n\ndependencies = [\n    \"email-validator>=2.2.0\",\n    \"fastapi>=0.100.0\",\n    \"pymediainfo>=7.0.1\",\n    \"requests>=2.32.5\",\n    \"uvicorn[standard]>=0.35.0\",\n    \"cos-python-sdk-v5>=1.9.38\",\n    \"oss2\",\n    \"imageio>=2.37.3\",\n]\n\n[project.optional-dependencies]\ndev = [\n    \"pytest>=7.0.0\",\n]\nwindows = [\n    \"pywin32>=311; sys_platform == 'win32'\",\n    \"pyautogui>=0.9.54; sys_platform == 'win32'\",\n    \"uiautomation>=2.0.29; sys_platform == 'win32'\",\n]\n\n[tool.pytest.ini_options]\ntestpaths = [\"tests\"]\npythonpath = [\".\"]\naddopts = \"-q\"\n"
  },
  {
    "path": "src/__init__.py",
    "content": "\n# 空文件，标识src为Python包\n"
  },
  {
    "path": "src/middlewares/__init__.py",
    "content": "# 中间件实现\nfrom .prepare import PrepareMiddleware\nfrom .response import ResponseMiddleware\nfrom .trace_context import TraceContextMiddleware\n\n__all__ = [\"PrepareMiddleware\", \"ResponseMiddleware\", \"TraceContextMiddleware\"]\n"
  },
  {
    "path": "src/middlewares/prepare.py",
    "content": "# 环境初始化中间件\nfrom fastapi import Request\nfrom starlette.middleware.base import BaseHTTPMiddleware\nimport config\nimport os\n\n\nclass PrepareMiddleware(BaseHTTPMiddleware):\n    \"\"\"请求前的准备工作中间件\n    功能：\n    1. 创建临时目录\n    2. 创建输出目录\n    \"\"\"\n\n    async def dispatch(self, request: Request, call_next):\n        # 递归创建目录，如果目录存在，就直接跳过创建\n        os.makedirs(config.DRAFT_DIR, exist_ok=True)\n        os.makedirs(config.TEMP_DIR, exist_ok=True)\n\n        # 继续处理请求\n        response = await call_next(request)\n        return response"
  },
  {
    "path": "src/middlewares/response.py",
    "content": "from fastapi import Request\nfrom fastapi.responses import JSONResponse\nfrom exceptions import CustomError, CustomException\nfrom starlette.middleware.base import BaseHTTPMiddleware\nfrom src.utils.logger import logger\nimport json\n\n\nclass ResponseMiddleware(BaseHTTPMiddleware):\n    \"\"\"统一响应处理中间件\n    功能：\n    1. 统一处理业务正常响应，添加code和message字段\n    2. 统一处理异常，返回标准错误格式\n    \"\"\"\n\n    async def dispatch(self, request: Request, call_next):\n        # 提前初始化 lang 变量，确保在异常处理中可用\n        lang = 'zh'  # 默认语言\n        \n        try:\n            lang = self._get_language_from_request(request)\n            response = await call_next(request)\n\n            # 处理非200状态码的响应\n            if response.status_code != 200:\n                return await self._handle_non_200_response(response, lang)\n                \n            # 处理JSON响应\n            if self._is_json_response(response):\n                return await self._process_json_response(response, lang)\n                \n            return response\n            \n        except CustomException as e:\n            return self._handle_custom_exception(e, lang)\n        except Exception as e:\n            return self._handle_generic_exception(e, lang)\n\n    def _get_language_from_request(self, request: Request) -> str:\n        \"\"\"从请求头获取语言偏好\"\"\"\n        try:\n            # 安全地解析 Accept-Language 头\n            accept_lang = request.headers.get('Accept-Language', 'zh')\n            if not accept_lang or not accept_lang.strip():\n                return 'zh'\n            \n            # 先按逗号分割，取第一部分\n            lang_parts = accept_lang.split(',')[0].strip()\n            if not lang_parts:\n                return 'zh'\n            \n            # 再按连字符分割，取语言代码部分\n            lang_code_parts = lang_parts.split('-')\n            if not lang_code_parts or not lang_code_parts[0]:\n                return 'zh'\n            \n            lang = lang_code_parts[0].lower()\n            return lang if lang in ['zh', 'en'] else 'zh'\n            \n        except Exception:\n            # 如果解析过程中出现任何异常，返回默认语言\n            return 'zh'\n    \n    def _handle_422_error(self, body_str: str, lang: str) -> JSONResponse:\n        \"\"\"特殊处理422参数验证错误\"\"\"\n        try:\n            # 尝试解析422错误的响应体\n            error_data = json.loads(body_str)\n            \n            # 提取验证错误的详细信息\n            validation_messages = []\n            if \"detail\" in error_data:\n                for error in error_data[\"detail\"]:\n                    if \"loc\" in error and \"msg\" in error:\n                        # 格式化错误信息\n                        field = \".\".join(str(part) for part in error[\"loc\"] if part != \"body\")\n                        message = f\"{field}: {error['msg']}\"\n                        validation_messages.append(message)\n\n            # 构建统一的422错误响应（不包含data字段）\n            error_message = \"; \".join(validation_messages) if validation_messages else \"\"\n            error_response = CustomError.PARAM_VALIDATION_FAILED.as_dict(detail=error_message, lang=lang)\n            return JSONResponse(status_code=200, content=error_response)\n            \n        except json.JSONDecodeError:\n            logger.warning(f\"Failed to parse 422 response body: {body_str}\")\n            \n            error_response = CustomError.PARAM_VALIDATION_FAILED.as_dict(detail=body_str, lang=lang)\n            return JSONResponse(status_code=200, content=error_response)\n\n    async def _handle_non_200_response(self, response, lang: str) -> JSONResponse:\n        \"\"\"处理非200状态码的响应\"\"\"\n        body = b\"\"\n        async for chunk in response.body_iterator:\n            body += chunk\n        \n        body_str = body.decode()\n\n        # 特殊处理422错误（参数验证错误）\n        if response.status_code == 422:\n            return self._handle_422_error(body_str, lang)\n        \n        # 其它情况不应该发生，每一个错误都应该在前面被处理\n        logger.error(f\"Non-200 response: {response.status_code} - {body_str}\")\n        # 其他非200错误处理\n        error_response = {\n            \"code\": response.status_code,\n            \"message\": f\"HTTP Error {response.status_code}, detail: {body_str}\"\n        }\n        \n        return JSONResponse(status_code=200, content=error_response)\n\n    def _is_json_response(self, response) -> bool:\n        \"\"\"检查是否为JSON响应\"\"\"\n        return response.headers.get('content-type') == 'application/json'\n\n    async def _process_json_response(self, response, lang: str):\n        \"\"\"处理JSON响应并统一格式\"\"\"\n        body = [section async for section in response.body_iterator]\n        if not body:\n            return response\n            \n        body_str = b''.join(body).decode()\n        \n        try:\n            data = json.loads(body_str)\n            \n            # 如果响应已经有统一格式，直接返回\n            if 'code' in data and 'message' in data:\n                return response\n                \n            # 创建统一格式的响应（成功响应保留data字段）\n            unified_response = {\n                'code': CustomError.SUCCESS.code,\n                'message': CustomError.SUCCESS.as_dict(lang=lang)['message'],\n                **data\n            }\n            \n            return JSONResponse(\n                status_code=response.status_code,\n                content=unified_response\n            )\n            \n        except json.JSONDecodeError:\n            logger.warning(f\"JSON decode error: {body_str}\")\n            return response\n\n    def _handle_custom_exception(self, e: CustomException, lang: str) -> JSONResponse:\n        \"\"\"处理自定义异常（不包含data字段）\"\"\"\n        logger.warning(f\"Custom exception: {e.err.code} - {e.err.cn_message}\" + \n                    (f\" ({e.detail})\" if e.detail else \"\"))\n        \n        # 获取错误信息\n        error_response = e.err.as_dict(detail=e.detail, lang=lang)\n        return JSONResponse(status_code=200, content=error_response)\n\n    def _handle_generic_exception(self, e: Exception, lang: str) -> JSONResponse:\n        \"\"\"处理通用异常（不包含data字段）\"\"\"\n        logger.warning(f\"Internal server error: {str(e)}\")\n        \n        # 获取错误信息\n        error_response = CustomError.INTERNAL_SERVER_ERROR.as_dict(detail=str(e), lang=lang)\n        return JSONResponse(status_code=200, content=error_response)"
  },
  {
    "path": "src/middlewares/trace_context.py",
    "content": "\"\"\"为每个 HTTP 请求注入 W3C trace 上下文并写入 contextvars。\"\"\"\nfrom __future__ import annotations\n\nfrom starlette.middleware.base import BaseHTTPMiddleware\nfrom starlette.requests import Request\nfrom starlette.responses import Response\n\nfrom src.utils import trace_context as tc\n\n\nclass TraceContextMiddleware(BaseHTTPMiddleware):\n    \"\"\"\n    最先执行（应注册为最后 add_middleware）：解析/生成 trace_id、span_id，\n    在响应中返回 traceparent 与 X-Request-ID。\n    \"\"\"\n\n    async def dispatch(self, request: Request, call_next) -> Response:\n        def _get(h: str) -> str | None:\n            return request.headers.get(h)\n\n        trace_id, span_id = tc.resolve_trace_from_headers(_get)\n\n        tid_token = tc.trace_id_var.set(trace_id)\n        sid_token = tc.span_id_var.set(span_id)\n        request.state.trace_id = trace_id\n        request.state.span_id = span_id\n        try:\n            response = await call_next(request)\n        finally:\n            tc.trace_id_var.reset(tid_token)\n            tc.span_id_var.reset(sid_token)\n\n        response.headers[\"traceparent\"] = tc.build_traceparent(trace_id, span_id)\n        response.headers[\"X-Request-ID\"] = trace_id\n        return response\n"
  },
  {
    "path": "src/pyJianYingDraft/__init__.py",
    "content": "import warnings\nimport sys\n\nfrom .local_materials import CropSettings, VideoMaterial, AudioMaterial\nfrom .keyframe import KeyframeProperty\n\nfrom .time_util import Timerange\nfrom .audio_segment import AudioSegment\nfrom .video_segment import VideoSegment, StickerSegment, ClipSettings\nfrom .effect_segment import EffectSegment, FilterSegment\nfrom .text_segment import TextSegment, TextStyle, TextBorder, TextBackground, TextShadow\n\nfrom .metadata import FontType\nfrom .metadata import MaskType\nfrom .metadata import TransitionType, FilterType\nfrom .metadata import IntroType, OutroType, GroupAnimationType\nfrom .metadata import TextIntro, TextOutro, TextLoopAnim\nfrom .metadata import AudioSceneEffectType\nfrom .metadata import VideoSceneEffectType, VideoCharacterEffectType\n\nfrom .track import TrackType\nfrom .template_mode import ShrinkMode, ExtendMode\nfrom .script_file import ScriptFile\nfrom .draft_folder import DraftFolder\n\n# 仅在Windows系统下导入jianying_controller\nISWIN = (sys.platform == 'win32')\nif ISWIN:\n    try:\n        from .jianying_controller import JianyingController, ExportResolution, ExportFramerate\n    except ImportError:\n        # 如果缺少Windows依赖，设置为False\n        ISWIN = False\n        JianyingController = None\n        ExportResolution = None  \n        ExportFramerate = None\n\nfrom .time_util import SEC, tim, trange\n\n\ndef _deprecated_class_warning(old_name: str, new_name: str):\n    warnings.warn(\n        f\"{old_name} is deprecated and will be removed in a future version. \"\n        f\"Use {new_name} instead.\",\n        DeprecationWarning,\n        stacklevel=3\n    )\n\n# 保持向后兼容\nclass Script_file:\n    \"\"\"Deprecated: Use ScriptFile instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Script_file\", \"ScriptFile\")\n        return ScriptFile(*args, **kwargs)\n\nclass Draft_folder:\n    \"\"\"Deprecated: Use DraftFolder instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Draft_folder\", \"DraftFolder\")\n        return DraftFolder(*args, **kwargs)\n\nclass Shrink_mode:\n    \"\"\"Deprecated: Use ShrinkMode instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Shrink_mode\", \"ShrinkMode\")\n        return ShrinkMode(*args, **kwargs)\n\nclass Extend_mode:\n    \"\"\"Deprecated: Use ExtendMode instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Extend_mode\", \"ExtendMode\")\n        return ExtendMode(*args, **kwargs)\n\nclass Clip_settings:\n    \"\"\"Deprecated: Use ClipSettings instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Clip_settings\", \"ClipSettings\")\n        return ClipSettings(*args, **kwargs)\n\nclass Text_style:\n    \"\"\"Deprecated: Use TextStyle instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Text_style\", \"TextStyle\")\n        return TextStyle(*args, **kwargs)\n\nclass Text_border:\n    \"\"\"Deprecated: Use TextBorder instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Text_border\", \"TextBorder\")\n        return TextBorder(*args, **kwargs)\n\nclass Text_background:\n    \"\"\"Deprecated: Use TextBackground instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Text_background\", \"TextBackground\")\n        return TextBackground(*args, **kwargs)\n\nclass Text_segment:\n    \"\"\"Deprecated: Use TextSegment instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Text_segment\", \"TextSegment\")\n        return TextSegment(*args, **kwargs)\n\nclass Audio_segment:\n    \"\"\"Deprecated: Use AudioSegment instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Audio_segment\", \"AudioSegment\")\n        return AudioSegment(*args, **kwargs)\n\nclass Video_segment:\n    \"\"\"Deprecated: Use VideoSegment instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Video_segment\", \"VideoSegment\")\n        return VideoSegment(*args, **kwargs)\n\nclass Sticker_segment:\n    \"\"\"Deprecated: Use StickerSegment instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Sticker_segment\", \"StickerSegment\")\n        return StickerSegment(*args, **kwargs)\n\nclass Effect_segment:\n    \"\"\"Deprecated: Use EffectSegment instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Effect_segment\", \"EffectSegment\")\n        return EffectSegment(*args, **kwargs)\n\nclass Filter_segment:\n    \"\"\"Deprecated: Use FilterSegment instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Filter_segment\", \"FilterSegment\")\n        return FilterSegment(*args, **kwargs)\n\nclass Video_material:\n    \"\"\"Deprecated: Use VideoMaterial instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Video_material\", \"VideoMaterial\")\n        return VideoMaterial(*args, **kwargs)\n\nclass Audio_material:\n    \"\"\"Deprecated: Use AudioMaterial instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Audio_material\", \"AudioMaterial\")\n        return AudioMaterial(*args, **kwargs)\n\nclass Crop_settings:\n    \"\"\"Deprecated: Use CropSettings instead.\"\"\"\n    def __new__(cls, *args, **kwargs):\n        _deprecated_class_warning(\"Crop_settings\", \"CropSettings\")\n        return CropSettings(*args, **kwargs)\n\n# 枚举类的向后兼容 - 使用代理类\nclass _DeprecatedEnum:\n    \"\"\"带deprecation警告的枚举代理类\"\"\"\n    def __init__(self, original_enum, old_name, new_name):\n        self._enum = original_enum\n        self._old_name = old_name\n        self._new_name = new_name\n\n    def __getattr__(self, name):\n        # 当访问枚举成员时显示警告\n        _deprecated_class_warning(self._old_name, self._new_name)\n        return getattr(self._enum, name)\n\n    def __getitem__(self, name):\n        # 当通过索引访问时显示警告\n        _deprecated_class_warning(self._old_name, self._new_name)\n        return self._enum[name]\n\n    def __repr__(self):\n        return f\"<Deprecated {self._old_name} (use {self._new_name} instead)>\"\n\nTrack_type = _DeprecatedEnum(TrackType, \"Track_type\", \"TrackType\")\nFont_type = _DeprecatedEnum(FontType, \"Font_type\", \"FontType\")\nMask_type = _DeprecatedEnum(MaskType, \"Mask_type\", \"MaskType\")\nFilter_type = _DeprecatedEnum(FilterType, \"Filter_type\", \"FilterType\")\nTransition_type = _DeprecatedEnum(TransitionType, \"Transition_type\", \"TransitionType\")\nIntro_type = _DeprecatedEnum(IntroType, \"Intro_type\", \"IntroType\")\nOutro_type = _DeprecatedEnum(OutroType, \"Outro_type\", \"OutroType\")\nGroup_animation_type = _DeprecatedEnum(GroupAnimationType, \"Group_animation_type\", \"GroupAnimationType\")\nText_intro = _DeprecatedEnum(TextIntro, \"Text_intro\", \"TextIntro\")\nText_outro = _DeprecatedEnum(TextOutro, \"Text_outro\", \"TextOutro\")\nText_loop_anim = _DeprecatedEnum(TextLoopAnim, \"Text_loop_anim\", \"TextLoopAnim\")\nAudio_scene_effect_type = _DeprecatedEnum(AudioSceneEffectType, \"Audio_scene_effect_type\", \"AudioSceneEffectType\")\nVideo_scene_effect_type = _DeprecatedEnum(VideoSceneEffectType, \"Video_scene_effect_type\", \"VideoSceneEffectType\")\nVideo_character_effect_type = _DeprecatedEnum(VideoCharacterEffectType, \"Video_character_effect_type\", \"VideoCharacterEffectType\")\nKeyframe_property = _DeprecatedEnum(KeyframeProperty, \"Keyframe_property\", \"KeyframeProperty\")\n\n# 仅在Windows系统下定义jianying_controller相关的向后兼容类\nif ISWIN:\n    class Jianying_controller:\n        \"\"\"Deprecated: Use JianyingController instead.\"\"\"\n        def __new__(cls, *args, **kwargs):\n            _deprecated_class_warning(\"Jianying_controller\", \"JianyingController\")\n            return JianyingController(*args, **kwargs)\n\n    Export_resolution = _DeprecatedEnum(ExportResolution, \"Export_resolution\", \"ExportResolution\")\n    Export_framerate = _DeprecatedEnum(ExportFramerate, \"Export_framerate\", \"ExportFramerate\")\n\n# 基础__all__列表（所有平台通用）\n__all__ = [\n    \"FontType\",\n    \"MaskType\",\n    \"FilterType\",\n    \"TransitionType\",\n    \"IntroType\",\n    \"OutroType\",\n    \"GroupAnimationType\",\n    \"TextIntro\",\n    \"TextOutro\",\n    \"TextLoopAnim\",\n    \"AudioSceneEffectType\",\n    \"VideoSceneEffectType\",\n    \"VideoCharacterEffectType\",\n    \"CropSettings\",\n    \"VideoMaterial\",\n    \"AudioMaterial\",\n    \"KeyframeProperty\",\n    \"Timerange\",\n    \"AudioSegment\",\n    \"VideoSegment\",\n    \"StickerSegment\",\n    \"ClipSettings\",\n    \"EffectSegment\",\n    \"FilterSegment\",\n    \"TextSegment\",\n    \"TextStyle\",\n    \"TextBorder\",\n    \"TextBackground\",\n    \"TextShadow\",\n    \"TrackType\",\n    \"ShrinkMode\",\n    \"ExtendMode\",\n    \"ScriptFile\",\n    \"DraftFolder\",\n    \"SEC\",\n    \"tim\",\n    \"trange\",\n\n    # 向后兼容的snake_case类\n    \"Script_file\",\n    \"Draft_folder\",\n    \"Shrink_mode\",\n    \"Extend_mode\",\n    \"Track_type\",\n    \"Font_type\",\n    \"Mask_type\",\n    \"Filter_type\",\n    \"Transition_type\",\n    \"Intro_type\",\n    \"Outro_type\",\n    \"Group_animation_type\",\n    \"Text_intro\",\n    \"Text_outro\",\n    \"Text_loop_anim\",\n    \"Audio_scene_effect_type\",\n    \"Video_scene_effect_type\",\n    \"Video_character_effect_type\",\n    \"Clip_settings\",\n    \"Text_style\",\n    \"Text_border\",\n    \"Text_background\",\n    \"Text_segment\",\n    \"Audio_segment\",\n    \"Video_segment\",\n    \"Sticker_segment\",\n    \"Effect_segment\",\n    \"Filter_segment\",\n    \"Video_material\",\n    \"Audio_material\",\n    \"Crop_settings\",\n    \"Keyframe_property\",\n]\n\n# 仅在Windows系统下添加jianying_controller相关的导出\nif ISWIN:\n    __all__.extend([\n        \"JianyingController\",\n        \"ExportResolution\",\n        \"ExportFramerate\",\n        \"Jianying_controller\",\n        \"Export_resolution\",\n        \"Export_framerate\",\n    ])\n"
  },
  {
    "path": "src/pyJianYingDraft/animation.py",
    "content": "\"\"\"定义视频/文本动画相关类\"\"\"\n\nimport uuid\n\nfrom typing import Union, Optional\nfrom typing import Literal, Dict, List, Any\n\nfrom .time_util import Timerange\n\nfrom .metadata import AnimationMeta\nfrom .metadata import IntroType, OutroType, GroupAnimationType\nfrom .metadata import TextIntro, TextOutro, TextLoopAnim\n\nclass Animation:\n    \"\"\"一个视频/文本动画效果\"\"\"\n\n    name: str\n    \"\"\"动画名称, 默认取为动画效果的名称\"\"\"\n    effect_id: str\n    \"\"\"另一种动画id, 由剪映本身提供\"\"\"\n    animation_type: str\n    \"\"\"动画类型, 在子类中定义\"\"\"\n    resource_id: str\n    \"\"\"资源id, 由剪映本身提供\"\"\"\n\n    start: int\n    \"\"\"动画相对此片段开头的偏移, 单位为微秒\"\"\"\n    duration: int\n    \"\"\"动画持续时间, 单位为微秒\"\"\"\n\n    is_video_animation: bool\n    \"\"\"是否为视频动画, 在子类中定义\"\"\"\n\n    def __init__(self, animation_meta: AnimationMeta, start: int, duration: int):\n        self.name = animation_meta.title\n        self.effect_id = animation_meta.effect_id\n        self.resource_id = animation_meta.resource_id\n\n        self.start = start\n        self.duration = duration\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"anim_adjust_params\": None,\n            \"platform\": \"all\",\n            \"panel\": \"video\" if self.is_video_animation else \"\",\n            \"material_type\": \"video\" if self.is_video_animation else \"sticker\",\n\n            \"name\": self.name,\n            \"id\": self.effect_id,\n            \"type\": self.animation_type,\n            \"resource_id\": self.resource_id,\n\n            \"start\": self.start,\n            \"duration\": self.duration,\n            # 不导出path和request_id\n        }\n\nclass VideoAnimation(Animation):\n    \"\"\"一个视频动画效果\"\"\"\n\n    animation_type: Literal[\"in\", \"out\", \"group\"]\n\n    def __init__(self, animation_type: Union[IntroType, OutroType, GroupAnimationType],\n                 start: int, duration: int):\n        super().__init__(animation_type.value, start, duration)\n\n        if isinstance(animation_type, IntroType):\n            self.animation_type = \"in\"\n        elif isinstance(animation_type, OutroType):\n            self.animation_type = \"out\"\n        elif isinstance(animation_type, GroupAnimationType):\n            self.animation_type = \"group\"\n\n        self.is_video_animation = True\n\nclass Text_animation(Animation):\n    \"\"\"一个文本动画效果\"\"\"\n\n    animation_type: Literal[\"in\", \"out\", \"loop\"]\n\n    def __init__(self, animation_type: Union[TextIntro, TextOutro, TextLoopAnim],\n                 start: int, duration: int):\n        super().__init__(animation_type.value, start, duration)\n\n        if isinstance(animation_type, TextIntro):\n            self.animation_type = \"in\"\n        elif isinstance(animation_type, TextOutro):\n            self.animation_type = \"out\"\n        elif isinstance(animation_type, TextLoopAnim):\n            self.animation_type = \"loop\"\n\n        self.is_video_animation = False\n\nclass SegmentAnimations:\n    \"\"\"附加于某素材上的一系列动画\n\n    对视频片段：入场、出场或组合动画；对文本片段：入场、出场或循环动画\"\"\"\n\n    animation_id: str\n    \"\"\"系列动画的全局id, 自动生成\"\"\"\n\n    animations: List[Animation]\n    \"\"\"动画列表\"\"\"\n\n    def __init__(self):\n        self.animation_id = uuid.uuid4().hex\n        self.animations = []\n\n    def get_animation_trange(self, animation_type: Literal[\"in\", \"out\", \"group\", \"loop\"]) -> Optional[Timerange]:\n        \"\"\"获取指定类型的动画的时间范围\"\"\"\n        for animation in self.animations:\n            if animation.animation_type == animation_type:\n                return Timerange(animation.start, animation.duration)\n        return None\n\n    def add_animation(self, animation: Union[VideoAnimation, Text_animation]) -> None:\n        # 不允许添加超过一个同类型的动画（如两个入场动画）\n        if animation.animation_type in [ani.animation_type for ani in self.animations]:\n            raise ValueError(f\"当前片段已存在类型为 '{animation.animation_type}' 的动画\")\n\n        if isinstance(animation, VideoAnimation):\n            # 不允许组合动画与出入场动画同时出现\n            if any(ani.animation_type == \"group\" for ani in self.animations):\n                raise ValueError(\"当前片段已存在组合动画, 此时不能添加其它动画\")\n            if animation.animation_type == \"group\" and len(self.animations) > 0:\n                raise ValueError(\"当前片段已存在动画时, 不能添加组合动画\")\n        elif isinstance(animation, Text_animation):\n            if any(ani.animation_type == \"loop\" for ani in self.animations):\n                raise ValueError(\"当前片段已存在循环动画, 若希望同时使用循环动画和入出场动画, 请先添加出入场动画再添加循环动画\")\n\n        self.animations.append(animation)\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"id\": self.animation_id,\n            \"type\": \"sticker_animation\",\n            \"multi_language_current\": \"none\",\n            \"animations\": [animation.export_json() for animation in self.animations]\n        }\n"
  },
  {
    "path": "src/pyJianYingDraft/assets/__init__.py",
    "content": "\"\"\"\npyJianYingDraft 的资源管理模块，提供集中管理资源文件的方式，避免硬编码路径\n\"\"\"\n\nfrom pathlib import Path\n\n# 获取当前模块所在目录\nASSETS_DIR = Path(__file__).parent\n\n# 资源文件映射表 - 集中管理所有asset文件名\nASSET_FILES = {\n    # 模板文件\n    'DRAFT_CONTENT_TEMPLATE': 'draft_content_template.json',\n    'DRAFT_META_TEMPLATE': 'draft_meta_info.json',\n}\n\ndef get_asset_path(asset_name: str) -> Path:\n    \"\"\"\n    获取指定资源文件的完整路径\n\n    Args:\n        asset_name: 资源名称（ASSET_FILES中的key）\n\n    Returns:\n        Path: 资源文件的完整路径\n\n    Raises:\n        KeyError: 资源名称不存在\n        FileNotFoundError: 文件不存在\n    \"\"\"\n    if asset_name not in ASSET_FILES:\n        raise KeyError(f\"Asset '{asset_name}' not found. Available assets: {list(ASSET_FILES.keys())}\")\n\n    file_path = ASSETS_DIR / ASSET_FILES[asset_name]\n\n    if not file_path.exists():\n        raise FileNotFoundError(f\"Asset file '{file_path}' does not exist\")\n\n    return file_path\n\n# 导出主要接口\n__all__ = [\n    'get_asset_path',\n    'ASSET_FILES'\n]\n"
  },
  {
    "path": "src/pyJianYingDraft/assets/draft_content_template.json",
    "content": "{\n    \"canvas_config\": {\n        \"height\": 1080,\n        \"ratio\": \"original\",\n        \"width\": 1920\n    },\n    \"color_space\": 0,\n    \"config\": {\n        \"adjust_max_index\": 1,\n        \"attachment_info\": [],\n        \"combination_max_index\": 1,\n        \"export_range\": null,\n        \"extract_audio_last_index\": 1,\n        \"lyrics_recognition_id\": \"\",\n        \"lyrics_sync\": true,\n        \"lyrics_taskinfo\": [],\n        \"maintrack_adsorb\": true,\n        \"material_save_mode\": 0,\n        \"multi_language_current\": \"none\",\n        \"multi_language_list\": [],\n        \"multi_language_main\": \"none\",\n        \"multi_language_mode\": \"none\",\n        \"original_sound_last_index\": 1,\n        \"record_audio_last_index\": 1,\n        \"sticker_max_index\": 1,\n        \"subtitle_keywords_config\": null,\n        \"subtitle_recognition_id\": \"\",\n        \"subtitle_sync\": true,\n        \"subtitle_taskinfo\": [],\n        \"system_font_list\": [],\n        \"video_mute\": false,\n        \"zoom_info_params\": null\n    },\n    \"cover\": null,\n    \"create_time\": 0,\n    \"duration\": 0,\n    \"extra_info\": null,\n    \"fps\": 30.0,\n    \"free_render_index_mode_on\": false,\n    \"group_container\": null,\n    \"id\": \"91E08AC5-22FB-47e2-9AA0-7DC300FAEA2B\",\n    \"keyframe_graph_list\": [],\n    \"keyframes\": {\n        \"adjusts\": [],\n        \"audios\": [],\n        \"effects\": [],\n        \"filters\": [],\n        \"handwrites\": [],\n        \"stickers\": [],\n        \"texts\": [],\n        \"videos\": []\n    },\n    \"last_modified_platform\": {\n        \"app_id\": 3704,\n        \"app_source\": \"lv\",\n        \"app_version\": \"5.9.0\",\n        \"os\": \"windows\"\n    },\n    \"platform\": {\n        \"app_id\": 3704,\n        \"app_source\": \"lv\",\n        \"app_version\": \"5.9.0\",\n        \"os\": \"windows\"\n    },\n    \"materials\": {\n        \"ai_translates\": [],\n        \"audio_balances\": [],\n        \"audio_effects\": [],\n        \"audio_fades\": [],\n        \"audio_track_indexes\": [],\n        \"audios\": [],\n        \"beats\": [],\n        \"canvases\": [],\n        \"chromas\": [],\n        \"color_curves\": [],\n        \"digital_humans\": [],\n        \"drafts\": [],\n        \"effects\": [],\n        \"flowers\": [],\n        \"green_screens\": [],\n        \"handwrites\": [],\n        \"hsl\": [],\n        \"images\": [],\n        \"log_color_wheels\": [],\n        \"loudnesses\": [],\n        \"manual_deformations\": [],\n        \"masks\": [],\n        \"material_animations\": [],\n        \"material_colors\": [],\n        \"multi_language_refs\": [],\n        \"placeholders\": [],\n        \"plugin_effects\": [],\n        \"primary_color_wheels\": [],\n        \"realtime_denoises\": [],\n        \"shapes\": [],\n        \"smart_crops\": [],\n        \"smart_relights\": [],\n        \"sound_channel_mappings\": [],\n        \"speeds\": [],\n        \"stickers\": [],\n        \"tail_leaders\": [],\n        \"text_templates\": [],\n        \"texts\": [],\n        \"time_marks\": [],\n        \"transitions\": [],\n        \"video_effects\": [],\n        \"video_trackings\": [],\n        \"videos\": [],\n        \"vocal_beautifys\": [],\n        \"vocal_separations\": []\n    },\n    \"mutable_config\": null,\n    \"name\": \"\",\n    \"new_version\": \"110.0.0\",\n    \"relationships\": [],\n    \"render_index_track_mode_on\": false,\n    \"retouch_cover\": null,\n    \"source\": \"default\",\n    \"static_cover_image_path\": \"\",\n    \"time_marks\": null,\n    \"tracks\": [\n    ],\n    \"update_time\": 0,\n    \"version\": 360000\n}"
  },
  {
    "path": "src/pyJianYingDraft/assets/draft_meta_info.json",
    "content": "{\n\t\"cloud_package_completed_time\": \"\",\n\t\"draft_cloud_capcut_purchase_info\": \"\",\n\t\"draft_cloud_last_action_download\": false,\n\t\"draft_cloud_materials\": [],\n\t\"draft_cloud_purchase_info\": \"\",\n\t\"draft_cloud_template_id\": \"\",\n\t\"draft_cloud_tutorial_info\": \"\",\n\t\"draft_cloud_videocut_purchase_info\": \"\",\n\t\"draft_cover\": \"\",\n\t\"draft_deeplink_url\": \"\",\n\t\"draft_enterprise_info\": {\n\t\t\"draft_enterprise_extra\": \"\",\n\t\t\"draft_enterprise_id\": \"\",\n\t\t\"draft_enterprise_name\": \"\",\n\t\t\"enterprise_material\": []\n\t},\n\t\"draft_fold_path\": \"\",\n\t\"draft_id\": \"BC69C7CD-7C5E-4185-B284-AF3E1047A664\",\n\t\"draft_is_ai_packaging_used\": false,\n\t\"draft_is_ai_shorts\": false,\n\t\"draft_is_ai_translate\": false,\n\t\"draft_is_article_video_draft\": false,\n\t\"draft_is_from_deeplink\": \"false\",\n\t\"draft_is_invisible\": false,\n\t\"draft_materials\": [\n\t\t{\n\t\t\t\"type\": 0,\n\t\t\t\"value\": []\n\t\t},\n\t\t{\n\t\t\t\"type\": 1,\n\t\t\t\"value\": []\n\t\t},\n\t\t{\n\t\t\t\"type\": 2,\n\t\t\t\"value\": []\n\t\t},\n\t\t{\n\t\t\t\"type\": 3,\n\t\t\t\"value\": []\n\t\t},\n\t\t{\n\t\t\t\"type\": 6,\n\t\t\t\"value\": []\n\t\t},\n\t\t{\n\t\t\t\"type\": 7,\n\t\t\t\"value\": []\n\t\t},\n\t\t{\n\t\t\t\"type\": 8,\n\t\t\t\"value\": []\n\t\t}\n\t],\n\t\"draft_materials_copied_info\": [],\n\t\"draft_name\": \"\",\n\t\"draft_new_version\": \"\",\n\t\"draft_removable_storage_device\": \"\",\n\t\"draft_root_path\": \"\",\n\t\"draft_segment_extra_info\": [],\n\t\"draft_type\": \"\",\n\t\"tm_draft_cloud_completed\": \"\",\n\t\"tm_draft_cloud_modified\": 0,\n\t\"tm_draft_removed\": 0,\n\t\"tm_duration\": 0\n}"
  },
  {
    "path": "src/pyJianYingDraft/audio_segment.py",
    "content": "\"\"\"定义音频片段及其相关类\n\n包含淡入淡出效果、音频特效等相关类\n\"\"\"\n\nimport uuid\nfrom copy import deepcopy\n\nfrom typing import Optional, Literal, Union\nfrom typing import Dict, List, Any\n\nfrom .time_util import tim, Timerange\nfrom .segment import MediaSegment\nfrom .local_materials import AudioMaterial\nfrom .keyframe import KeyframeProperty, KeyframeList\n\nfrom .metadata import EffectParamInstance\nfrom .metadata import AudioSceneEffectType, ToneEffectType, SpeechToSongType\n\nclass AudioFade:\n    \"\"\"音频淡入淡出效果\"\"\"\n\n    fade_id: str\n    \"\"\"淡入淡出效果的全局id, 自动生成\"\"\"\n\n    in_duration: int\n    \"\"\"淡入时长, 单位为微秒\"\"\"\n    out_duration: int\n    \"\"\"淡出时长, 单位为微秒\"\"\"\n\n    def __init__(self, in_duration: int, out_duration: int):\n        \"\"\"根据给定的淡入/淡出时长构造一个淡入淡出效果\"\"\"\n\n        self.fade_id = uuid.uuid4().hex\n        self.in_duration = in_duration\n        self.out_duration = out_duration\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"id\": self.fade_id,\n            \"fade_in_duration\": self.in_duration,\n            \"fade_out_duration\": self.out_duration,\n            \"fade_type\": 0,\n            \"type\": \"audio_fade\"\n        }\n\nclass AudioEffect:\n    \"\"\"音频特效对象\"\"\"\n\n    name: str\n    \"\"\"特效名称\"\"\"\n    effect_id: str\n    \"\"\"特效全局id, 由程序自动生成\"\"\"\n    resource_id: str\n    \"\"\"资源id, 由剪映本身提供\"\"\"\n\n    category_id: Literal[\"sound_effect\", \"tone\", \"speech_to_song\"]\n    category_name: Literal[\"场景音\", \"音色\", \"声音成曲\"]\n    category_index: Literal[1, 2, 3]\n\n    audio_adjust_params: List[EffectParamInstance]\n\n    def __init__(self, effect_meta: Union[AudioSceneEffectType, ToneEffectType, SpeechToSongType],\n                 params: Optional[List[Optional[float]]] = None):\n        \"\"\"根据给定的音效元数据及参数列表构造一个音频特效对象, params的范围是0~100\"\"\"\n\n        self.name = effect_meta.value.name\n        self.effect_id = uuid.uuid4().hex\n        self.resource_id = effect_meta.value.resource_id\n        self.audio_adjust_params = []\n\n        if isinstance(effect_meta, AudioSceneEffectType):\n            self.category_id = \"sound_effect\"\n            self.category_name = \"场景音\"\n            self.category_index = 1\n        elif isinstance(effect_meta, ToneEffectType):\n            self.category_id = \"tone\"\n            self.category_name = \"音色\"\n            self.category_index = 2\n        elif isinstance(effect_meta, SpeechToSongType):\n            self.category_id = \"speech_to_song\"\n            self.category_name = \"声音成曲\"\n            self.category_index = 3\n        else:\n            raise TypeError(\"不支持的元数据类型 %s\" % type(effect_meta))\n\n        self.audio_adjust_params = effect_meta.value.parse_params(params)\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"audio_adjust_params\": [param.export_json() for param in self.audio_adjust_params],\n            \"category_id\": self.category_id,\n            \"category_name\": self.category_name,\n            \"id\": self.effect_id,\n            \"is_ugc\": False,\n            \"name\": self.name,\n            \"production_path\": \"\",\n            \"resource_id\": self.resource_id,\n            \"speaker_id\": \"\",\n            \"sub_type\": self.category_index,\n            \"time_range\": {\"duration\": 0, \"start\": 0},  # 似乎并未用到\n            \"type\": \"audio_effect\"\n            # 不导出path和constant_material_id\n        }\n\nclass AudioSegment(MediaSegment):\n    \"\"\"安放在轨道上的一个音频片段\"\"\"\n\n    material_instance: AudioMaterial\n    \"\"\"音频素材实例\"\"\"\n\n    fade: Optional[AudioFade]\n    \"\"\"音频淡入淡出效果, 可能为空\n\n    在放入轨道时自动添加到素材列表中\n    \"\"\"\n\n    effects: List[AudioEffect]\n    \"\"\"音频特效列表\n\n    在放入轨道时自动添加到素材列表中\n    \"\"\"\n\n    def __init__(self, material: Union[AudioMaterial, str], target_timerange: Timerange, *,\n                 source_timerange: Optional[Timerange] = None, speed: Optional[float] = None, volume: float = 1.0,\n                 change_pitch: bool = False):\n        \"\"\"利用给定的音频素材构建一个轨道片段, 并指定其时间信息及播放速度/音量\n\n        Args:\n            material (`AudioMaterial` or `str`): 素材实例或素材路径, 若为路径则自动构造素材实例\n            target_timerange (`Timerange`): 片段在轨道上的目标时间范围\n            source_timerange (`Timerange`, optional): 截取的素材片段的时间范围, 默认从开头根据`speed`截取与`target_timerange`等长的一部分\n            speed (`float`, optional): 播放速度, 默认为1.0. 此项与`source_timerange`同时指定时, 将覆盖`target_timerange`中的时长\n            volume (`float`, optional): 音量, 默认为1.0\n            change_pitch (`bool`, optional): 是否跟随变速改变音调, 默认为否\n\n        Raises:\n            `ValueError`: 指定的或计算出的`source_timerange`超出了素材的时长范围\n        \"\"\"\n        if isinstance(material, str):\n            material = AudioMaterial(material)\n\n        if source_timerange is not None and speed is not None:\n            target_timerange = Timerange(target_timerange.start, round(source_timerange.duration / speed))\n        elif source_timerange is not None and speed is None:\n            speed = source_timerange.duration / target_timerange.duration\n        else:  # source_timerange is None\n            speed = speed if speed is not None else 1.0\n            source_timerange = Timerange(0, round(target_timerange.duration * speed))\n\n        if source_timerange.end > material.duration:\n            raise ValueError(f\"截取的素材时间范围 {source_timerange} 超出了素材时长({material.duration})\")\n\n        super().__init__(material.material_id, source_timerange, target_timerange, speed, volume, change_pitch)\n\n        self.material_instance = deepcopy(material)\n        self.fade = None\n        self.effects = []\n\n    def add_effect(self, effect_type: Union[AudioSceneEffectType, ToneEffectType, SpeechToSongType],\n                   params: Optional[List[Optional[float]]] = None) -> \"AudioSegment\":\n        \"\"\"为音频片段添加一个作用于整个片段的音频效果, 目前\"声音成曲\"效果不能自动被剪映所识别\n\n        Args:\n            effect_type (`AudioSceneEffectType` | `ToneEffectType` | `SpeechToSongType`): 音效类型, 一类音效只能添加一个.\n            params (`List[Optional[float]]`, optional): 音效参数列表, 参数列表中未提供或为None的项使用默认值.\n                参数取值范围(0~100)与剪映中一致. 某个特效类型有何参数以及具体参数顺序以枚举类成员的annotation为准.\n\n        Raises:\n            `ValueError`: 试图添加一个已经存在的音效类型、提供的参数数量超过了该音效类型的参数数量, 或参数值超出范围.\n        \"\"\"\n        if params is not None and len(params) > len(effect_type.value.params):\n            raise ValueError(\"为音频效果 %s 传入了过多的参数\" % effect_type.value.name)\n\n        effect_inst = AudioEffect(effect_type, params)\n        if effect_inst.category_id in [eff.category_id for eff in self.effects]:\n            raise ValueError(\"当前音频片段已经有此类型 (%s) 的音效了\" % effect_inst.category_name)\n        self.effects.append(effect_inst)\n        self.extra_material_refs.append(effect_inst.effect_id)\n\n        return self\n\n    def add_fade(self, in_duration: Union[str, int], out_duration: Union[str, int]) -> \"AudioSegment\":\n        \"\"\"为音频片段添加淡入淡出效果\n\n        Args:\n            in_duration (`int` or `str`): 音频淡入时长, 单位为微秒, 若为字符串则会调用`tim()`函数进行解析\n            out_duration (`int` or `str`): 音频淡出时长, 单位为微秒, 若为字符串则会调用`tim()`函数进行解析\n\n        Raises:\n            `ValueError`: 当前片段已存在淡入淡出效果\n        \"\"\"\n        if self.fade is not None:\n            raise ValueError(\"当前片段已存在淡入淡出效果\")\n\n        if isinstance(in_duration, str): in_duration = tim(in_duration)\n        if isinstance(out_duration, str): out_duration = tim(out_duration)\n\n        self.fade = AudioFade(in_duration, out_duration)\n        self.extra_material_refs.append(self.fade.fade_id)\n\n        return self\n\n    def add_keyframe(self, time_offset: int, volume: float) -> \"AudioSegment\":\n        \"\"\"为音频片段创建一个*控制音量*的关键帧, 并自动加入到关键帧列表中\n\n        Args:\n            time_offset (`int`): 关键帧的时间偏移量, 单位为微秒\n            volume (`float`): 音量在`time_offset`处的值\n        \"\"\"\n        _property = KeyframeProperty.volume\n        for kf_list in self.common_keyframes:\n            if kf_list.keyframe_property == _property:\n                kf_list.add_keyframe(time_offset, volume)\n                return self\n        kf_list = KeyframeList(_property)\n        kf_list.add_keyframe(time_offset, volume)\n        self.common_keyframes.append(kf_list)\n        return self\n\n    def export_json(self) -> Dict[str, Any]:\n        json_dict = super().export_json()\n        json_dict.update({\n            \"clip\": None,\n            \"hdr_settings\": None\n        })\n        return json_dict\n"
  },
  {
    "path": "src/pyJianYingDraft/draft_folder.py",
    "content": "\"\"\"草稿文件夹管理器\"\"\"\n\nimport os\nimport shutil\n\nfrom typing import List\n\nfrom . import assets\nfrom .script_file import ScriptFile\n\nclass DraftFolder:\n    \"\"\"管理一个文件夹及其内的一系列草稿\"\"\"\n\n    folder_path: str\n    \"\"\"根路径\"\"\"\n\n    def __init__(self, folder_path: str):\n        \"\"\"初始化草稿文件夹管理器\n\n        Args:\n            folder_path (`str`): 包含若干草稿的文件夹, 一般取剪映保存草稿的位置即可\n\n        Raises:\n            `FileNotFoundError`: 路径不存在\n        \"\"\"\n        self.folder_path = folder_path\n\n        if not os.path.exists(self.folder_path):\n            raise FileNotFoundError(f\"根文件夹 {self.folder_path} 不存在\")\n\n    def list_drafts(self) -> List[str]:\n        \"\"\"列出文件夹中所有草稿的名称\n\n        注意: 本函数只是如实地列出子文件夹的名称, 并不检查它们是否符合草稿的格式\n        \"\"\"\n        return [f for f in os.listdir(self.folder_path) if os.path.isdir(os.path.join(self.folder_path, f))]\n\n    def has_draft(self, draft_name: str) -> bool:\n        \"\"\"检查文件夹中是否存在指定名称的草稿\n\n        注意: 本函数只检查文件夹是否存在, 并不检查草稿是否符合剪映的格式\n\n        Args:\n            draft_name (`str`): 草稿名称, 即相应文件夹名称\n        \"\"\"\n        return draft_name in self.list_drafts()\n\n    def remove(self, draft_name: str) -> None:\n        \"\"\"删除指定名称的草稿\n\n        Args:\n            draft_name (`str`): 草稿名称, 即相应文件夹名称\n\n        Raises:\n            `FileNotFoundError`: 对应的草稿不存在\n        \"\"\"\n        draft_path = os.path.join(self.folder_path, draft_name)\n        if not os.path.exists(draft_path):\n            raise FileNotFoundError(f\"草稿文件夹 {draft_name} 不存在\")\n\n        shutil.rmtree(draft_path)\n\n    def create_draft(self, draft_name: str, width: int, height: int, fps: int = 30, *,\n                     maintrack_adsorb: bool = True,\n                     allow_replace: bool = False) -> ScriptFile:\n        \"\"\"创建一个新草稿并开始编辑, 编辑完成后使用`ScriptFile.save()`保存即可\n\n        Args:\n            draft_name (`str`): 草稿名称, 即相应文件夹名称\n            width (`int`): 视频宽度, 单位为像素\n            height (`int`): 视频高度, 单位为像素\n            fps (`int`, optional): 视频帧率. 默认为30.\n            maintrack_adsorb (`bool`, optional): 是否启用主轨道吸附（主轨磁吸）. 默认启用.\n            allow_replace (`bool`, optional): 是否允许覆盖与`draft_name`重名的草稿. 默认为否.\n\n        Raises:\n            `FileExistsError`: 已存在与`draft_name`重名的草稿, 但不允许覆盖.\n        \"\"\"\n        draft_path = os.path.join(self.folder_path, draft_name)\n        if os.path.exists(draft_path):\n            if not allow_replace:\n                raise FileExistsError(f\"草稿文件夹 {draft_name} 已存在且不允许覆盖\")\n            shutil.rmtree(draft_path)\n\n        # 创建草稿文件夹\n        os.makedirs(draft_path)\n        shutil.copy(assets.get_asset_path(\"DRAFT_META_TEMPLATE\"), os.path.join(draft_path, \"draft_meta_info.json\"))\n\n        # 创建草稿文件\n        script_file = ScriptFile(width, height, fps, maintrack_adsorb)\n        \n        # 设置保存路径为 draft_content.json\n        draft_content_path = os.path.join(draft_path, \"draft_content.json\")\n        script_file.save_path = draft_content_path\n        \n        # 启用双文件兼容模式\n        script_file.dual_file_compatibility = True\n        \n        # 保存到 draft_content.json（会自动同步到 draft_info.json）\n        script_file.save()\n\n        return script_file\n\n    def inspect_material(self, draft_name: str) -> None:\n        \"\"\"输出指定名称草稿中的贴纸素材元数据\n\n        Args:\n            draft_name (`str`): 草稿名称, 即相应文件夹名称\n\n        Raises:\n            `FileNotFoundError`: 对应的草稿不存在\n        \"\"\"\n        draft_path = os.path.join(self.folder_path, draft_name)\n        if not os.path.exists(draft_path):\n            raise FileNotFoundError(f\"草稿文件夹 {draft_name} 不存在\")\n\n        script_file = self.load_template(draft_name)\n        script_file.inspect_material()\n\n    def load_template(self, draft_name: str) -> ScriptFile:\n        \"\"\"在文件夹中打开一个草稿作为模板, 并在其上进行编辑\n\n        Args:\n            draft_name (`str`): 草稿名称, 即相应文件夹名称\n\n        Returns:\n            `ScriptFile`: 以模板模式打开的草稿对象\n\n        Raises:\n            `FileNotFoundError`: 对应的草稿不存在\n        \"\"\"\n        draft_path = os.path.join(self.folder_path, draft_name)\n        if not os.path.exists(draft_path):\n            raise FileNotFoundError(f\"草稿文件夹 {draft_name} 不存在\")\n\n        script_file = ScriptFile.load_template(os.path.join(draft_path, \"draft_content.json\"))\n        # 启用双文件兼容模式，以便在保存时同时更新两个文件\n        script_file.dual_file_compatibility = True\n        return script_file\n\n    def duplicate_as_template(self, template_name: str, new_draft_name: str, allow_replace: bool = False) -> ScriptFile:\n        \"\"\"复制一份给定的草稿, 并在复制出的新草稿上进行编辑\n\n        Args:\n            template_name (`str`): 原草稿名称\n            new_draft_name (`str`): 新草稿名称\n            allow_replace (`bool`, optional): 是否允许覆盖与`new_draft_name`重名的草稿. 默认为否.\n\n        Returns:\n            `ScriptFile`: 以模板模式打开的**复制后的**草稿对象\n\n        Raises:\n            `FileNotFoundError`: 原始草稿不存在\n            `FileExistsError`: 已存在与`new_draft_name`重名的草稿, 但不允许覆盖.\n        \"\"\"\n        template_path = os.path.join(self.folder_path, template_name)\n        new_draft_path = os.path.join(self.folder_path, new_draft_name)\n        if not os.path.exists(template_path):\n            raise FileNotFoundError(f\"模板草稿 {template_name} 不存在\")\n        if os.path.exists(new_draft_path) and not allow_replace:\n            raise FileExistsError(f\"新草稿 {new_draft_name} 已存在且不允许覆盖\")\n\n        # 复制草稿文件夹\n        shutil.copytree(template_path, new_draft_path, dirs_exist_ok=allow_replace)\n\n        # 打开草稿\n        return self.load_template(new_draft_name)\n"
  },
  {
    "path": "src/pyJianYingDraft/effect_segment.py",
    "content": "\"\"\"定义特效/滤镜片段类\"\"\"\n\nfrom typing import Union, Optional, List\n\nfrom .time_util import Timerange\nfrom .segment import BaseSegment\nfrom .video_segment import VideoEffect, Filter\n\nfrom .metadata import VideoSceneEffectType, VideoCharacterEffectType, FilterType\n\nclass EffectSegment(BaseSegment):\n    \"\"\"放置在独立特效轨道上的特效片段\"\"\"\n\n    effect_inst: VideoEffect\n    \"\"\"相应的特效素材\n\n    在放入轨道时自动添加到素材列表中\n    \"\"\"\n\n    def __init__(self, effect_type: Union[VideoSceneEffectType, VideoCharacterEffectType],\n                 target_timerange: Timerange, params: Optional[List[Optional[float]]] = None):\n        self.effect_inst = VideoEffect(effect_type, params, apply_target_type=2)  # 作用域为全局\n        super().__init__(self.effect_inst.global_id, target_timerange)\n\nclass FilterSegment(BaseSegment):\n    \"\"\"放置在独立滤镜轨道上的滤镜片段\"\"\"\n\n    material: Filter\n    \"\"\"相应的滤镜素材\n\n    在放入轨道时自动添加到素材列表中\n    \"\"\"\n\n    def __init__(self, meta: FilterType, target_timerange: Timerange, intensity: float):\n        self.material = Filter(meta.value, intensity)\n        super().__init__(self.material.global_id, target_timerange)\n"
  },
  {
    "path": "src/pyJianYingDraft/exceptions.py",
    "content": "\"\"\"自定义异常类\"\"\"\n\nclass TrackNotFound(NameError):\n    \"\"\"未找到满足条件的轨道\"\"\"\nclass AmbiguousTrack(ValueError):\n    \"\"\"找到多个满足条件的轨道\"\"\"\nclass SegmentOverlap(ValueError):\n    \"\"\"新片段与已有的轨道片段重叠\"\"\"\n\nclass MaterialNotFound(NameError):\n    \"\"\"未找到满足条件的素材\"\"\"\nclass AmbiguousMaterial(ValueError):\n    \"\"\"找到多个满足条件的素材\"\"\"\n\nclass ExtensionFailed(ValueError):\n    \"\"\"替换素材时延伸片段失败\"\"\"\n\nclass DraftNotFound(NameError):\n    \"\"\"未找到草稿\"\"\"\nclass AutomationError(Exception):\n    \"\"\"自动化操作失败\"\"\"\nclass ExportTimeout(Exception):\n    \"\"\"导出超时\"\"\"\n"
  },
  {
    "path": "src/pyJianYingDraft/jianying_controller.py",
    "content": "\"\"\"剪映自动化控制，主要与自动导出有关\"\"\"\n\nimport time\nimport shutil\nimport sys\n\n# 平台检查和依赖导入\nif sys.platform != \"win32\":\n    raise ImportError(\"JianyingController is only available on Windows platform\")\n\ntry:\n    import uiautomation as uia\nexcept ImportError as e:\n    raise ImportError(f\"Missing required Windows dependencies: {e}. Please install with: pip install capcut-mate[windows]\")\n\ntry:\n    import pyautogui  # pyright: ignore[reportMissingModuleSource]\nexcept ImportError as e:\n    raise ImportError(f\"Missing required Windows dependencies: {e}. Please install with: pip install pyautogui[windows]\")\n\nfrom enum import Enum\nfrom typing import Optional, Literal, Callable\n\nfrom . import exceptions\nfrom .exceptions import AutomationError\n\n# 添加logger导入\nfrom src.utils.logger import logger\n\nclass ExportResolution(Enum):\n    \"\"\"导出分辨率\"\"\"\n    RES_8K = \"8K\"\n    RES_4K = \"4K\"\n    RES_2K = \"2K\"\n    RES_1080P = \"1080P\"\n    RES_720P = \"720P\"\n    RES_480P = \"480P\"\n\nclass ExportFramerate(Enum):\n    \"\"\"导出帧率\"\"\"\n    FR_24 = \"24fps\"\n    FR_25 = \"25fps\"\n    FR_30 = \"30fps\"\n    FR_50 = \"50fps\"\n    FR_60 = \"60fps\"\n\nclass ControlFinder:\n    \"\"\"控件查找器，封装部分与控件查找相关的逻辑\"\"\"\n\n    @staticmethod\n    def desc_matcher(target_desc: str, depth: int = 2, exact: bool = False) -> Callable[[uia.Control, int], bool]:\n        \"\"\"根据full_description查找控件的匹配器\"\"\"\n        target_desc = target_desc.lower()\n        def matcher(control: uia.Control, _depth: int) -> bool:\n            if _depth != depth:\n                return False\n            full_desc: str = control.GetPropertyValue(30159).lower()\n            return (target_desc == full_desc) if exact else (target_desc in full_desc)\n        return matcher\n\n    @staticmethod\n    def class_name_matcher(class_name: str, depth: int = 1, exact: bool = False) -> Callable[[uia.Control, int], bool]:\n        \"\"\"根据ClassName查找控件的匹配器\"\"\"\n        class_name = class_name.lower()\n        def matcher(control: uia.Control, _depth: int) -> bool:\n            if _depth != depth:\n                return False\n            curr_class_name: str = control.ClassName.lower()\n            return (class_name == curr_class_name) if exact else (class_name in curr_class_name)\n        return matcher\n\nclass JianyingController:\n    \"\"\"剪映控制器\"\"\"\n\n    # 窗口查找重试：剪映启动较慢、RDP 刚连上、或 UI 树尚未就绪时，瞬时 Exists(0) 易失败\n    WINDOW_FIND_MAX_RETRIES = 12\n    WINDOW_FIND_RETRY_INTERVAL = 1.0\n\n    app: uia.WindowControl\n    \"\"\"剪映窗口\"\"\"\n    app_status: Literal[\"home\", \"edit\", \"pre_export\"]\n    \"\"\"当app_status为pre_export时，app_sub_status表示导出过程中的子状态\"\"\"\n    app_sub_status: Literal[\"none\", \"export_start\", \"exporting\", \"export_succeed\"]\n\n    def __init__(self):\n        \"\"\"初始化剪映控制器, 此时剪映应该处于目录页\"\"\"\n        self.get_window()\n\n    def find_and_click_draft(self, draft_name: str, max_retries: int = 5, retry_interval: float = 5.0) -> None:\n        \"\"\"查找并点击指定名称的草稿\n        \n        Args:\n            draft_name (str): 要查找的草稿名称\n            max_retries (int): 最大重试次数，默认5次\n            retry_interval (float): 重试间隔时间(秒)，默认5秒\n            \n        Raises:\n            DraftNotFound: 未找到指定名称的剪映草稿\n        \"\"\"\n        last_exception = None\n        for attempt in range(max_retries):\n            try:\n                # 点击对应草稿\n                draft_name_text = self.app.TextControl(\n                    searchDepth=2,\n                    Compare=ControlFinder.desc_matcher(f\"HomePageDraftTitle:{draft_name}\", exact=True)\n                )\n                if not draft_name_text.Exists(0):\n                    raise exceptions.DraftNotFound(f\"未找到名为{draft_name}的剪映草稿\")\n                draft_btn = draft_name_text.GetParentControl()\n                assert draft_btn is not None\n                draft_btn.Click(simulateMove=False)\n                time.sleep(10)\n                self.get_window()\n                return  # 成功则返回\n            except exceptions.DraftNotFound as e:\n                last_exception = e\n                if attempt < max_retries - 1:\n                    logger.info(\n                        \"Draft not found (name=%s), retry %d/%d\",\n                        draft_name,\n                        attempt + 1,\n                        max_retries,\n                    )\n                    time.sleep(retry_interval)\n        \n        # 所有重试都失败，抛出异常\n        raise last_exception\n\n    def click_export_button(self) -> None:\n        \"\"\"点击编辑页面的导出按钮\n        \n        Raises:\n            AutomationError: 未找到导出按钮\n        \"\"\"\n        export_btn = self.app.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher(\"MainWindowTitleBarExportBtn\"))\n        if not export_btn.Exists(0):\n            raise AutomationError(\"未在编辑窗口中找到导出按钮\")\n        export_btn.Click(simulateMove=False)\n        time.sleep(10)\n        self.get_window()\n\n    def get_original_export_path(self) -> str:\n        \"\"\"获取原始导出路径\n        \n        Returns:\n            str: 原始导出路径\n            \n        Raises:\n            AutomationError: 未找到导出路径框\n        \"\"\"\n        # 获取原始导出路径（带后缀名）\n        export_path_sib = self.app.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher(\"ExportPath\"))\n        if not export_path_sib.Exists(0):\n            raise AutomationError(\"未找到导出路径框\")\n        export_path_text = export_path_sib.GetSiblingControl(lambda ctrl: True)\n        assert export_path_text is not None\n        export_path = export_path_text.GetPropertyValue(30159)\n        return export_path\n\n    def set_export_resolution(self, resolution: Optional[ExportResolution]) -> None:\n        \"\"\"设置导出分辨率\n        \n        Args:\n            resolution (Optional[ExportResolution]): 导出分辨率，如果为None则不设置\n            \n        Raises:\n            AutomationError: 未找到相关控件\n        \"\"\"\n        if resolution is not None:\n            setting_group = self.app.GroupControl(searchDepth=1,\n                                          Compare=ControlFinder.class_name_matcher(\"PanelSettingsGroup_QMLTYPE\"))\n            if not setting_group.Exists(0):\n                raise AutomationError(\"未找到导出设置组\")\n            resolution_btn = setting_group.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher(\"ExportSharpnessInput\"))\n            if not resolution_btn.Exists(0.5):\n                raise AutomationError(\"未找到导出分辨率下拉框\")\n            resolution_btn.Click(simulateMove=False)\n            time.sleep(0.5)\n            resolution_item = self.app.TextControl(\n                searchDepth=2, Compare=ControlFinder.desc_matcher(resolution.value)\n            )\n            if not resolution_item.Exists(0.5):\n                raise AutomationError(f\"未找到{resolution.value}分辨率选项\")\n            resolution_item.Click(simulateMove=False)\n            time.sleep(0.5)\n\n    def set_export_framerate(self, framerate: Optional[ExportFramerate]) -> None:\n        \"\"\"设置导出帧率\n        \n        Args:\n            framerate (Optional[ExportFramerate]): 导出帧率，如果为None则不设置\n            \n        Raises:\n            AutomationError: 未找到相关控件\n        \"\"\"\n        if framerate is not None:\n            setting_group = self.app.GroupControl(searchDepth=1,\n                                          Compare=ControlFinder.class_name_matcher(\"PanelSettingsGroup_QMLTYPE\"))\n            if not setting_group.Exists(0):\n                raise AutomationError(\"未找到导出设置组\")\n            framerate_btn = setting_group.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher(\"FrameRateInput\"))\n            if not framerate_btn.Exists(0.5):\n                raise AutomationError(\"未找到导出帧率下拉框\")\n            framerate_btn.Click(simulateMove=False)\n            time.sleep(0.5)\n            framerate_item = self.app.TextControl(\n                searchDepth=2, Compare=ControlFinder.desc_matcher(framerate.value)\n            )\n            if not framerate_item.Exists(0.5):\n                raise AutomationError(f\"未找到{framerate.value}帧率选项\")\n            framerate_item.Click(simulateMove=False)\n            time.sleep(0.5)\n\n    def click_final_export_button(self) -> None:\n        \"\"\"点击导出窗口的最终导出按钮\n        \n        Raises:\n            AutomationError: 未找到导出按钮\n        \"\"\"\n        export_btn = self.app.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher(\"ExportOkBtn\", exact=True))\n        if not export_btn.Exists(0):\n            raise AutomationError(\"未在导出窗口中找到导出按钮\")\n        export_btn.Click(simulateMove=False)\n        time.sleep(5)\n\n    def __ensure_window_focus(self) -> None:\n        \"\"\"在点击前确保窗口有焦点\"\"\"\n        # 1. 确保窗口激活\n        self.app.SetActive()\n        time.sleep(1)\n        \n        # 2. 确保窗口置顶\n        self.app.SetTopmost()\n        time.sleep(1)\n        \n        # 3. 强制获取焦点\n        try:\n            self.app.SetFocus()\n        except:\n            pass  # 某些情况下可能失败，但继续执行\n        time.sleep(1)\n\n    def wait_for_export_completion(self, timeout: float) -> None:\n        \"\"\"等待导出完成\n        \n        Args:\n            timeout (float): 超时时间（秒）\n            \n        Raises:\n            AutomationError: 导出超时\n        \"\"\"\n        # 点击继续导出按钮次数\n        continue_export_click_count = 0\n\n        # 等待导出完成\n        st = time.time()\n        while True:\n            self.get_window()\n            if self.app_status != \"pre_export\": break\n\n            succeed_close_btn = self.app.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher(\"ExportSucceedCloseBtn\"))\n            if succeed_close_btn.Exists(0):\n                break\n\n            if time.time() - st > timeout:\n                raise AutomationError(\"导出超时, 时限为%d秒\" % timeout)\n\n            # 导出过程中，如果出现异常弹窗，则点击继续导出按钮\n            if continue_export_click_count < 20:\n                print(\"pyautogui.size(): \", pyautogui.size(), \", click index: \", continue_export_click_count)\n                pyautogui.click(x=996, y=597, button=\"left\")\n                continue_export_click_count += 1\n\n            time.sleep(1)\n        time.sleep(2)\n\n    def return_to_home(self) -> None:\n        \"\"\"回到目录页并稍作延迟\"\"\"\n        self.get_window()\n        self.switch_to_home()\n        time.sleep(2)\n\n    def move_exported_file(self, original_path: str, output_path: Optional[str]) -> None:\n        \"\"\"移动导出的文件到指定位置\n        \n        Args:\n            original_path (str): 原始导出路径\n            output_path (Optional[str]): 目标输出路径，如果为None则不移动\n        \"\"\"\n        logger.info(f\"move {original_path} to {output_path}\")\n        if output_path is not None:\n            shutil.move(original_path, output_path)\n\n    def export_draft(self, draft_name: str, output_path: Optional[str] = None, *,\n                     resolution: Optional[ExportResolution] = None,\n                     framerate: Optional[ExportFramerate] = None,\n                     timeout: float = 1200) -> None:\n        \"\"\"导出指定的剪映草稿, **目前仅支持剪映6及以下版本**\n\n        **注意: 需要确认有导出草稿的权限(不使用VIP功能或已开通VIP), 否则可能陷入死循环**\n\n        Args:\n            draft_name (`str`): 要导出的剪映草稿名称\n            output_path (`str`, optional): 导出路径, 支持指向文件夹或直接指向文件, 不指定则使用剪映默认路径.\n            resolution (`Export_resolution`, optional): 导出分辨率, 默认不改变剪映导出窗口中的设置.\n            framerate (`Export_framerate`, optional): 导出帧率, 默认不改变剪映导出窗口中的设置.\n            timeout (`float`, optional): 导出超时时间(秒), 默认为20分钟.\n\n        Raises:\n            `DraftNotFound`: 未找到指定名称的剪映草稿\n            `AutomationError`: 剪映操作失败\n        \"\"\"\n        logger.info(f\"start export {draft_name} to {output_path}\")\n\n        # 初始化准备\n        self.get_window()\n        self.switch_to_home()\n\n        original_path = None\n\n        for i in range(16):\n            # 确保窗口有焦点\n            self.__ensure_window_focus()\n            if self.app_status == \"home\":\n                logger.info(\"[%d]app is already in home page\", i)\n                self.find_and_click_draft(draft_name)\n            elif self.app_status == \"edit\":\n                logger.info(\"[%d]app is already in edit page\", i)\n                # 点击导出按钮进入导出界面\n                self.click_export_button()\n            elif self.app_status == \"pre_export\":                \n                if self.app_sub_status == \"export_start\":\n                    logger.info(\"[%d]app is already in pre_export[export_start] page\", i)\n                    # 获取原始导出路径\n                    original_path = self.get_original_export_path()\n                    # 设置分辨率（如果指定）\n                    self.set_export_resolution(resolution)                    \n                    # 设置帧率（如果指定）\n                    self.set_export_framerate(framerate)                    \n                    # 点击最终导出按钮\n                    self.click_final_export_button()\n                    # 获取窗口状态\n                    self.get_window()\n                elif self.app_sub_status == \"exporting\":\n                    logger.info(\"[%d]app is already in pre_export[exporting] page\", i)\n                    self.wait_for_export_completion(timeout)                    \n                elif self.app_sub_status == \"export_succeed\":\n                    logger.info(\"[%d]app is already in pre_export[export_succeed] page\", i)\n                    self.return_to_home()\n                    break\n                else:\n                    raise AutomationError(\"[%d]app is in unknown sub-status: %s\" % (i, self.app_sub_status))\n            else:\n                raise AutomationError(\"[%d]app is in unknown status: %s\" % (i, self.app_status))\n        \n        # 移动导出文件到指定路径（如果指定）\n        self.move_exported_file(original_path, output_path)\n        \n        logger.info(f\"export {draft_name} to {output_path} completed\")\n\n    def switch_to_home(self) -> None:\n        \"\"\"切换到剪映主页\"\"\"\n        for i in range(8):\n            if self.app_status == \"home\":\n                return\n            elif self.app_status == \"pre_export\":\n                if self.app_sub_status == \"export_succeed\":\n                    succeed_close_btn = self.app.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher(\"ExportSucceedCloseBtn\"))\n                    if succeed_close_btn.Exists(0):\n                        succeed_close_btn.Click(simulateMove=False)\n                        time.sleep(2)\n                        self.get_window()\n            elif self.app_status == \"edit\":\n                close_btn = self.app.GroupControl(searchDepth=1, ClassName=\"TitleBarButton\", foundIndex=3)\n                close_btn.Click(simulateMove=False)\n                time.sleep(2)\n                self.get_window()\n            else:\n                raise AutomationError(\"invalid app status: %s\" % self.app_status)\n        \n        logger.info(\"Cannot switch to home page after 32 attempts\")\n\n    def get_window(\n        self,\n        max_retries: Optional[int] = None,\n        retry_interval: Optional[float] = None,\n    ) -> None:\n        \"\"\"寻找剪映窗口并置顶；未找到时按间隔重试以提高容错。\"\"\"\n        if max_retries is None:\n            max_retries = self.WINDOW_FIND_MAX_RETRIES\n        if retry_interval is None:\n            retry_interval = self.WINDOW_FIND_RETRY_INTERVAL\n\n        if hasattr(self, \"app\") and self.app.Exists(0):\n            self.app.SetTopmost(False)\n\n        for attempt in range(max_retries):\n            self.app = uia.WindowControl(searchDepth=1, Compare=self.__jianying_window_cmp)\n            if self.app.Exists(0):\n                if attempt > 0:\n                    logger.info(\n                        \"Jianying main window matched on attempt %d/%d\",\n                        attempt + 1,\n                        max_retries,\n                    )\n                break\n            if attempt < max_retries - 1:\n                logger.warning(\n                    \"Jianying main window not found, retrying in %.1fs (%d/%d)\",\n                    retry_interval,\n                    attempt + 1,\n                    max_retries,\n                )\n                time.sleep(retry_interval)\n        else:\n            raise AutomationError(\n                \"Jianying window not found after %d attempts (%.1fs interval); \"\n                \"ensure Jianying Pro is open on the home or edit screen.\"\n                % (max_retries, retry_interval)\n            )\n\n        # 寻找可能存在的导出窗口\n        export_window = self.app.WindowControl(searchDepth=1, Name=\"导出\")\n        if export_window.Exists(0):\n            self.app = export_window\n            self.app_status = \"pre_export\"\n\n        # 初始化导出子状态\n        self.init_export_sub_status()\n\n        logger.info(\"app_status: %s, app_sub_status: %s\", self.app_status, self.app_sub_status)\n\n        self.app.SetActive()\n        self.app.SetTopmost()\n\n    # 初始化导出子状态\n    def init_export_sub_status(self) -> None:\n        if self.app_status == \"pre_export\":\n            # 0. 初始化默认值为导出中\n            self.app_sub_status = \"exporting\"\n            \n            # 1. 检查窗口是否停留在导出开始页面\n            export_ok_btn = self.app.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher(\"ExportOkBtn\", exact=True))\n            if export_ok_btn.Exists(0):\n                self.app_sub_status = \"export_start\"\n                return\n\n            # 2. 检查窗口是否停留在导出完成页面\n            succeed_close_btn = self.app.TextControl(searchDepth=2, Compare=ControlFinder.desc_matcher(\"ExportSucceedCloseBtn\"))\n            if succeed_close_btn.Exists(0):\n                self.app_sub_status = \"export_succeed\"\n                return\n        else:\n            self.app_sub_status = \"none\"\n\n    def __jianying_window_cmp(self, control: uia.WindowControl, depth: int) -> bool:\n        if control.Name != \"剪映专业版\":\n            return False\n        if \"HomePage\".lower() in control.ClassName.lower():\n            self.app_status = \"home\"\n            return True\n        if \"MainWindow\".lower() in control.ClassName.lower():\n            self.app_status = \"edit\"\n            return True\n\n        logger.info(f\"ClassName: {control.ClassName.lower()}, Name: {control.Name.lower()}\")\n        return False"
  },
  {
    "path": "src/pyJianYingDraft/keyframe.py",
    "content": "import uuid\n\nfrom enum import Enum\nfrom typing import Dict, List, Any\n\nclass Keyframe:\n    \"\"\"一个关键帧（关键点）, 目前只支持线性插值\"\"\"\n\n    kf_id: str\n    \"\"\"关键帧全局id, 自动生成\"\"\"\n    time_offset: int\n    \"\"\"相对于素材起始点的时间偏移量\"\"\"\n    values: List[float]\n    \"\"\"关键帧的值, 似乎一般只有一个元素\"\"\"\n\n    def __init__(self, time_offset: int, value: float):\n        \"\"\"给定时间偏移量及关键值, 初始化关键帧\"\"\"\n        self.kf_id = uuid.uuid4().hex\n\n        self.time_offset = time_offset\n        self.values = [value]\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            # 默认值\n            \"curveType\": \"Line\",\n            \"graphID\": \"\",\n            \"left_control\": {\"x\": 0.0, \"y\": 0.0},\n            \"right_control\": {\"x\": 0.0, \"y\": 0.0},\n            # 自定义属性\n            \"id\": self.kf_id,\n            \"time_offset\": self.time_offset,\n            \"values\": self.values\n        }\n\nclass KeyframeProperty(Enum):\n    \"\"\"关键帧所控制的属性类型\"\"\"\n\n    position_x = \"KFTypePositionX\"\n    \"\"\"右移为正, 此处的数值应该为`剪映中显示的值` / `草稿宽度`, 也即单位是半个画布宽\"\"\"\n    position_y = \"KFTypePositionY\"\n    \"\"\"上移为正, 此处的数值应该为`剪映中显示的值` / `草稿高度`, 也即单位是半个画布高\"\"\"\n    rotation = \"KFTypeRotation\"\n    \"\"\"顺时针旋转的**角度**\"\"\"\n\n    scale_x = \"KFTypeScaleX\"\n    \"\"\"单独控制X轴缩放比例(1.0为不缩放), 与`uniform_scale`互斥\"\"\"\n    scale_y = \"KFTypeScaleY\"\n    \"\"\"单独控制Y轴缩放比例(1.0为不缩放), 与`uniform_scale`互斥\"\"\"\n    uniform_scale = \"UNIFORM_SCALE\"\n    \"\"\"同时控制X轴及Y轴缩放比例(1.0为不缩放), 与`scale_x`和`scale_y`互斥\"\"\"\n\n    alpha = \"KFTypeAlpha\"\n    \"\"\"不透明度, 1.0为完全不透明, 仅对`VideoSegment`有效\"\"\"\n    saturation = \"KFTypeSaturation\"\n    \"\"\"饱和度, 0.0为原始饱和度, 范围为-1.0到1.0, 仅对`VideoSegment`有效\"\"\"\n    contrast = \"KFTypeContrast\"\n    \"\"\"对比度, 0.0为原始对比度, 范围为-1.0到1.0, 仅对`VideoSegment`有效\"\"\"\n    brightness = \"KFTypeBrightness\"\n    \"\"\"亮度, 0.0为原始亮度, 范围为-1.0到1.0, 仅对`VideoSegment`有效\"\"\"\n\n    volume = \"KFTypeVolume\"\n    \"\"\"音量, 1.0为原始音量, 仅对`AudioSegment`和`VideoSegment`有效\"\"\"\n\nclass KeyframeList:\n    \"\"\"关键帧列表, 记录与某个特定属性相关的一系列关键帧\"\"\"\n\n    list_id: str\n    \"\"\"关键帧列表全局id, 自动生成\"\"\"\n    keyframe_property: KeyframeProperty\n    \"\"\"关键帧对应的属性\"\"\"\n    keyframes: List[Keyframe]\n    \"\"\"关键帧列表\"\"\"\n\n    def __init__(self, keyframe_property: KeyframeProperty):\n        \"\"\"为给定的关键帧属性初始化关键帧列表\"\"\"\n        self.list_id = uuid.uuid4().hex\n\n        self.keyframe_property = keyframe_property\n        self.keyframes = []\n\n    def add_keyframe(self, time_offset: int, value: float):\n        \"\"\"给定时间偏移量及关键值, 向此关键帧列表中添加一个关键帧\"\"\"\n        keyframe = Keyframe(time_offset, value)\n        self.keyframes.append(keyframe)\n        self.keyframes.sort(key=lambda x: x.time_offset)\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"id\": self.list_id,\n            \"keyframe_list\": [kf.export_json() for kf in self.keyframes],\n            \"material_id\": \"\",\n            \"property_type\": self.keyframe_property.value\n        }\n"
  },
  {
    "path": "src/pyJianYingDraft/local_materials.py",
    "content": "import os\nimport uuid\nimport pymediainfo\n\nfrom typing import Optional, Literal\nfrom typing import Dict, Any\n\nclass CropSettings:\n    \"\"\"素材的裁剪设置, 各属性均在0-1之间, 注意素材的坐标原点在左上角\"\"\"\n\n    upper_left_x: float\n    upper_left_y: float\n    upper_right_x: float\n    upper_right_y: float\n    lower_left_x: float\n    lower_left_y: float\n    lower_right_x: float\n    lower_right_y: float\n\n    def __init__(self, *, upper_left_x: float = 0.0, upper_left_y: float = 0.0,\n                 upper_right_x: float = 1.0, upper_right_y: float = 0.0,\n                 lower_left_x: float = 0.0, lower_left_y: float = 1.0,\n                 lower_right_x: float = 1.0, lower_right_y: float = 1.0):\n        \"\"\"初始化裁剪设置, 默认参数表示不裁剪\"\"\"\n        self.upper_left_x = upper_left_x\n        self.upper_left_y = upper_left_y\n        self.upper_right_x = upper_right_x\n        self.upper_right_y = upper_right_y\n        self.lower_left_x = lower_left_x\n        self.lower_left_y = lower_left_y\n        self.lower_right_x = lower_right_x\n        self.lower_right_y = lower_right_y\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"upper_left_x\": self.upper_left_x,\n            \"upper_left_y\": self.upper_left_y,\n            \"upper_right_x\": self.upper_right_x,\n            \"upper_right_y\": self.upper_right_y,\n            \"lower_left_x\": self.lower_left_x,\n            \"lower_left_y\": self.lower_left_y,\n            \"lower_right_x\": self.lower_right_x,\n            \"lower_right_y\": self.lower_right_y\n        }\n\nclass VideoMaterial:\n    \"\"\"本地视频素材（视频或图片）, 一份素材可以在多个片段中使用\"\"\"\n\n    material_id: str\n    \"\"\"素材全局id, 自动生成\"\"\"\n    local_material_id: str\n    \"\"\"素材本地id, 意义暂不明确\"\"\"\n    material_name: str\n    \"\"\"素材名称\"\"\"\n    path: str\n    \"\"\"素材文件路径\"\"\"\n    duration: int\n    \"\"\"素材时长, 单位为微秒\"\"\"\n    height: int\n    \"\"\"素材高度\"\"\"\n    width: int\n    \"\"\"素材宽度\"\"\"\n    crop_settings: CropSettings\n    \"\"\"素材裁剪设置\"\"\"\n    material_type: Literal[\"video\", \"photo\"]\n    \"\"\"素材类型: 视频或图片\"\"\"\n\n    def __init__(self, path: str, material_name: Optional[str] = None, crop_settings: CropSettings = CropSettings()):\n        \"\"\"从指定位置加载视频（或图片）素材\n\n        Args:\n            path (`str`): 素材文件路径, 支持mp4, mov, avi等常见视频文件及jpg, jpeg, png等图片文件.\n            material_name (`str`, optional): 素材名称, 如果不指定, 默认使用文件名作为素材名称.\n            crop_settings (`CropSettings`, optional): 素材裁剪设置, 默认不裁剪.\n\n        Raises:\n            `FileNotFoundError`: 素材文件不存在.\n            `ValueError`: 不支持的素材文件类型.\n        \"\"\"\n        path = os.path.abspath(path)\n        postfix = os.path.splitext(path)[1]\n        if not os.path.exists(path):\n            raise FileNotFoundError(f\"找不到 {path}\")\n\n        self.material_name = material_name if material_name else os.path.basename(path)\n        self.material_id = uuid.uuid4().hex\n        self.path = path\n        self.crop_settings = crop_settings\n        self.local_material_id = \"\"\n\n        if not pymediainfo.MediaInfo.can_parse():\n            raise ValueError(f\"不支持的视频素材类型 '{postfix}'\")\n\n        info: pymediainfo.MediaInfo = \\\n            pymediainfo.MediaInfo.parse(path, mediainfo_options={\"File_TestContinuousFileNames\": \"0\"})  # type: ignore\n        # 有视频轨道的视为视频素材\n        if len(info.video_tracks):\n            self.material_type = \"video\"\n            self.duration = int(info.video_tracks[0].duration * 1e3)  # type: ignore\n            self.width, self.height = info.video_tracks[0].width, info.video_tracks[0].height  # type: ignore\n        # gif文件使用imageio库获取长度\n        elif postfix.lower() == \".gif\":\n            import imageio\n            gif = imageio.get_reader(path)\n\n            self.material_type = \"video\"\n            self.duration = int(round(gif.get_meta_data()['duration'] * gif.get_length() * 1e3))\n            self.width, self.height = info.image_tracks[0].width, info.image_tracks[0].height  # type: ignore\n            gif.close()\n        elif len(info.image_tracks):\n            self.material_type = \"photo\"\n            self.duration = 10800000000  # 相当于3h\n            self.width, self.height = info.image_tracks[0].width, info.image_tracks[0].height  # type: ignore\n        else:\n            raise ValueError(f\"输入的素材文件 {path} 没有视频轨道或图片轨道\")\n\n    def export_json(self) -> Dict[str, Any]:\n        video_material_json = {\n            \"audio_fade\": None,\n            \"category_id\": \"\",\n            \"category_name\": \"local\",\n            \"check_flag\": 63487,\n            \"crop\": self.crop_settings.export_json(),\n            \"crop_ratio\": \"free\",\n            \"crop_scale\": 1.0,\n            \"duration\": self.duration,\n            \"height\": self.height,\n            \"id\": self.material_id,\n            \"local_material_id\": self.local_material_id,\n            \"material_id\": self.material_id,\n            \"material_name\": self.material_name,\n            \"media_path\": \"\",\n            \"path\": self.path,\n            \"type\": self.material_type,\n            \"width\": self.width\n        }\n        return video_material_json\n\nclass AudioMaterial:\n    \"\"\"本地音频素材\"\"\"\n\n    material_id: str\n    \"\"\"素材全局id, 自动生成\"\"\"\n    material_name: str\n    \"\"\"素材名称\"\"\"\n    path: str\n    \"\"\"素材文件路径\"\"\"\n\n    duration: int\n    \"\"\"素材时长, 单位为微秒\"\"\"\n\n    def __init__(self, path: str, material_name: Optional[str] = None):\n        \"\"\"从指定位置加载音频素材, 注意视频文件不应该作为音频素材使用\n\n        Args:\n            path (`str`): 素材文件路径, 支持mp3, wav等常见音频文件.\n            material_name (`str`, optional): 素材名称, 如果不指定, 默认使用文件名作为素材名称.\n\n        Raises:\n            `FileNotFoundError`: 素材文件不存在.\n            `ValueError`: 不支持的素材文件类型.\n        \"\"\"\n        path = os.path.abspath(path)\n        if not os.path.exists(path):\n            raise FileNotFoundError(f\"找不到 {path}\")\n\n        self.material_name = material_name if material_name else os.path.basename(path)\n        self.material_id = uuid.uuid4().hex\n        self.path = path\n\n        if not pymediainfo.MediaInfo.can_parse():\n            raise ValueError(\"不支持的音频素材类型 %s\" % os.path.splitext(path)[1])\n        info: pymediainfo.MediaInfo = pymediainfo.MediaInfo.parse(path)  # type: ignore\n        if len(info.video_tracks):\n            raise ValueError(\"音频素材不应包含视频轨道\")\n        if not len(info.audio_tracks):\n            raise ValueError(f\"给定的素材文件 {path} 没有音频轨道\")\n        self.duration = int(info.audio_tracks[0].duration * 1e3)  # type: ignore\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"app_id\": 0,\n            \"category_id\": \"\",\n            \"category_name\": \"local\",\n            \"check_flag\": 3,\n            \"copyright_limit_type\": \"none\",\n            \"duration\": self.duration,\n            \"effect_id\": \"\",\n            \"formula_id\": \"\",\n            \"id\": self.material_id,\n            \"local_material_id\": self.material_id,\n            \"music_id\": self.material_id,\n            \"name\": self.material_name,\n            \"path\": self.path,\n            \"source_platform\": 0,\n            \"type\": \"extract_music\",\n            \"wave_points\": []\n        }\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/__init__.py",
    "content": "\"\"\"记录各种特效/音效/滤镜等的元数据\n\n音频相关元数据更新时间：2024\n其余元数据更新时间：2026-03\n\"\"\"\nfrom .effect_meta import EffectMeta, EffectParamInstance\nfrom .effect_meta import AnimationMeta\n\n# 视频特效\nfrom .video_scene_effect import VideoSceneEffectType\nfrom .video_character_effect import VideoCharacterEffectType\n\n# 视频动画\nfrom .video_intro import IntroType\nfrom .video_outro import OutroType\nfrom .video_group_animation import GroupAnimationType\n# 音频特效\nfrom .audio_scene_effect import AudioSceneEffectType\nfrom .tone_effect import ToneEffectType\nfrom .speech_to_song import SpeechToSongType\n\n# 文本动画\nfrom .text_intro import TextIntro\nfrom .text_outro import TextOutro\nfrom .text_loop import TextLoopAnim\n\n# 其它\nfrom .font_meta import FontType\nfrom .mask_meta import MaskType, MaskMeta\nfrom .filter_meta import FilterType\nfrom .transition_meta import TransitionType\nfrom .mix_mode_meta import MixModeType\n\n__all__ = [\n    \"AnimationMeta\",\n    \"EffectMeta\",\n    \"EffectParamInstance\",\n    \"MaskType\",\n    \"MaskMeta\",\n    \"FilterType\",\n    \"FontType\",\n    \"TransitionType\",\n    \"MixModeType\",\n    \"IntroType\",\n    \"OutroType\",\n    \"GroupAnimationType\",\n    \"TextIntro\",\n    \"TextOutro\",\n    \"TextLoopAnim\",\n    \"AudioSceneEffectType\",\n    \"ToneEffectType\",\n    \"SpeechToSongType\",\n    \"VideoSceneEffectType\",\n    \"VideoCharacterEffectType\"\n]\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/audio_scene_effect.py",
    "content": "\"\"\"音频场景特效元数据\"\"\"\n\nfrom .effect_meta import EffectEnum\nfrom .effect_meta import EffectMeta, EffectParam\n\nclass AudioSceneEffectType(EffectEnum):\n    \"\"\"音频\"场景音\"效果枚举\"\"\"\n\n    # 免费特效\n    _8bit                = EffectMeta(\"8bit\", False, \"7161319747584266766\", \"5723961\", \"8d24238329ea5c250e33ae241d5adae2\", [\n                              EffectParam(\"change_voice_param_pitch_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"change_voice_param_timbre\", 1.000, 0.000, 1.000),\n                              EffectParam(\"change_voice_param_strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    change_voice_param_pitch_shift: 默认50%, 0% ~ 100%\n    change_voice_param_timbre: 默认100%, 0% ~ 100%\n    change_voice_param_strength: 默认100%, 0% ~ 100%\"\"\"\n    低保真               = EffectMeta(\"低保真\", False, \"7024390914537689614\", \"2672762\", \"7ddbd39a691a66a021f684cab756a89a\", [\n                              EffectParam(\"强弱\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强弱: 默认100%, 0% ~ 100%\"\"\"\n    合成器               = EffectMeta(\"合成器\", False, \"7018011500577034759\", \"2672753\", \"394efea5922637bcd8288e0fb3c2372e\", [\n                              EffectParam(\"强弱\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强弱: 默认100%, 0% ~ 100%\"\"\"\n    回音                 = EffectMeta(\"回音\", False, \"7018011608408396325\", \"5723901\", \"5377f66109693f2d473df5ea6ec8f791\", [\n                              EffectParam(\"change_voice_param_quantity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"change_voice_param_strength\", 0.762, 0.000, 1.000)])\n    \"\"\"参数:\n    change_voice_param_quantity: 默认80%, 0% ~ 100%\n    change_voice_param_strength: 默认76%, 0% ~ 100%\"\"\"\n    扩音器               = EffectMeta(\"扩音器\", False, \"7018011975514853924\", \"2672749\", \"13169f6ab9957ff005d316239bef0045\", [\n                              EffectParam(\"强弱\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强弱: 默认100%, 0% ~ 100%\"\"\"\n    水下                 = EffectMeta(\"水下\", False, \"7106404450444513806\", \"2673077\", \"53956694a8b68b2855faa2adc043b5b1\", [\n                              EffectParam(\"深度\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    深度: 默认50%, 0% ~ 100%\"\"\"\n    没电了               = EffectMeta(\"没电了\", False, \"7018012193769656845\", \"2672747\", \"87f91614bac060840ad5a57ef2b0c9ca\", [\n                              EffectParam(\"强弱\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强弱: 默认100%, 0% ~ 100%\"\"\"\n    环绕音               = EffectMeta(\"环绕音\", False, \"7161319847819743780\", \"5723960\", \"fa9a4cb20d3488bf79e176571d5841f5\", [\n                              EffectParam(\"change_voice_param_center_position\", 0.500, 0.000, 1.000),\n                              EffectParam(\"change_voice_param_surrounding_frequency\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    change_voice_param_center_position: 默认50%, 0% ~ 100%\n    change_voice_param_surrounding_frequency: 默认50%, 0% ~ 100%\"\"\"\n    电音                 = EffectMeta(\"电音\", False, \"7018011438379700773\", \"2672754\", \"d893a319d5175d9f09f70ddef1f79980\", [\n                              EffectParam(\"强弱\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强弱: 默认100%, 0% ~ 100%\"\"\"\n    颤音                 = EffectMeta(\"颤音\", False, \"7018011370289369637\", \"2672755\", \"c5e4874f83337e1cb9f8322fb843c901\", [\n                              EffectParam(\"频率\", 0.714, 0.000, 1.000),\n                              EffectParam(\"幅度\", 0.905, 0.000, 1.000)])\n    \"\"\"参数:\n    频率: 默认71%, 0% ~ 100%\n    幅度: 默认90%, 0% ~ 100%\"\"\"\n    麦霸                 = EffectMeta(\"麦霸\", False, \"7018012141332468260\", \"2672748\", \"3eedef5ef82b32912203a1f4fb901182\", [\n                              EffectParam(\"空间大小\", 0.052, 0.000, 1.000),\n                              EffectParam(\"强弱\", 0.450, 0.000, 1.000)])\n    \"\"\"参数:\n    空间大小: 默认5%, 0% ~ 100%\n    强弱: 默认45%, 0% ~ 100%\"\"\"\n    黑胶                 = EffectMeta(\"黑胶\", False, \"7024391411764040205\", \"2672761\", \"59e61d687a0f612bfae43bccf770f090\", [\n                              EffectParam(\"强弱\", 1.000, 0.000, 1.000),\n                              EffectParam(\"噪点\", 0.743, 0.000, 1.000)])\n    \"\"\"参数:\n    强弱: 默认100%, 0% ~ 100%\n    噪点: 默认74%, 0% ~ 100%\"\"\"\n\n    # 付费特效\n    _360度环绕音         = EffectMeta(\"360度环绕音\", True, \"7410254975328064040\", \"81298963\", \"cc1709e1be9bb76d98cf54f28efda236\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    _3d环绕音            = EffectMeta(\"3d环绕音\", True, \"7350214888242811455\", \"53187169\", \"577c3d8e5312012b1d98ba5fc0b206d0\", [\n                              EffectParam(\"强度\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认0%, 0% ~ 100%\"\"\"\n    Autotune             = EffectMeta(\"Autotune\", True, \"7360900806851170828\", \"58979352\", \"1477f4ca8307e2fa4ee2243d98d8b837\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    Livehouse            = EffectMeta(\"Livehouse\", True, \"7413661671941476904\", \"82364386\", \"d626c7854922c9fabb2a777e40f05aff\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    下雨                 = EffectMeta(\"下雨\", True, \"7375069649446113804\", \"68076030\", \"0633c88a5d6344a5ac1c00aa05e43d5f\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000),\n                              EffectParam(\"noise\", 0.743, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\n    noise: 默认74%, 0% ~ 100%\"\"\"\n    乡村大喇叭           = EffectMeta(\"乡村大喇叭\", True, \"7282691036197950009\", \"23897651\", \"c996243ac50d235f00e5931e5ecadc52\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    人声增强             = EffectMeta(\"人声增强\", True, \"7106404399756349983\", \"2673078\", \"626f988dbd2cbd17acaa24d08451e314\", [\n                              EffectParam(\"强弱\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强弱: 默认100%, 0% ~ 100%\"\"\"\n    人声增强3            = EffectMeta(\"人声增强3\", True, \"7425556785693463090\", \"86419033\", \"9324a8dd6d5f67820bb50577a129a577\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    低保真扩音器         = EffectMeta(\"低保真扩音器\", True, \"7467815819540435506\", \"103845136\", \"6955de18e7c318f8b0a91c7b06377a69\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    低音增强             = EffectMeta(\"低音增强\", True, \"7106404304247853604\", \"2673080\", \"e7c09c96d10c163269fc4e35c1f4b1ee\", [\n                              EffectParam(\"change_voice_param_strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    change_voice_param_strength: 默认100%, 0% ~ 100%\"\"\"\n    低音增强2            = EffectMeta(\"低音增强2\", True, \"7410254814539420195\", \"81298965\", \"b5b8e03035ed0e9bc1d23895366869ff\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    停车场               = EffectMeta(\"停车场\", True, \"7372150242524795446\", \"66413024\", \"d2dd515293081a8573485159db5a71e0\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    冥想                 = EffectMeta(\"冥想\", True, \"7467815749931766322\", \"103845143\", \"1785bb1a52982661c7fc475f130d1b7b\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    冰川之下             = EffectMeta(\"冰川之下\", True, \"7375068986829967883\", \"68076029\", \"6b9cda93f6d75b9a3b19b2e8eb6ad40f\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000),\n                              EffectParam(\"noise\", 0.743, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\n    noise: 默认74%, 0% ~ 100%\"\"\"\n    刮风                 = EffectMeta(\"刮风\", True, \"7375069247275274771\", \"68076028\", \"33e99402b2b056ce4f44f820ceac5cb5\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000),\n                              EffectParam(\"noise\", 0.743, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\n    noise: 默认74%, 0% ~ 100%\"\"\"\n    午夜电台             = EffectMeta(\"午夜电台\", True, \"7431088998652580378\", \"88155751\", \"94ce3c12b4f9e72469bccbba9d3c020e\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    噪音混响             = EffectMeta(\"噪音混响\", True, \"7382844688987853349\", \"72110975\", \"3b3b09b530b0a64666f1c5b6d20d4018\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    回声                 = EffectMeta(\"回声\", True, \"7425556970339308083\", \"86419034\", \"edbfe18f8479b3da7e091b6d8bb2b592\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    回忆人声             = EffectMeta(\"回忆人声\", True, \"7400653027557773865\", \"78208789\", \"5a1681f3a09b861ef3e4a65b2f9b794d\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    地狱                 = EffectMeta(\"地狱\", True, \"7375069113988682281\", \"68076027\", \"5ec03c41ada16530949daa4106c85a90\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000),\n                              EffectParam(\"noise\", 0.743, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\n    noise: 默认74%, 0% ~ 100%\"\"\"\n    复古收音机           = EffectMeta(\"复古收音机\", True, \"7350215379714576907\", \"53187166\", \"301d642d131aabff7ea8c3b717b36a79\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    复古收音机2          = EffectMeta(\"复古收音机2\", True, \"7431088943560397339\", \"88155750\", \"ef070459bb3eb2c02b0d65277369424c\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    复古电视             = EffectMeta(\"复古电视\", True, \"7431089082647712282\", \"88155749\", \"a2e9b297a1acdb997c3f71bb4273bf77\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    失真电子             = EffectMeta(\"失真电子\", True, \"7350215296801575443\", \"53187167\", \"a1c00df42076ed1bd6a81f2d30b94566\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    宽阔人声             = EffectMeta(\"宽阔人声\", True, \"7400653260320674343\", \"78208785\", \"8472328fd44653bd18d871357da26dd7\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    对讲机               = EffectMeta(\"对讲机\", True, \"7350214704284832275\", \"53187168\", \"016dbdb3c786896c92bb936ece11acf6\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    山洞                 = EffectMeta(\"山洞\", True, \"7392070412865114659\", \"75411128\", \"4335ffa39cfdd4b7635fb6beb49dea80\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    广播                 = EffectMeta(\"广播\", True, \"7418519152467382794\", \"84093261\", \"d3378900221ac03887cb608f1bae981c\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    延迟回声             = EffectMeta(\"延迟回声\", True, \"7425556912709571110\", \"86419029\", \"26201a59916f7616c4706788aceee188\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    恐怖音效             = EffectMeta(\"恐怖音效\", True, \"7431088801579012645\", \"88155748\", \"5e8778aa2e2e8270fba1b5e677b8e5fc\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000),\n                              EffectParam(\"背景音\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\n    背景音: 默认50%, 0% ~ 100%\"\"\"\n    房间                 = EffectMeta(\"房间\", True, \"7282691385872880165\", \"23880629\", \"639f5c0c6b20418aaeb0e144da21151c\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    捂嘴                 = EffectMeta(\"捂嘴\", True, \"7372405649684042292\", \"66552320\", \"9f9a8270c0005a480547d6ddf2a9293a\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    教堂                 = EffectMeta(\"教堂\", True, \"7282691146759803429\", \"23882063\", \"96dc71756d0025e96a504b42d988b2ac\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    教室                 = EffectMeta(\"教室\", True, \"7282687783833965113\", \"23897703\", \"678c14a6f63f75e03daa062a254081f7\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    时光扭曲             = EffectMeta(\"时光扭曲\", True, \"7410254477246075407\", \"81298964\", \"b4abdda11160d663308aeb0dab6063de\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    森林                 = EffectMeta(\"森林\", True, \"7413270049080742415\", \"82210570\", \"147be719531ade36bd6959338a3caa29\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000),\n                              EffectParam(\"背景音\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\n    背景音: 默认50%, 0% ~ 100%\"\"\"\n    楼道                 = EffectMeta(\"楼道\", True, \"7410254596020376064\", \"81298960\", \"c1806a2578d126dd74433640f5e09bab\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    楼道回声             = EffectMeta(\"楼道回声\", True, \"7425556847509115401\", \"86419032\", \"4e418df9c1cb821c20e10fcf304b7e93\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    氦气                 = EffectMeta(\"氦气\", True, \"7400653188803596836\", \"78208787\", \"9c59009886c059e20d3914089afbc82f\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    沙漠                 = EffectMeta(\"沙漠\", True, \"7375069515530375691\", \"68076025\", \"5bd2772879c6273189d3fc7f07581e71\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000),\n                              EffectParam(\"noise\", 0.743, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\n    noise: 默认74%, 0% ~ 100%\"\"\"\n    洞穴回声             = EffectMeta(\"洞穴回声\", True, \"7425557093597319689\", \"86419031\", \"bec3da95c2b4c70e8e1202972aeaf8e3\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    派对                 = EffectMeta(\"派对\", True, \"7381685442795541042\", \"71718513\", \"723386ab87f938779a3369436234d903\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000),\n                              EffectParam(\"noise\", 0.743, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\n    noise: 默认74%, 0% ~ 100%\"\"\"\n    浴室                 = EffectMeta(\"浴室\", True, \"7392070514686038543\", \"75411129\", \"543fa76977e80084f25067c94e4c08a8\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    深海回声             = EffectMeta(\"深海回声\", True, \"7350215168413929995\", \"53187172\", \"37a16a2dc77540b7d70fe301e482d4f2\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    深邃人声             = EffectMeta(\"深邃人声\", True, \"7400653111255110183\", \"78208786\", \"1d79f2c0660e1f4a2441255b9e34be6e\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    清澈人声             = EffectMeta(\"清澈人声\", True, \"7410254648440787456\", \"81298967\", \"b99fbb6dd42a759572f4ba13efb516ae\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    演唱会               = EffectMeta(\"演唱会\", True, \"7413661596611777076\", \"82364387\", \"8ceb67756bd822b7ee9728903c8e3efa\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    演讲舞台             = EffectMeta(\"演讲舞台\", True, \"7431088715092464155\", \"88155747\", \"6452fbaa8d66c01c491fc6d5816afc77\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    环绕回声             = EffectMeta(\"环绕回声\", True, \"7425557028694659635\", \"86419030\", \"0fe55903f86c3fdad33275b04c04cba0\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    电台播音             = EffectMeta(\"电台播音\", True, \"7418519267659747877\", \"84093262\", \"752c3df02caa20b12bfa3154ed025bff\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    电话                 = EffectMeta(\"电话\", True, \"7264894634285863483\", \"20255003\", \"5da5a98b8c926c0dcc1c3c8bc3f3012f\", [\n                              EffectParam(\"强弱\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    强弱: 默认70%, 0% ~ 100%\"\"\"\n    留声机               = EffectMeta(\"留声机\", True, \"7282687663872676408\", \"23897797\", \"e692fae669650c948451b5811a04e7e6\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    百老汇               = EffectMeta(\"百老汇\", True, \"7372150379150053907\", \"66413025\", \"73e3a35496b9766d0400165844be72f1\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    空灵感               = EffectMeta(\"空灵感\", True, \"7350215092975178252\", \"53187171\", \"aa1887a8b3375d20df6bf9438d62083a\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    空谷回声             = EffectMeta(\"空谷回声\", True, \"7350214991628210727\", \"53187170\", \"9913daa32167a17c1f41ad2f5596c411\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    立体声               = EffectMeta(\"立体声\", True, \"7418519209996456498\", \"84093260\", \"4381314f6906919781ea17c0d51f36a0\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    管道                 = EffectMeta(\"管道\", True, \"7410254536234766863\", \"81298962\", \"37233b9d5efed3324a4c6a9d05831f40\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    老式电话             = EffectMeta(\"老式电话\", True, \"7282691476843139621\", \"23880011\", \"2eb835175e1e72e9d86b09bf513077cf\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    蚊子变声             = EffectMeta(\"蚊子变声\", True, \"7467815685876355622\", \"103845137\", \"b34cc53f1adf2f9decb0111a0082eb0a\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    言灵术               = EffectMeta(\"言灵术\", True, \"7382844601435951653\", \"72110974\", \"7184386e75226a36942c60a5d5bb5618\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    豪宅回声             = EffectMeta(\"豪宅回声\", True, \"7360900963294515775\", \"58979353\", \"7c20b5fba991f3188f14d7cdb0de1fa1\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    超市广播             = EffectMeta(\"超市广播\", True, \"7431088660709118514\", \"88155744\", \"14a9154302878be941c993ff6dfd0f3d\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000),\n                              EffectParam(\"背景音\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\n    背景音: 默认50%, 0% ~ 100%\"\"\"\n    超级混响             = EffectMeta(\"超级混响\", True, \"7400652941318689299\", \"78208790\", \"c1a87e3affc5c812609b4eded7609e81\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    超重低音             = EffectMeta(\"超重低音\", True, \"7410254867232461364\", \"81298961\", \"db9c654a48e01c71bfb097d70d21a42d\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    迷幻                 = EffectMeta(\"迷幻\", True, \"7410254415921156643\", \"81298966\", \"1f549f0d21a5e7729268e6d443857364\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    迷幻电子             = EffectMeta(\"迷幻电子\", True, \"7375069381769826879\", \"68076026\", \"65ef01ba4626318fab4f007fec136e1e\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000),\n                              EffectParam(\"noise\", 0.743, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\n    noise: 默认74%, 0% ~ 100%\"\"\"\n    闷响                 = EffectMeta(\"闷响\", True, \"7413269872307606016\", \"82210571\", \"8d966ef5950315b96dcd02bfc511d5e0\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    震撼全景音           = EffectMeta(\"震撼全景音\", True, \"7400653333456753163\", \"78208788\", \"1b65723d3e25e82a3ab99af289728498\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    音乐厅               = EffectMeta(\"音乐厅\", True, \"7404798608395997723\", \"79701150\", \"e819bbe1cd586bd9a2118ca39758ac22\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    颤抖电音             = EffectMeta(\"颤抖电音\", True, \"7467815889602089523\", \"103845138\", \"8fbf024a96e0c659e8b3d3ca975f1042\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\"\"\"\n    马路边               = EffectMeta(\"马路边\", True, \"7413269976628335119\", \"82210569\", \"1c0c1e3be5ead093b685f451033de74e\", [\n                              EffectParam(\"强度\", 1.000, 0.000, 1.000),\n                              EffectParam(\"背景音\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    强度: 默认100%, 0% ~ 100%\n    背景音: 默认50%, 0% ~ 100%\"\"\"\n    高解析人声           = EffectMeta(\"高解析人声\", True, \"7410254695169528355\", \"81298968\", \"3bcf82243ef574064bb53f99a2f59d5d\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n    高音增强             = EffectMeta(\"高音增强\", True, \"7410254923037676047\", \"81298959\", \"59b5cc1fc51c2557d9d20e0d7494edc8\", [\n                              EffectParam(\"strength\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    strength: 默认100%, 0% ~ 100%\"\"\"\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/effect_meta.py",
    "content": "\"\"\"元数据类型定义\"\"\"\n\nfrom enum import Enum\n\nfrom typing import List, Dict, Any\nfrom typing import TypeVar, Optional\n\nclass EffectParam:\n    \"\"\"特效参数信息\"\"\"\n\n    name: str\n    \"\"\"参数名称\"\"\"\n    default_value: float\n    \"\"\"默认值\"\"\"\n    min_value: float\n    \"\"\"最小值\"\"\"\n    max_value: float\n    \"\"\"最大值\"\"\"\n\n    def __init__(self, name: str, default_value: float, min_value: float, max_value: float):\n        self.name = name\n        self.default_value = default_value\n        self.min_value = min_value\n        self.max_value = max_value\n\nclass EffectParamInstance(EffectParam):\n    \"\"\"特效参数实例\"\"\"\n\n    index: int\n    \"\"\"参数索引\"\"\"\n    value: float\n    \"\"\"当前值\"\"\"\n\n    def __init__(self, meta: EffectParam, index: int, value: float):\n        super().__init__(meta.name, meta.default_value, meta.min_value, meta.max_value)\n        self.index = index\n        self.value = value\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"default_value\": self.default_value,\n            \"max_value\": self.max_value,\n            \"min_value\": self.min_value,\n            \"name\": self.name,\n            \"parameterIndex\": self.index,\n            \"portIndex\": 0,\n            \"value\": self.value\n        }\n\n# 基础特效元数据, 直接用于滤镜/文字/视频特效\nclass EffectMeta:\n    \"\"\"特效元数据, 直接用于滤镜/文字/视频特效\"\"\"\n\n    name: str\n    \"\"\"效果名称\"\"\"\n    is_vip: bool\n    \"\"\"是否为VIP特权\"\"\"\n\n    resource_id: str\n    \"\"\"资源ID\"\"\"\n    effect_id: str\n    \"\"\"效果ID\"\"\"\n    md5: str\n\n    params: List[EffectParam]\n    \"\"\"效果的参数信息\"\"\"\n\n    def __init__(self, name: str, is_vip: bool, resource_id: str, effect_id: str, md5: str, params: List[EffectParam] = []):\n        self.name = name\n        self.is_vip = is_vip\n        self.resource_id = resource_id\n        self.effect_id = effect_id\n        self.md5 = md5\n        self.params = params\n\n    def parse_params(self, params: Optional[List[Optional[float]]]) -> List[EffectParamInstance]:\n        \"\"\"解析参数列表(范围0~100), 返回参数实例列表\"\"\"\n        ret: List[EffectParamInstance] = []\n\n        if params is None: params = []\n        for i, param in enumerate(self.params):\n            val = param.default_value\n            if i < len(params):\n                input_v = params[i]\n                if input_v is not None:\n                    if input_v < 0 or input_v > 100:\n                        raise ValueError(\"Invalid parameter value %f within %s\" % (input_v, str(param)))\n                    val = param.min_value + (param.max_value - param.min_value) * input_v / 100.0  # 从0~100映射到实际值\n            ret.append(EffectParamInstance(param, i, val))\n        return ret\n\n\nEffectEnumSubclass = TypeVar(\"EffectEnumSubclass\", bound=\"EffectEnum\")\n\nclass EffectEnum(Enum):\n    \"\"\"特效枚举基类, 提供一个`from_name`方法用于根据名称获取特效元数据\"\"\"\n\n    @classmethod\n    def from_name(cls: \"type[EffectEnumSubclass]\", name: str) -> EffectEnumSubclass:\n        \"\"\"根据名称获取特效元数据, 忽略大小写、空格和下划线\n\n        Args:\n            name (str): 特效名称\n\n        Raises:\n            `ValueError`: 特效名称不存在\n        \"\"\"\n        name = name.lower().replace(\" \", \"\").replace(\"_\", \"\")\n        for effect in cls:\n            if effect.name.lower().replace(\" \", \"\").replace(\"_\", \"\") == name:\n                return effect\n        raise ValueError(f\"Effect named '{name}' not found\")\n\n# 动画元数据\nclass AnimationMeta:\n    \"\"\"动画元数据, 用于视频/文字片段的入场/出场/组合动画\"\"\"\n\n    title: str\n    is_vip: bool\n    duration: int\n    \"\"\"效果默认时长, 单位为微秒\"\"\"\n\n    resource_id: str\n    effect_id: str\n    md5: str\n\n    def __init__(self, title: str, is_vip: bool, duration: float, resource_id: str, effect_id: str, md5: str):\n        self.title = title\n        self.is_vip = is_vip\n        self.duration = int(round(duration * 1e6))\n        self.resource_id = resource_id\n        self.effect_id = effect_id\n        self.md5 = md5\n\n# 蒙版元数据\nclass MaskMeta:\n    \"\"\"蒙版元数据\"\"\"\n\n    name: str\n    \"\"\"转场名称\"\"\"\n\n    resource_type: str\n    \"\"\"资源类型, 与蒙版形状相关\"\"\"\n\n    resource_id: str\n    \"\"\"资源ID\"\"\"\n    effect_id: str\n    \"\"\"效果ID\"\"\"\n    md5: str\n\n    default_aspect_ratio: float\n    \"\"\"默认宽高比(宽高都是相对素材的比例)\"\"\"\n\n    def __init__(self, name: str, resource_type: str, resource_id: str, effect_id: str, md5: str, default_aspect_ratio: float):\n        self.name = name\n        self.resource_type = resource_type\n        self.resource_id = resource_id\n        self.effect_id = effect_id\n        self.md5 = md5\n\n        self.default_aspect_ratio = default_aspect_ratio\n\n# 转场元数据\nclass TransitionMeta:\n    \"\"\"转场元数据\"\"\"\n\n    name: str\n    \"\"\"转场名称\"\"\"\n    is_vip: bool\n    \"\"\"是否为VIP特权\"\"\"\n\n    resource_id: str\n    \"\"\"资源ID\"\"\"\n    effect_id: str\n    \"\"\"效果ID\"\"\"\n    md5: str\n\n    default_duration: int\n    \"\"\"默认持续时间, 单位为微秒\"\"\"\n    is_overlap: bool\n    \"\"\"是否允许重叠(?)\"\"\"\n\n    def __init__(self, name: str, is_vip: bool, resource_id: str, effect_id: str, md5: str, default_duration: float, is_overlap: bool):\n        self.name = name\n        self.is_vip = is_vip\n        self.resource_id = resource_id\n        self.effect_id = effect_id\n        self.md5 = md5\n\n        self.default_duration = int(round(default_duration * 1e6))\n        self.is_overlap = is_overlap\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/filter_meta.py",
    "content": "\"\"\"滤镜效果元数据\"\"\"\n\nfrom .effect_meta import EffectEnum\nfrom .effect_meta import EffectMeta, EffectParam\n\nclass FilterType(EffectEnum):\n    \"\"\"滤镜效果类型\"\"\"\n\n    # 免费特效\n    _1980                = EffectMeta(\"1980\", False, \"7127828208690433311\", \"7127828208690433311\", \"d3595847ee8348c69c6037b8003a76e9\", [])\n    ABG                  = EffectMeta(\"ABG\", False, \"7127679308897832206\", \"7127679308897832206\", \"d07b36b0b8e1893ce49df327ba926804\", [])\n    Ditto                = EffectMeta(\"Ditto\", False, \"7195816046077496635\", \"7195816046077496635\", \"09d18408ca0dee53716c3a4f41dd35e1\", [])\n    KE1                  = EffectMeta(\"KE1\", False, \"7127819154018536741\", \"7127819154018536741\", \"5ece7eff894e25a356b9111e78478c56\", [])\n    KV5D                 = EffectMeta(\"KV5D\", False, \"7127578859217620254\", \"7127578859217620254\", \"57940599e2c8d85a7f73824c7360bfca\", [])\n    Lofi_II              = EffectMeta(\"Lofi II\", False, \"7232216810031025468\", \"7232216810031025468\", \"7d5f9e106b93bf758725da54daa1843f\", [])\n    VHS_III              = EffectMeta(\"VHS III\", False, \"7127669764905782542\", \"7127669764905782542\", \"c8d7adad4773fccc2128d8eafa569572\", [])\n    三洋VPC              = EffectMeta(\"三洋VPC\", False, \"7127669338089311495\", \"7127669338089311495\", \"73c77a4b9c5085af6175a523d24bc7c6\", [])\n    书意                 = EffectMeta(\"书意\", False, \"7368493100127292723\", \"7368493100127292723\", \"3e20d8ccc31ca6a495b3f8e2ff116744\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    亢奋                 = EffectMeta(\"亢奋\", False, \"7166472327801097476\", \"7166472327801097476\", \"93c16f48d5d45cb663270a82a06f72b8\", [])\n    亮夏                 = EffectMeta(\"亮夏\", False, \"7505804389395877120\", \"7505804389395877120\", \"839755ea45f49179790ae2d9a00810b3\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    亮肤                 = EffectMeta(\"亮肤\", False, \"7127655008715230495\", \"7127655008715230495\", \"2aaa463c5deee34e73384d549edc7c15\", [])\n    仲夏绿光             = EffectMeta(\"仲夏绿光\", False, \"7127675970252754189\", \"7127675970252754189\", \"970f4b2c797e2890787f7420d8c0613b\", [])\n    似锦                 = EffectMeta(\"似锦\", False, \"7188014191834418493\", \"7188014191834418493\", \"869cb94d6bbec5c6b771092ec1ef8cfe\", [])\n    低保真               = EffectMeta(\"低保真\", False, \"7304170509661506843\", \"7304170509661506843\", \"db39172ffff69e973886c2e8598dbc75\", [])\n    侘寂灰               = EffectMeta(\"侘寂灰\", False, \"7127609569416711455\", \"7127609569416711455\", \"17547e013b45f87dc7e4e1f7059d7e62\", [])\n    元气新年             = EffectMeta(\"元气新年\", False, \"7457859598221987110\", \"7457859598221987110\", \"659b4fa52fb892852dbab15dfc4717e2\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    克洛伊               = EffectMeta(\"克洛伊\", False, \"7366640728493002018\", \"7366640728493002018\", \"2740205bf2c6b79d64d84548a6ed5e21\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    冬日烧烤             = EffectMeta(\"冬日烧烤\", False, \"7449704838763466035\", \"7449704838763466035\", \"bcd542f8af28c382cdacb39b588c4bbe\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    冬漫                 = EffectMeta(\"冬漫\", False, \"7302324323270872346\", \"7302324323270872346\", \"a883a2e3b66f3e9c7bcaa1672e51ee9a\", [])\n    冬离                 = EffectMeta(\"冬离\", False, \"7300786822068571418\", \"7300786822068571418\", \"b5389102a96557d6c03047e814756936\", [])\n    冰火                 = EffectMeta(\"冰火\", False, \"7303812389177265447\", \"7303812389177265447\", \"61065880d8580b8b1a206de0b0773571\", [])\n    冰肌                 = EffectMeta(\"冰肌\", False, \"7199089344756370743\", \"7199089344756370743\", \"18c6b91685b82ef1cd3d7b7261f997ea\", [])\n    冷气机               = EffectMeta(\"冷气机\", False, \"7263359186883366155\", \"7263359186883366155\", \"740c1bfa9cb365344bd8a51bf7ef037b\", [])\n    冷白                 = EffectMeta(\"冷白\", False, \"7127614731187178783\", \"7127614731187178783\", \"a47ab1d817480c87ff6de4c9ba10b204\", [])\n    冷蓝                 = EffectMeta(\"冷蓝\", False, \"7127618237117877518\", \"7127618237117877518\", \"accf4492064dabe05dce1c28457b6f89\", [])\n    净白肤               = EffectMeta(\"净白肤\", False, \"7411580367452376361\", \"7411580367452376361\", \"e03e1f71900c5bc97f5c80059161429a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    凛冬                 = EffectMeta(\"凛冬\", False, \"7449996162343390473\", \"7449996162343390473\", \"f4cf3b6ee689d7dca67dc9e2d3cc2303\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    凝黛                 = EffectMeta(\"凝黛\", False, \"7298279202350976282\", \"7298279202350976282\", \"7bad3476dce5691d9e8f90f50122ed33\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    初恋                 = EffectMeta(\"初恋\", False, \"7195812984306814267\", \"7195812984306814267\", \"9fdc53e8dab072725d9bb088b8930869\", [])\n    千玺IXU              = EffectMeta(\"千玺IXU\", False, \"7127824119294364959\", \"7127824119294364959\", \"12af151fa57d3226ee3781a070ae54a6\", [])\n    千里江山             = EffectMeta(\"千里江山\", False, \"7208495854938901793\", \"7208495854938901793\", \"e084a0e8da69837502a97b63bf85b0a8\", [])\n    千金妝               = EffectMeta(\"千金妝\", False, \"7370585884078443802\", \"7370585884078443802\", \"e814069ba1dea090eeb44b397eeac252\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    卡露尔               = EffectMeta(\"卡露尔\", False, \"7301224597033192716\", \"7301224597033192716\", \"c95b8177a1b57996fcdb4b04d789ac28\", [])\n    即刻春光             = EffectMeta(\"即刻春光\", False, \"7127675868641594654\", \"7127675868641594654\", \"ba343f6bb3720ba81a8662d669b6b743\", [])\n    原木                 = EffectMeta(\"原木\", False, \"7127675195812351239\", \"7127675195812351239\", \"a2cb1c6dd47c2ce4aeb0dd7303353438\", [])\n    去黄增质             = EffectMeta(\"去黄增质\", False, \"7438854064458239258\", \"7438854064458239258\", \"008490b1e0c2a608966ab708b176584a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    去黄提亮             = EffectMeta(\"去黄提亮\", False, \"7438853477616340250\", \"7438853477616340250\", \"db9162c29361fbc85838182ec6a8fd51\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    古早韩系             = EffectMeta(\"古早韩系\", False, \"7462953965160893723\", \"7462953965160893723\", \"e59a2644bdd93eba36bfc8b8eb96c9ca\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    古早韩风             = EffectMeta(\"古早韩风\", False, \"7473168869222370571\", \"7473168869222370571\", \"2a0b58004ab4c613cf6da21d79143e53\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    古罗马               = EffectMeta(\"古罗马\", False, \"7242212640498568503\", \"7242212640498568503\", \"3d438e293e65d63e71af3db73b03bc4e\", [])\n    古风影视             = EffectMeta(\"古风影视\", False, \"7404104823563472137\", \"7404104823563472137\", \"42a7457ab2132e7da56676b0112f0a80\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    告白                 = EffectMeta(\"告白\", False, \"7437136821512949007\", \"7437136821512949007\", \"377e1a6c5d32f0ef99839ddd35f8d3aa\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    喜市                 = EffectMeta(\"喜市\", False, \"7185440129442417931\", \"7185440129442417931\", \"5210a45933f4265e5f262d3018a78d64\", [])\n    喜庆胶片             = EffectMeta(\"喜庆胶片\", False, \"7451265649273261363\", \"7451265649273261363\", \"b507e0b53989990c855e33bbfd18d9f6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    四喜                 = EffectMeta(\"四喜\", False, \"7312102522733268251\", \"7312102522733268251\", \"7ae54f18e5dc446f9269686b7d14f404\", [])\n    圣诞灯光             = EffectMeta(\"圣诞灯光\", False, \"7429295645669756195\", \"7429295645669756195\", \"d66aa7fafbb00c5b7ebb913cce97583f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    圣诞灯光II           = EffectMeta(\"圣诞灯光II\", False, \"7429295455953046818\", \"7429295455953046818\", \"fc1cb16d78ae2d3c57e50d2651e44054\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    圣诞灯光III          = EffectMeta(\"圣诞灯光III\", False, \"7429296137275755810\", \"7429296137275755810\", \"804cb9914032bb0bd58ad449e28302e7\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    复古工业             = EffectMeta(\"复古工业\", False, \"7127608212483820837\", \"7127608212483820837\", \"cf8d236e185f6b174544151be3baba93\", [])\n    夏日小美好           = EffectMeta(\"夏日小美好\", False, \"7494125821032975642\", \"7494125821032975642\", \"985ce1e590cac79022c0b162c10080cf\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    夏日清凉             = EffectMeta(\"夏日清凉\", False, \"7505632228659973416\", \"7505632228659973416\", \"90897cbdc876de7beba905db2d6b3c40\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    夏日辣妹             = EffectMeta(\"夏日辣妹\", False, \"7502729392179776779\", \"7502729392179776779\", \"b617fc9280cb849b8893d052ab937741\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    夏日风吟             = EffectMeta(\"夏日风吟\", False, \"7127684611802418445\", \"7127684611802418445\", \"3120cfc3dd0f1fe2090749012d60a20b\", [])\n    大唐盛世             = EffectMeta(\"大唐盛世\", False, \"7493423027670109449\", \"7493423027670109449\", \"0dfa10fafe76d2947b7cf1e3e50a5003\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    奈良                 = EffectMeta(\"奈良\", False, \"7351684015906147621\", \"7351684015906147621\", \"2a7ada2a5ac7a8742b37c3bc794b07b0\", [])\n    奥本海默             = EffectMeta(\"奥本海默\", False, \"7271142654505766183\", \"7271142654505766183\", \"2a1f03001d0db5f28f73bee7bc00ccf7\", [])\n    奶杏                 = EffectMeta(\"奶杏\", False, \"7297134192100379938\", \"7297134192100379938\", \"89ae84878534d61d0b7d62ba395fc8b7\", [])\n    奶油                 = EffectMeta(\"奶油\", False, \"7127618513048571173\", \"7127618513048571173\", \"dd39d5622353128e5f7c1de20020359a\", [])\n    奶油肤               = EffectMeta(\"奶油肤\", False, \"7463296170950020403\", \"7463296170950020403\", \"55291539636f958d2bca4ea9958efbad\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    奶绿                 = EffectMeta(\"奶绿\", False, \"7127684319300029733\", \"7127684319300029733\", \"8924565ec41520d2a8a88d846069768f\", [])\n    姜饼红               = EffectMeta(\"姜饼红\", False, \"7127624030135389471\", \"7127624030135389471\", \"22925be3f36caa278eb5df6a0278c636\", [])\n    威尼之都             = EffectMeta(\"威尼之都\", False, \"7406553962922429735\", \"7406553962922429735\", \"18606fd2c90ef2689278dc26e2cec94b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    安愉                 = EffectMeta(\"安愉\", False, \"7190242827543022880\", \"7190242827543022880\", \"ed7e951505cbf70dee0f4d144d239828\", [])\n    宫崎漫夏             = EffectMeta(\"宫崎漫夏\", False, \"7500223670678228262\", \"7500223670678228262\", \"2bb28eb6cdb9fd43ae41937e3a47cdb1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    富士CC_II            = EffectMeta(\"富士CC II\", False, \"7268561903721401641\", \"7268561903721401641\", \"cb92e0b13cd9b9a3aca8bb00b1a9c328\", [])\n    寻荷                 = EffectMeta(\"寻荷\", False, \"7295362817874480425\", \"7295362817874480425\", \"0230f2fb3e9ea72df20f8819542b4410\", [])\n    小镇                 = EffectMeta(\"小镇\", False, \"7127654151688965384\", \"7127654151688965384\", \"fc386676ee752b20918fb61c42c28a7b\", [])\n    山系                 = EffectMeta(\"山系\", False, \"7127662738884545806\", \"7127662738884545806\", \"d9d5332152b0f951229402d7d840263e\", [])\n    巧克力               = EffectMeta(\"巧克力\", False, \"7363220647767592243\", \"7363220647767592243\", \"6e513d9dcb9357219e35097b945a3881\", [])\n    布兰卡               = EffectMeta(\"布兰卡\", False, \"7242208887883992381\", \"7242208887883992381\", \"1774e2dd335a10a5f3174062c08403a2\", [])\n    布朗                 = EffectMeta(\"布朗\", False, \"7273777590102527290\", \"7273777590102527290\", \"b6bee72111d56fd16679adcf9543a05a\", [])\n    希望                 = EffectMeta(\"希望\", False, \"7271141541521968396\", \"7271141541521968396\", \"fdb975090cbdc5a5fb2e56ae982514a2\", [])\n    幽蓝                 = EffectMeta(\"幽蓝\", False, \"7330441280016715062\", \"7330441280016715062\", \"9db4cff7dd63bf1a17ced3728ca02e5e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    彩果                 = EffectMeta(\"彩果\", False, \"7175101541198679353\", \"7175101541198679353\", \"b5d50eae497be9aab963a96993a80df1\", [])\n    彩檐                 = EffectMeta(\"彩檐\", False, \"7226234868059917628\", \"7226234868059917628\", \"6c4502f0bd36c8d702db0c2b2f9ad18a\", [])\n    影叙                 = EffectMeta(\"影叙\", False, \"7349953761059638555\", \"7349953761059638555\", \"72e02210098c120bbcddca245656aaca\", [])\n    微澜                 = EffectMeta(\"微澜\", False, \"7338406163848940840\", \"7338406163848940840\", \"7e302ecfc744cbb1d38d71533214b257\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    德古拉               = EffectMeta(\"德古拉\", False, \"7127678346472819982\", \"7127678346472819982\", \"f8bfba1ebdb6c5054eec4eb1e9433e72\", [])\n    快照I                = EffectMeta(\"快照I\", False, \"7143537677655100709\", \"7143537677655100709\", \"526ce6c2fd2228cda17fc5f64a7267cf\", [])\n    忽风                 = EffectMeta(\"忽风\", False, \"7330123964305378586\", \"7330123964305378586\", \"c455bc6760bd9829f2d467866527a1b1\", [])\n    情感电影             = EffectMeta(\"情感电影\", False, \"7505461557237730598\", \"7505461557237730598\", \"f587d5a01d40ac69f26b9cc59a969822\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    情绪电影             = EffectMeta(\"情绪电影\", False, \"7420000959759224118\", \"7420000959759224118\", \"fd27b358349ee85c7a7241316534fef6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    扫街                 = EffectMeta(\"扫街\", False, \"7376146305736822028\", \"7376146305736822028\", \"fd2b6e08a9c7a29d5052c48fe10ecdfb\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    探店博主III          = EffectMeta(\"探店博主III\", False, \"7411911267859860746\", \"7411911267859860746\", \"400bd4f181603f72b4ca0174e0e62781\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    摩卡灰               = EffectMeta(\"摩卡灰\", False, \"7437011056653847808\", \"7437011056653847808\", \"e45427030aa2609974234c68b336511b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    敦刻尔克             = EffectMeta(\"敦刻尔克\", False, \"7127568601921408293\", \"7127568601921408293\", \"6b4a7017eecf10aa48e3f93586e04a6a\", [])\n    料理                 = EffectMeta(\"料理\", False, \"7127656350833806622\", \"7127656350833806622\", \"31ebabffaf3ed8653e0db318dfbeaa9d\", [])\n    新年电影             = EffectMeta(\"新年电影\", False, \"7445550576210873663\", \"7445550576210873663\", \"56bd30429814522169ee00614a7c3a05\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    新闪                 = EffectMeta(\"新闪\", False, \"7342395072199019803\", \"7342395072199019803\", \"9c3858dfbdd548bef8a012d55f795b47\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    日出                 = EffectMeta(\"日出\", False, \"7325383700240256296\", \"7325383700240256296\", \"628b7f7c8a7fea3f89edaff21f4c9d25\", [])\n    日系奶油             = EffectMeta(\"日系奶油\", False, \"7127664177870671135\", \"7127664177870671135\", \"8e779b2183d399fb192decf3616f8c27\", [])\n    日落橘               = EffectMeta(\"日落橘\", False, \"7127669630667066655\", \"7127669630667066655\", \"1ff996d1537f8a485f193314861c6b5b\", [])\n    日落飞车             = EffectMeta(\"日落飞车\", False, \"7505662247407013135\", \"7505662247407013135\", \"f077d7a11fa93abd6f0bd8786fe17fc0\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    旧乐园               = EffectMeta(\"旧乐园\", False, \"7239977329668263227\", \"7239977329668263227\", \"604ff64bec0ae328aa1d1c19fb89bfa2\", [])\n    旧时代I              = EffectMeta(\"旧时代I\", False, \"7232218563270954300\", \"7232218563270954300\", \"9532fcb213a6eb45c2441d8d0466f9ef\", [])\n    明晰                 = EffectMeta(\"明晰\", False, \"7367715162964446516\", \"7367715162964446516\", \"c622c908228fb2796e141f973b9746e9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    星云                 = EffectMeta(\"星云\", False, \"7127672042069036319\", \"7127672042069036319\", \"b73b7e9c33f8e387cbb579a5c11f01b9\", [])\n    春日绿妍             = EffectMeta(\"春日绿妍\", False, \"7463345622440037658\", \"7463345622440037658\", \"0fa37f0c990e27a8029d65d07f84be23\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    昭和夏               = EffectMeta(\"昭和夏\", False, \"7505660075252485376\", \"7505660075252485376\", \"08e5c5e7bfba6a18dd67cd1c8eefeb1e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴好春日             = EffectMeta(\"晴好春日\", False, \"7468552996008299791\", \"7468552996008299791\", \"6ee5038f6fe86df6b95594bcdbe5075a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴沐                 = EffectMeta(\"晴沐\", False, \"7342503492311076137\", \"7342503492311076137\", \"1280aaabcbcdb3e0f2d5e39947d330d8\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴研                 = EffectMeta(\"晴研\", False, \"7472763263684578572\", \"7472763263684578572\", \"696738f25d65091f3a1d77bda171d91c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴颜                 = EffectMeta(\"晴颜\", False, \"7297968738131873035\", \"7297968738131873035\", \"97b54d7d49c75162656379068221e3a1\", [])\n    暖食                 = EffectMeta(\"暖食\", False, \"7127653100269210916\", \"7127653100269210916\", \"47b7c1b9f560b85b528c24f7cbbb6cd4\", [])\n    暗夜                 = EffectMeta(\"暗夜\", False, \"7127823728070659358\", \"7127823728070659358\", \"788c476ccf299db46035bd930d90c342\", [])\n    暗调氛围             = EffectMeta(\"暗调氛围\", False, \"7463118934061993242\", \"7463118934061993242\", \"b5be681b2126319c4f831d4e0f8cfe31\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暗雅                 = EffectMeta(\"暗雅\", False, \"7127656352410848548\", \"7127656352410848548\", \"c5207d449099512b7efd9419c75378f7\", [])\n    暮光                 = EffectMeta(\"暮光\", False, \"7242211155131862332\", \"7242211155131862332\", \"b5e36cb0438d74eac97fb6c7ec66260f\", [])\n    暮色                 = EffectMeta(\"暮色\", False, \"7127594686541237535\", \"7127594686541237535\", \"adbf6d3bbbd6a6d4525300d78323a7d2\", [])\n    月升之国             = EffectMeta(\"月升之国\", False, \"7127819487419567373\", \"7127819487419567373\", \"46638e887295beddd23c84206af26a1b\", [])\n    月夜                 = EffectMeta(\"月夜\", False, \"7143532202112912670\", \"7143532202112912670\", \"67cfe630584f194d007e3001052f5094\", [])\n    未央                 = EffectMeta(\"未央\", False, \"7340282260312182050\", \"7340282260312182050\", \"901d60cca1c56063279941926ed877be\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    朱栗                 = EffectMeta(\"朱栗\", False, \"7299055174880988479\", \"7299055174880988479\", \"d2fb23b72e1ed1ad368ab20c87ae5271\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    松果棕               = EffectMeta(\"松果棕\", False, \"7127669342325443854\", \"7127669342325443854\", \"d68bcfc1e312f0e3e52f164a59cff686\", [])\n    林间                 = EffectMeta(\"林间\", False, \"7127663793827564808\", \"7127663793827564808\", \"c1ff0cd2a3eea239334b9604d31b4947\", [])\n    柠檬青               = EffectMeta(\"柠檬青\", False, \"7127676358766923016\", \"7127676358766923016\", \"0437481ce079dd3f1160351c1038d628\", [])\n    梵时                 = EffectMeta(\"梵时\", False, \"7341767383259942155\", \"7341767383259942155\", \"a8908ae23533d029ea98fd6c5d052143\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    棕咖                 = EffectMeta(\"棕咖\", False, \"7273779209934245179\", \"7273779209934245179\", \"d661b0ee2e5417c12e824af664490161\", [])\n    棕宥                 = EffectMeta(\"棕宥\", False, \"7332348414933421366\", \"7332348414933421366\", \"d3dfad8c9cbc044369c528461bd79f57\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    棠梨                 = EffectMeta(\"棠梨\", False, \"7329819965920398604\", \"7329819965920398604\", \"09c9a4e110dd011c2155a544ecfe4b89\", [])\n    椰林                 = EffectMeta(\"椰林\", False, \"7252674515287788856\", \"7252674515287788856\", \"d0e4bf788a131db36ccf98e09f6cf056\", [])\n    椿和                 = EffectMeta(\"椿和\", False, \"7341032461234654475\", \"7341032461234654475\", \"46b1e432d7075fe6dc2b31d98809dac5\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    椿来                 = EffectMeta(\"椿来\", False, \"7347729407181704498\", \"7347729407181704498\", \"13780c3447b3326ab87365015d0d0cb9\", [])\n    樱粉                 = EffectMeta(\"樱粉\", False, \"7127632545272925470\", \"7127632545272925470\", \"a5411e69fdf93e03f1d0c29ee6822173\", [])\n    比佛利               = EffectMeta(\"比佛利\", False, \"7127657040348040479\", \"7127657040348040479\", \"0b705ff4b8eb7fe5090848b588139e75\", [])\n    气泡水               = EffectMeta(\"气泡水\", False, \"7127619120761212168\", \"7127619120761212168\", \"4a0b28181b76b9ba2dd4ccdf66aa905a\", [])\n    江浙沪               = EffectMeta(\"江浙沪\", False, \"7127838224344435981\", \"7127838224344435981\", \"9287d59bc7ff0bce6f4893b0383c4bfe\", [])\n    治愈萌宠             = EffectMeta(\"治愈萌宠\", False, \"7454497262480231718\", \"7454497262480231718\", \"41f5c01699c2940a8ca8654cdaaf1bcc\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    泥金                 = EffectMeta(\"泥金\", False, \"7208495760520842529\", \"7208495760520842529\", \"62be11e3055851b4816ae3a55a7c1106\", [])\n    活力夏               = EffectMeta(\"活力夏\", False, \"7493764749054709001\", \"7493764749054709001\", \"8ad383deeb6804200d47aa85695d45fd\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    流光金属             = EffectMeta(\"流光金属\", False, \"7127675565779307789\", \"7127675565779307789\", \"0c75bf2670f41bb66be90753649cd4a2\", [])\n    浅岛                 = EffectMeta(\"浅岛\", False, \"7281163331245821239\", \"7281163331245821239\", \"dc6d03248744c082a2929bb29184f820\", [])\n    浪漫烟火             = EffectMeta(\"浪漫烟火\", False, \"7446098658942078258\", \"7446098658942078258\", \"c69ce4d373a9ad5c212495d951935035\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    浮生                 = EffectMeta(\"浮生\", False, \"7340687187194678569\", \"7340687187194678569\", \"f438386d5155971f6ecd2600126fcbb4\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    海浪梦境             = EffectMeta(\"海浪梦境\", False, \"7401018435674688787\", \"7401018435674688787\", \"ea9788764c806bf56c5442c70d6f1705\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    海街日记             = EffectMeta(\"海街日记\", False, \"7127615915004366116\", \"7127615915004366116\", \"8ac09d35b39a8b6f289ef5f4330a3d62\", [])\n    海雾                 = EffectMeta(\"海雾\", False, \"7189595107610447163\", \"7189595107610447163\", \"3099b6872219761db76f4c7cc86ea0e5\", [])\n    海鸥DC               = EffectMeta(\"海鸥DC\", False, \"7127830050786823437\", \"7127830050786823437\", \"8cd726548b6275553ce2668cca28f32e\", [])\n    深沉                 = EffectMeta(\"深沉\", False, \"7414897963752770828\", \"7414897963752770828\", \"2b7f9e970de54af1adab089a0006dfae\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    深秋                 = EffectMeta(\"深秋\", False, \"7295596083101633842\", \"7295596083101633842\", \"7f3622e3b0947e47bb12a835bf80c686\", [])\n    深褐                 = EffectMeta(\"深褐\", False, \"7127615347703811336\", \"7127615347703811336\", \"e7e999ed75f9f3a0626cf946b08c4f35\", [])\n    清冷                 = EffectMeta(\"清冷\", False, \"7405602958748028186\", \"7405602958748028186\", \"a70b959036e5b054ae6974045896cef3\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清冷冬日             = EffectMeta(\"清冷冬日\", False, \"7449939213430082867\", \"7449939213430082867\", \"41a819a8662d671d7bb79cf28719e0de\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清新                 = EffectMeta(\"清新\", False, \"7469310117079420211\", \"7469310117079420211\", \"245032b4f8f96e0c760a1b2895a82f38\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清新漫和             = EffectMeta(\"清新漫和\", False, \"7480517561486953779\", \"7480517561486953779\", \"5c4f109e0688d3d80d827172811a0a2a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清明上河             = EffectMeta(\"清明上河\", False, \"7208495962887621899\", \"7208495962887621899\", \"9fa5e1e67f3217c48cb8e64c26469fc1\", [])\n    清晰明亮             = EffectMeta(\"清晰明亮\", False, \"7433813603758722342\", \"7433813603758722342\", \"79084bba6b177ef0e597583b46ad5d16\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰烟花             = EffectMeta(\"清晰烟花\", False, \"7448652759869525287\", \"7448652759869525287\", \"e1590847287bd196ebdc5866e395fa78\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清澈                 = EffectMeta(\"清澈\", False, \"7359419156619332902\", \"7359419156619332902\", \"a40f003f9ea1ff5570314e7fa1e0a289\", [])\n    清透自然             = EffectMeta(\"清透自然\", False, \"7482047649831570726\", \"7482047649831570726\", \"798b1b2fdced376700d7069fed060793\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    温述                 = EffectMeta(\"温述\", False, \"7351580023742090535\", \"7351580023742090535\", \"207610064067f787d8339e8661a19d72\", [])\n    港历                 = EffectMeta(\"港历\", False, \"7346017304909581587\", \"7346017304909581587\", \"a60377ccb7d2eba39c9c9a54178f2869\", [])\n    港风                 = EffectMeta(\"港风\", False, \"7127830945243090184\", \"7127830945243090184\", \"44c277e7933012ecceaa669d4bc64452\", [])\n    演唱会               = EffectMeta(\"演唱会\", False, \"7396701250764426546\", \"7396701250764426546\", \"9753e98d86b99c2a0a99fb4dbfbfa981\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    漫夏                 = EffectMeta(\"漫夏\", False, \"7366616947703991571\", \"7366616947703991571\", \"3b090944724c8cc1a8d7a5d73be3358f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    漫彩                 = EffectMeta(\"漫彩\", False, \"7177269429972045089\", \"7177269429972045089\", \"71885c8e558e4b6fece843e3d4464e62\", [])\n    漫春                 = EffectMeta(\"漫春\", False, \"7332866997128105228\", \"7332866997128105228\", \"0affb5f75ea91249ecdeb3fa5e255255\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    漫步                 = EffectMeta(\"漫步\", False, \"7263357613050563852\", \"7263357613050563852\", \"de874f8a3993f93bb067593f0dfcfa5a\", [])\n    漫谷                 = EffectMeta(\"漫谷\", False, \"7312002825054211378\", \"7312002825054211378\", \"c201f700471bac64dddec7f4844ee3a7\", [])\n    烈焰红               = EffectMeta(\"烈焰红\", False, \"7409669784155000090\", \"7409669784155000090\", \"46c99536d5481e0e1e4dbe445ff1144c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    烘培                 = EffectMeta(\"烘培\", False, \"7127675183246200072\", \"7127675183246200072\", \"55cb15f600fff6aa4bda19f490aa7548\", [])\n    烟岚                 = EffectMeta(\"烟岚\", False, \"7341204799590763788\", \"7341204799590763788\", \"33937d0f480f994e09bc32adfe352cbd\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    烟火增色             = EffectMeta(\"烟火增色\", False, \"7446098755905965338\", \"7446098755905965338\", \"8f844a1d9916774ba105fc26dee5212d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    烟花增强             = EffectMeta(\"烟花增强\", False, \"7444905127871270181\", \"7444905127871270181\", \"aed1cca59d133d454f96f5ce0e6888ed\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    烟霞                 = EffectMeta(\"烟霞\", False, \"7143533042978524424\", \"7143533042978524424\", \"e33d66d89891ebab00dabb91a4b4caee\", [])\n    熔金                 = EffectMeta(\"熔金\", False, \"7143575737881120037\", \"7143575737881120037\", \"870a7dad3d5f5aae975be2b353d2ed06\", [])\n    燃力                 = EffectMeta(\"燃力\", False, \"7248571956860079395\", \"7248571956860079395\", \"f8deda9b7cb4ff2f4e6382795c7265a7\", [])\n    牛皮纸               = EffectMeta(\"牛皮纸\", False, \"7127822013074263310\", \"7127822013074263310\", \"351a03b45cb0cd2e13911113e7b06ca5\", [])\n    珠光蓝               = EffectMeta(\"珠光蓝\", False, \"7127657509501914399\", \"7127657509501914399\", \"2b91f0f9a4a9cac90b3cd1be50637f58\", [])\n    珠落                 = EffectMeta(\"珠落\", False, \"7213575938615872823\", \"7213575938615872823\", \"9ced1b064be8feb4c3c3b2989b61e286\", [])\n    疼痛文学             = EffectMeta(\"疼痛文学\", False, \"7453868314482298122\", \"7453868314482298122\", \"71c97b14ca65445c60c7ffd033acd31b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    病娇                 = EffectMeta(\"病娇\", False, \"7291179909718740259\", \"7291179909718740259\", \"5e1e1d48442e9e2fa3bab8e724bce4ad\", [])\n    白皙                 = EffectMeta(\"白皙\", False, \"7127668617147141413\", \"7127668617147141413\", \"d029402b10782b63f67967b4d1bc1c03\", [])\n    盐岚                 = EffectMeta(\"盐岚\", False, \"7359223280714239268\", \"7359223280714239268\", \"e517e2dd0dc2601874ce0ca63c9cc75d\", [])\n    矿野                 = EffectMeta(\"矿野\", False, \"7281162649314889015\", \"7281162649314889015\", \"7e645e33c8e3d019669e9cb5d03d6886\", [])\n    砂红                 = EffectMeta(\"砂红\", False, \"7300758676732677427\", \"7300758676732677427\", \"2f33ad8925eb2079b23900241fcf83a4\", [])\n    砾绀                 = EffectMeta(\"砾绀\", False, \"7340915058542759219\", \"7340915058542759219\", \"d0f6bbafe6d5b1d6d5100e99c79b9e9e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    空灵                 = EffectMeta(\"空灵\", False, \"7353555308448419098\", \"7353555308448419098\", \"341afbfb8058ac32a1994b2dc39be59c\", [])\n    空谷                 = EffectMeta(\"空谷\", False, \"7143532176313699620\", \"7143532176313699620\", \"03d4f2901ecb0ea047b731273f2ee3d0\", [])\n    竹绢                 = EffectMeta(\"竹绢\", False, \"7208496463293320480\", \"7208496463293320480\", \"807ef3820365dbe8c27047bab51ab65d\", [])\n    米棕                 = EffectMeta(\"米棕\", False, \"7221477781043973413\", \"7221477781043973413\", \"e687f0134f6ee01f8f50198bd52ebd00\", [])\n    粉瓷                 = EffectMeta(\"粉瓷\", False, \"7127667757998411044\", \"7127667757998411044\", \"76eac8836f1ddd762af8c6317b1c8c73\", [])\n    粉肤                 = EffectMeta(\"粉肤\", False, \"7296493947625557286\", \"7296493947625557286\", \"1b4893feb8dac4eb014b6e3f52449786\", [])\n    粹光                 = EffectMeta(\"粹光\", False, \"7373693828328475941\", \"7373693828328475941\", \"a3b69c7718dab46fedcd6ceabcb7425b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    素肌                 = EffectMeta(\"素肌\", False, \"7127671162758270245\", \"7127671162758270245\", \"cfb819eefe90e08965021dfea52d402b\", [])\n    红绿                 = EffectMeta(\"红绿\", False, \"7127622617699290399\", \"7127622617699290399\", \"e20b3185492170b68d6c7944270e3f76\", [])\n    绝对红               = EffectMeta(\"绝对红\", False, \"7127667361456426248\", \"7127667361456426248\", \"cc6084f69428c5a741ea4280ddbfe3c8\", [])\n    绿妍                 = EffectMeta(\"绿妍\", False, \"7127675252410223909\", \"7127675252410223909\", \"46a6f490249d7eabe3a9e8cd8e92cf2d\", [])\n    美味                 = EffectMeta(\"美味\", False, \"7414142998075690279\", \"7414142998075690279\", \"08e7404edc27b9b8c0a9ce51ccbb75dc\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    老友记               = EffectMeta(\"老友记\", False, \"7127669912050420999\", \"7127669912050420999\", \"e45f9a4c50717a3585006591b41e3440\", [])\n    胡桃木               = EffectMeta(\"胡桃木\", False, \"7127830961621847310\", \"7127830961621847310\", \"5eb7457d0d18cfdf0dcd99725acf2dd9\", [])\n    自然                 = EffectMeta(\"自然\", False, \"7127821314198342943\", \"7127821314198342943\", \"f4a371ed60b7448b146cd1b1c697a9e8\", [])\n    自然清晰             = EffectMeta(\"自然清晰\", False, \"7412691247992671497\", \"7412691247992671497\", \"b53afa88ca3762e229cdcf982c705d49\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    自由                 = EffectMeta(\"自由\", False, \"7271143155544739108\", \"7271143155544739108\", \"a202f96129bf04064a37cd92f5fda5b9\", [])\n    臻金                 = EffectMeta(\"臻金\", False, \"7306726303594564904\", \"7306726303594564904\", \"6cae1766e18f62be45ddcf4d169da037\", [])\n    花园                 = EffectMeta(\"花园\", False, \"7226990672190950713\", \"7226990672190950713\", \"b235531243327c4b03bdd5495f95d9c6\", [])\n    花椿                 = EffectMeta(\"花椿\", False, \"7127539889553427719\", \"7127539889553427719\", \"6502db5f541da3fdfbedf9161a79e53c\", [])\n    花火                 = EffectMeta(\"花火\", False, \"7175071186185964812\", \"7175071186185964812\", \"cd3a2d3f97bb4874bc9b16f36fec2329\", [])\n    花火夜焰             = EffectMeta(\"花火夜焰\", False, \"7460022261144177957\", \"7460022261144177957\", \"b78a09cb97225b3fde2575cea820da3e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    花花世界             = EffectMeta(\"花花世界\", False, \"7505429510930730275\", \"7505429510930730275\", \"e5c8c6ee154d78c75d8236197ae79a9e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    落日                 = EffectMeta(\"落日\", False, \"7166494058305670432\", \"7166494058305670432\", \"a3909c6739bcfffce11c1ed328afdb39\", [])\n    落日海岛             = EffectMeta(\"落日海岛\", False, \"7369501986401570099\", \"7369501986401570099\", \"0cefc26f8aa950c8934766ad229255bc\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    落日飞车             = EffectMeta(\"落日飞车\", False, \"7350133636890463498\", \"7350133636890463498\", \"c92ce87d49816b7c930d5c1a5f537536\", [])\n    落牧                 = EffectMeta(\"落牧\", False, \"7375415880118783295\", \"7375415880118783295\", \"14f918c1d7bd5d19324268c8e7874cd4\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    蒸汽波               = EffectMeta(\"蒸汽波\", False, \"7127671519450320159\", \"7127671519450320159\", \"620ed46028278726516be363bdf070de\", [])\n    薄荷                 = EffectMeta(\"薄荷\", False, \"7343782317820857641\", \"7343782317820857641\", \"eed11d695897d0068dc658d09a18f444\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    褪色                 = EffectMeta(\"褪色\", False, \"7127668404764380447\", \"7127668404764380447\", \"13ed65a66841ee746146665f0aa18c6d\", [])\n    西野                 = EffectMeta(\"西野\", False, \"7331590962696834313\", \"7331590962696834313\", \"c5368d1617ac7b8af8b616782b388557\", [])\n    西餐                 = EffectMeta(\"西餐\", False, \"7127668806398315806\", \"7127668806398315806\", \"c447f798e1aaf5a776b40432571e9ee8\", [])\n    谧歌                 = EffectMeta(\"谧歌\", False, \"7301212776532380966\", \"7301212776532380966\", \"229eed4ae519e0c29efe23a2f07ba644\", [])\n    贝松绿               = EffectMeta(\"贝松绿\", False, \"7127668616991952158\", \"7127668616991952158\", \"5820a95014d61c7b5a45d23ba045d0e1\", [])\n    质感暗调             = EffectMeta(\"质感暗调\", False, \"7127653798155209997\", \"7127653798155209997\", \"80cc0198c081d823bfbfa08fd5e0c3c6\", [])\n    质感电影             = EffectMeta(\"质感电影\", False, \"7395858604311596299\", \"7395858604311596299\", \"163feab5aa04b300109d4317cf5c7712\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    赛博朋克             = EffectMeta(\"赛博朋克\", False, \"7127657979838516494\", \"7127657979838516494\", \"fe6d8ddb41fd8ea4f184ff5d9ca0b77e\", [])\n    赤陀                 = EffectMeta(\"赤陀\", False, \"7226251886360300837\", \"7226251886360300837\", \"f44a2fd63bcdb30bd1cdfd1120ced1e1\", [])\n    赫本                 = EffectMeta(\"赫本\", False, \"7127663117508660517\", \"7127663117508660517\", \"589b59735865a200db3ac561640ed299\", [])\n    赫石                 = EffectMeta(\"赫石\", False, \"7302823953406446899\", \"7302823953406446899\", \"4be5b26f8b932f7fe7a3f8033d5549b2\", [])\n    轻食                 = EffectMeta(\"轻食\", False, \"7127621137705618724\", \"7127621137705618724\", \"27fbb36cf04af9886d4d9e6abcd3691b\", [])\n    达芬妮               = EffectMeta(\"达芬妮\", False, \"7300602459356040484\", \"7300602459356040484\", \"e9556101678a74dc573133da00401854\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    迈阿密               = EffectMeta(\"迈阿密\", False, \"7127684611450178823\", \"7127684611450178823\", \"f9f32708f0029a5b043736e64133324f\", [])\n    酷白                 = EffectMeta(\"酷白\", False, \"7127676762514885919\", \"7127676762514885919\", \"e62e07d9ed430226e6afaa96dba3844a\", [])\n    金属                 = EffectMeta(\"金属\", False, \"7127654151688949000\", \"7127654151688949000\", \"7aaae4aad5195f4df6929d9cb2f77fc9\", [])\n    闪光灯               = EffectMeta(\"闪光灯\", False, \"7364705637931994405\", \"7364705637931994405\", \"5b6fd1621826d837d88c71de0ced5f76\", [])\n    闪胶回忆             = EffectMeta(\"闪胶回忆\", False, \"7452726092126833959\", \"7452726092126833959\", \"4a1de85787a2fa27ddbe569a73e787e4\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    闻香识人             = EffectMeta(\"闻香识人\", False, \"7127823728267775263\", \"7127823728267775263\", \"56693fef51ca05d7631f1bf3ae47c3cc\", [])\n    阿尔菲               = EffectMeta(\"阿尔菲\", False, \"7299130097632627979\", \"7299130097632627979\", \"5225172497e1cd5bd3a8e1162a9c25d0\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    雪鹿                 = EffectMeta(\"雪鹿\", False, \"7302796570947243264\", \"7302796570947243264\", \"10ff7e7bc0accc06c5ce3b9c09114b18\", [])\n    雾瓷                 = EffectMeta(\"雾瓷\", False, \"7169239634076060960\", \"7169239634076060960\", \"03e7a58f2d18954a4ced7fec8371cd5e\", [])\n    青春古早             = EffectMeta(\"青春古早\", False, \"7505676110412254527\", \"7505676110412254527\", \"80742c0b85468f8cb13333db96449c36\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    青橙                 = EffectMeta(\"青橙\", False, \"7127615575865478430\", \"7127615575865478430\", \"58b4c939e727d94fb074ca0a1c0400ad\", [])\n    青橙电影             = EffectMeta(\"青橙电影\", False, \"7401896022214970650\", \"7401896022214970650\", \"6ccecf9c82c21938ed4bd2751db52b9c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    青红夜               = EffectMeta(\"青红夜\", False, \"7281575818621455628\", \"7281575818621455628\", \"7b439160a4134076dc70571813ec9cbb\", [])\n    音乐节               = EffectMeta(\"音乐节\", False, \"7405834787132280079\", \"7405834787132280079\", \"b61e21d4516390ecde868b5d670126d6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    风铃                 = EffectMeta(\"风铃\", False, \"7211001257996127547\", \"7211001257996127547\", \"48d79f8501ade6fd7a33055b83947eb8\", [])\n    香松                 = EffectMeta(\"香松\", False, \"7175094003493309757\", \"7175094003493309757\", \"528e10e4419475bf6acf24488b660dbd\", [])\n    高清4K电影           = EffectMeta(\"高清4K电影\", False, \"7452548610971012379\", \"7452548610971012379\", \"f23af43c6ec3724a0cb415677dae00c0\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清冬日             = EffectMeta(\"高清冬日\", False, \"7450317804554685708\", \"7450317804554685708\", \"85b6ad6c821ee2361ce32cae5c70acf9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清明亮             = EffectMeta(\"高清明亮\", False, \"7434564801990266162\", \"7434564801990266162\", \"6a7ba37411cc37d75d9ae20d29b65dee\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清润白             = EffectMeta(\"高清润白\", False, \"7404503340576410906\", \"7404503340576410906\", \"d454e2c98a89324036eef9c15ebb3590\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清烟火             = EffectMeta(\"高清烟火\", False, \"7446098482013768970\", \"7446098482013768970\", \"8eeca9ea5018c168413ec0e080655bb5\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清福气             = EffectMeta(\"高清福气\", False, \"7460008665286855973\", \"7460008665286855973\", \"935da93388e6d7542176aa5e614c14f2\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高饱和               = EffectMeta(\"高饱和\", False, \"7127653121966230814\", \"7127653121966230814\", \"a0533d46f3bc544f36e00965b2644067\", [])\n    鬼魅                 = EffectMeta(\"鬼魅\", False, \"7291201164027252024\", \"7291201164027252024\", \"20fd9ce9674e1e0137955e2d74ce252a\", [])\n    鲜亮食光             = EffectMeta(\"鲜亮食光\", False, \"7441227246326582537\", \"7441227246326582537\", \"7c0143c47f7ffa237d2c84b0e42c9a7a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    鲜美年味             = EffectMeta(\"鲜美年味\", False, \"7460115630973340940\", \"7460115630973340940\", \"862e1a16a282b2ddc8112a317e53d3d7\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    黑胶唱片             = EffectMeta(\"黑胶唱片\", False, \"7221805176410180921\", \"7221805176410180921\", \"97fc59d95cbb611d888bf10da5a1c015\", [])\n    黑莓                 = EffectMeta(\"黑莓\", False, \"7175100298610871610\", \"7175100298610871610\", \"aefe136056b95d5f06b4cbb440961168\", [])\n    黑豹                 = EffectMeta(\"黑豹\", False, \"7202475126485503236\", \"7202475126485503236\", \"9f33e8c52e07d1af8ff00781f7645124\", [])\n    默片                 = EffectMeta(\"默片\", False, \"7127655037026848031\", \"7127655037026848031\", \"81be2b9491c4c805cb4f70a595ab46a6\", [])\n\n    # 付费特效\n    _160C                = EffectMeta(\"160C\", True, \"7190249807682800954\", \"7190249807682800954\", \"7505f10b71bc6e346a1696544121ac9e\", [])\n    _2077                = EffectMeta(\"2077\", True, \"7131347316111314189\", \"7131347316111314189\", \"168cd951f6f51c1fb1cd9ea1658f4012\", [])\n    _400H                = EffectMeta(\"400H\", True, \"7190236487152127269\", \"7190236487152127269\", \"20817f9b1ed37a720c02abea87714655\", [])\n    _4K画质              = EffectMeta(\"4K画质\", True, \"7477802799862992138\", \"7477802799862992138\", \"857c116e0fde4f429fe4ee0084283843\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    _4K画质电影          = EffectMeta(\"4K画质电影\", True, \"7478641636092775743\", \"7478641636092775743\", \"46b9cdb1c33433a6eaa8e0ba5ac29322\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    _4K高品质            = EffectMeta(\"4K高品质\", True, \"7480203423095213362\", \"7480203423095213362\", \"68d93b6b15e95f4c6f39fd659873ef07\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    _800Z                = EffectMeta(\"800Z\", True, \"7190237757552348471\", \"7190237757552348471\", \"53acbe492462a72db57c3f5ed7de9345\", [])\n    _8K画质              = EffectMeta(\"8K画质\", True, \"7478895015901613375\", \"7478895015901613375\", \"d5a81c57ca772c8456e3f9d53ebaf67e\", [\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    _90s                 = EffectMeta(\"90s\", True, \"7131366613823114503\", \"7131366613823114503\", \"ff76a6962c69106eede587fab606fc27\", [])\n    City_Walk            = EffectMeta(\"City Walk\", True, \"7263360572404550931\", \"7263360572404550931\", \"9a183540a03b391b3a17b67970ddc93a\", [])\n    EOS3                 = EffectMeta(\"EOS3\", True, \"7200697197002886404\", \"7200697197002886404\", \"1ea3335f32de0ff87c643bd0df2075e4\", [])\n    FXN                  = EffectMeta(\"FXN\", True, \"7332480052392774975\", \"7332480052392774975\", \"01cd75f7c9b5fb3b05bbcb54e53400d4\", [])\n    GR正片               = EffectMeta(\"GR正片\", True, \"7168098796860148995\", \"7168098796860148995\", \"1f28a387f3f22baff4b1410530d2750f\", [])\n    GR绿                 = EffectMeta(\"GR绿\", True, \"7168121440141708576\", \"7168121440141708576\", \"5ad1db915106f04413a025928b28cdf5\", [])\n    GR蓝                 = EffectMeta(\"GR蓝\", True, \"7168097661160131879\", \"7168097661160131879\", \"c7f40f1f2b5c655d6ca5f45f8d86b52d\", [])\n    IG白                 = EffectMeta(\"IG白\", True, \"7221479156318489893\", \"7221479156318489893\", \"02a7a3a08ed9756bb1ae7b924213c33d\", [])\n    INS暗                = EffectMeta(\"INS暗\", True, \"7223645151820877093\", \"7223645151820877093\", \"29c393013eddca0fdd0ee0087100915e\", [])\n    INS暗调              = EffectMeta(\"INS暗调\", True, \"7473409650746985779\", \"7473409650746985779\", \"d15a78d524285235d2aedf03a27a6037\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    KONICA               = EffectMeta(\"KONICA\", True, \"7200712753324035339\", \"7200712753324035339\", \"c05506c48792c883d3ecff9e25e0c677\", [])\n    KU4                  = EffectMeta(\"KU4\", True, \"7127669605199318280\", \"7127669605199318280\", \"b382bdfe54fed4ae7986f5205de60713\", [])\n    PENTAX               = EffectMeta(\"PENTAX\", True, \"7200999937960627459\", \"7200999937960627459\", \"87b401a86d70ae0fd4a5c3b23486c7b5\", [])\n    Pocket3              = EffectMeta(\"Pocket3\", True, \"7493462285889899803\", \"7493462285889899803\", \"52373abce98c4509bd1bbc5db694cbd2\", [])\n    Y3K                  = EffectMeta(\"Y3K\", True, \"7398034408139230490\", \"7398034408139230490\", \"a9dbbc5d01811225842ea0332fa330c1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    iPhone6s             = EffectMeta(\"iPhone6s\", True, \"7393943544089627930\", \"7393943544089627930\", \"a83a14437d060aa093acf5f2441d6dc1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    ins古早味            = EffectMeta(\"ins古早味\", True, \"7547377459126209827\", \"7547377459126209827\", \"2dc9da09febc490da3787d530df72eb7\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    miu系II              = EffectMeta(\"miu系II\", True, \"7395097767388990756\", \"7395097767388990756\", \"cc8ae49411140f244bfc3d3e1bcc9afd\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    万圣                 = EffectMeta(\"万圣\", True, \"7426749131344841995\", \"7426749131344841995\", \"9d8d5689c13ca9e44441527c505fb693\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    不要抬头             = EffectMeta(\"不要抬头\", True, \"7202480720843984131\", \"7202480720843984131\", \"3b3dc994ea819d31555abae026b1cc91\", [])\n    丝滑皮肤             = EffectMeta(\"丝滑皮肤\", True, \"7495673180904885516\", \"7495673180904885516\", \"7e44f3f603e1f39f46ee4bb552f2e7ac\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    中性                 = EffectMeta(\"中性\", True, \"7127621445806525704\", \"7127621445806525704\", \"8168144d29c35cf186eccb03ec9f3d93\", [])\n    中性II               = EffectMeta(\"中性II\", True, \"7312646907908607244\", \"7312646907908607244\", \"ad71ff12ac0afd02cb6c583d0ee69d8a\", [])\n    中性奶杏             = EffectMeta(\"中性奶杏\", True, \"7385203623703137575\", \"7385203623703137575\", \"f64b492a7627b07f8f6d01e1c3574311\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    乐游                 = EffectMeta(\"乐游\", True, \"7193982146363673856\", \"7193982146363673856\", \"2a215f5fe9ff6c1a8effea9135bbe3bb\", [])\n    云暖                 = EffectMeta(\"云暖\", True, \"7314883649999015231\", \"7314883649999015231\", \"7819364ae09bf6c6771fce646cde6ec9\", [])\n    京都                 = EffectMeta(\"京都\", True, \"7127679758581697822\", \"7127679758581697822\", \"63e749e3d425d0912123b4d7e53fc446\", [])\n    亭竹                 = EffectMeta(\"亭竹\", True, \"7302325291634920755\", \"7302325291634920755\", \"4bddb2bc6d4ca571e5f45a3dbe3f84dc\", [])\n    亮丽                 = EffectMeta(\"亮丽\", True, \"7413406043608272154\", \"7413406043608272154\", \"46ac28247c5fd004e08d5d970152eb49\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    人生之事             = EffectMeta(\"人生之事\", True, \"7148844086869396743\", \"7148844086869396743\", \"352419343c715ea1be613980e91f5aa8\", [])\n    仲夏夜               = EffectMeta(\"仲夏夜\", True, \"7281166048273943867\", \"7281166048273943867\", \"0773453b9c513222ed0b2a629b141b38\", [])\n    仿撕拉片             = EffectMeta(\"仿撕拉片\", True, \"7503844955467648283\", \"7503844955467648283\", \"184bb2a8f80b693ada67bd80ac38ab1e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    伊豆                 = EffectMeta(\"伊豆\", True, \"7195781682492984636\", \"7195781682492984636\", \"2330a4a65c6f4ab15ef39c10ab063ff7\", [])\n    伤感故事电影         = EffectMeta(\"伤感故事电影\", True, \"7516859499404119296\", \"7516859499404119296\", \"21b43b02064aef8b87590b2b3ebb67e1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    伤感电影             = EffectMeta(\"伤感电影\", True, \"7498948996816194843\", \"7498948996816194843\", \"c5ddafa9ebd09886302cc442398ab521\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    余晖                 = EffectMeta(\"余晖\", True, \"7278616064018107707\", \"7278616064018107707\", \"19e8ac930af976579c60df1ad6f4c4fe\", [])\n    佳能G12              = EffectMeta(\"佳能G12\", True, \"7485292050917657906\", \"7485292050917657906\", \"23ecefd04019e949de483cf913e08771\", [])\n    佳能G7X_II           = EffectMeta(\"佳能G7X II\", True, \"7291597100389862707\", \"7291597100389862707\", \"e9aef9a32a0ed9ebf39c9f23340fd408\", [])\n    佳能G7X_III          = EffectMeta(\"佳能G7X III\", True, \"7291595038688136474\", \"7291595038688136474\", \"3c89208f4754d78ad97df171a1cc1ffc\", [])\n    佳能清透感           = EffectMeta(\"佳能清透感\", True, \"7605630861400083763\", \"7605630861400083763\", \"07ec403321666b08005246a1a8e36e80\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    俏皮萌宠             = EffectMeta(\"俏皮萌宠\", True, \"7394713676789353737\", \"7394713676789353737\", \"bba8efffe5600316da5ac027b95fa231\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    俱乐部               = EffectMeta(\"俱乐部\", True, \"7239235794744003851\", \"7239235794744003851\", \"1f6a4516fb91c8e68217123191dc38ea\", [])\n    倾森                 = EffectMeta(\"倾森\", True, \"7332714336315526409\", \"7332714336315526409\", \"2b0731e9eacb5098ad43bd99ae6f23d7\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    假日海滩             = EffectMeta(\"假日海滩\", True, \"7405115979107274020\", \"7405115979107274020\", \"4ac4228650cb812a80173b56c310aa15\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    假日电影感           = EffectMeta(\"假日电影感\", True, \"7517179906292190501\", \"7517179906292190501\", \"9c39d9434ea88b9e0614fbd4dd78d240\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    偏振镜               = EffectMeta(\"偏振镜\", True, \"7551730483399314751\", \"7551730483399314751\", \"0dc90e97114f4e8c7a0a86604739bc6c\", [\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.900, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_noise: 默认100%, 0% ~ 100%\n    effects_adjust_sharpen: 默认70%, 0% ~ 100%\n    effects_adjust_soft: 默认90%, 0% ~ 100%\"\"\"\n    傍晚                 = EffectMeta(\"傍晚\", True, \"7226990270053649725\", \"7226990270053649725\", \"a1aa29d3a6ea4ca73cb38dac5f5f5d6a\", [])\n    元宵祈福             = EffectMeta(\"元宵祈福\", True, \"7467923122545544499\", \"7467923122545544499\", \"4567a0899a90932be92a68098082eb1d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    元气春颜             = EffectMeta(\"元气春颜\", True, \"7480473626207145254\", \"7480473626207145254\", \"b0436359d8d0e84263eba33e8542f82c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    元气焕肤             = EffectMeta(\"元气焕肤\", True, \"7475923492119006473\", \"7475923492119006473\", \"e3e3177e21009a34a270cffab88bc97e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    元气粉肌             = EffectMeta(\"元气粉肌\", True, \"7472748943953169727\", \"7472748943953169727\", \"05b894b6fded9f70314c8223cfda6d64\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    光流                 = EffectMeta(\"光流\", True, \"7233732009070300473\", \"7233732009070300473\", \"351346b807ca9bfa063e517f10d96f95\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    冬日亮肤             = EffectMeta(\"冬日亮肤\", True, \"7446310234596904246\", \"7446310234596904246\", \"be77bea4244b6539d794ed24d06b2927\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    冬日清寒             = EffectMeta(\"冬日清寒\", True, \"7594740512435801380\", \"7594740512435801380\", \"af960eaa4c5e1f6f4d07d197ca822d07\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    冬日物语             = EffectMeta(\"冬日物语\", True, \"7444960658178821414\", \"7444960658178821414\", \"e04c7e0b73dda7a63c5fd938ac9946cb\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    冬日胶卷             = EffectMeta(\"冬日胶卷\", True, \"7447359984167406863\", \"7447359984167406863\", \"09979175ea6f74eb9e1e852a9b4f59df\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    冬禧                 = EffectMeta(\"冬禧\", True, \"7190250133672578316\", \"7190250133672578316\", \"6423fd745c7ba83613feea71977763fb\", [])\n    冬绪电影             = EffectMeta(\"冬绪电影\", True, \"7570270935157148968\", \"7570270935157148968\", \"7c2bb9a971e2c88008344c6e101e2d31\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    冬雪电影感           = EffectMeta(\"冬雪电影感\", True, \"7566134950601297167\", \"7566134950601297167\", \"93a53ca3240d4f576a505807f8ff0042\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    冰夏                 = EffectMeta(\"冰夏\", True, \"7258221827485486393\", \"7258221827485486393\", \"d6a3a5ee2c52a32842ba9c269e4c7fde\", [])\n    冰清玉洁             = EffectMeta(\"冰清玉洁\", True, \"7433451697764158747\", \"7433451697764158747\", \"2e90ce70a5ee54d918c7fd1e86fab6b8\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    冰清蓝               = EffectMeta(\"冰清蓝\", True, \"7494313060480388389\", \"7494313060480388389\", \"b7e789f7e334a6b4f75dc3037f50fdee\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    冰瀑                 = EffectMeta(\"冰瀑\", True, \"7196927862056701240\", \"7196927862056701240\", \"9691bde0838975e3573faad0791d3cdf\", [])\n    冰茶                 = EffectMeta(\"冰茶\", True, \"7131399016771800357\", \"7131399016771800357\", \"ab44066c23ab6639ca6ff5eb2b850582\", [])\n    冰蓝印染             = EffectMeta(\"冰蓝印染\", True, \"7585168530518134067\", \"7585168530518134067\", \"a754e171fe1866494c6ac890d0e5f018\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    冰雪白               = EffectMeta(\"冰雪白\", True, \"7462637393783360809\", \"7462637393783360809\", \"7dd656b0f9320d3130691567c6ee1645\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    冷叙                 = EffectMeta(\"冷叙\", True, \"7159132840179895590\", \"7159132840179895590\", \"c60635dea7f7a6df2ba9b1e08fee006e\", [])\n    冷墨                 = EffectMeta(\"冷墨\", True, \"7300751893813366053\", \"7300751893813366053\", \"e6d9891ef7f02898055a16f11a8750bc\", [])\n    冷月夜               = EffectMeta(\"冷月夜\", True, \"7281165355353951543\", \"7281165355353951543\", \"0a9aaba6174a6b1a46d78365bd7fa0c4\", [])\n    冷萃                 = EffectMeta(\"冷萃\", True, \"7177729481300364548\", \"7177729481300364548\", \"a7500c67b168c4ff886e0329b3662399\", [])\n    冷调CCD              = EffectMeta(\"冷调CCD\", True, \"7434467628422270220\", \"7434467628422270220\", \"4b508c7a838560659d4acca26a7ffea0\", [])\n    冷调微曝             = EffectMeta(\"冷调微曝\", True, \"7528075579602554150\", \"7528075579602554150\", \"a60ffcd1574d6f04db2f914e66d74764\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    冷透                 = EffectMeta(\"冷透\", True, \"7127824802819116302\", \"7127824802819116302\", \"06655076bb1cf6ce7c6e3b23d027496f\", [])\n    净白                 = EffectMeta(\"净白\", True, \"7127667352782572807\", \"7127667352782572807\", \"c13995808d8fbfdf9ed2b9f2873dfea7\", [])\n    净透                 = EffectMeta(\"净透\", True, \"7127666004477414687\", \"7127666004477414687\", \"bc8357fb00d1824e2ceaed463bc611b6\", [])\n    凛冬电影感           = EffectMeta(\"凛冬电影感\", True, \"7569645361694870818\", \"7569645361694870818\", \"d075ebbc8e964539adb965190f6d675d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    初雪电影感           = EffectMeta(\"初雪电影感\", True, \"7564852301807078694\", \"7564852301807078694\", \"21db6f90b7786c09f34c29e92287deda\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    加州落日             = EffectMeta(\"加州落日\", True, \"7498004563954322726\", \"7498004563954322726\", \"9274335a725277627eb10c958358f367\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    动漫小镇             = EffectMeta(\"动漫小镇\", True, \"7604510820105522468\", \"7604510820105522468\", \"f04e4d343f385abbce3b7ac0540e67c6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    劲闯                 = EffectMeta(\"劲闯\", True, \"7248568097660013864\", \"7248568097660013864\", \"9822ae48045e256dfb2ca2369c368d47\", [])\n    北海道II             = EffectMeta(\"北海道II\", True, \"7563691938076003622\", \"7563691938076003622\", \"89c08f8f084f991cbc00ce4fe90b503b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    千禧潮酷             = EffectMeta(\"千禧潮酷\", True, \"7513608221735554330\", \"7513608221735554330\", \"61e92e952bc3a99617ffabe355fed07e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    半衫                 = EffectMeta(\"半衫\", True, \"7145391402661334280\", \"7145391402661334280\", \"a4d67ea33ac459b1e0c2ab4677ebb3b1\", [])\n    南法午后             = EffectMeta(\"南法午后\", True, \"7436724426416131347\", \"7436724426416131347\", \"c6a4a88a9d830d19f666b708a231dbdf\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    原生肤               = EffectMeta(\"原生肤\", True, \"7366582938638503187\", \"7366582938638503187\", \"8dc66d930e2420c9c035182ddbd3d627\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    原生自然             = EffectMeta(\"原生自然\", True, \"7473037215426153728\", \"7473037215426153728\", \"7db0af0929986a1d6a72425f03c97ec7\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    原野                 = EffectMeta(\"原野\", True, \"7271281225115897140\", \"7271281225115897140\", \"fd213d120b3cb62c0128c73f24cba6a9\", [])\n    去灰                 = EffectMeta(\"去灰\", True, \"7453118140151647538\", \"7453118140151647538\", \"52bb13eca2bc17f32a5250a130420e94\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    去灰II               = EffectMeta(\"去灰II\", True, \"7226991425160858937\", \"7226991425160858937\", \"e58c1b8d3539cb1e89c37dc56b934369\", [])\n    去灰高清             = EffectMeta(\"去灰高清\", True, \"7436400247540141348\", \"7436400247540141348\", \"8fa6afa7dcdaed7d26d2829aece5dca0\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    去雾                 = EffectMeta(\"去雾\", True, \"7564322465548274968\", \"7564322465548274968\", \"40ad834a70769697cfa489d615456329\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    去黄                 = EffectMeta(\"去黄\", True, \"7302338306849656127\", \"7302338306849656127\", \"f4fcb8afc69acb229dec8764320e42a3\", [])\n    去黄韩系             = EffectMeta(\"去黄韩系\", True, \"7598448281483529510\", \"7598448281483529510\", \"eadb59ee11ac606b058f4573daf3604e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    反差富士             = EffectMeta(\"反差富士\", True, \"7403222365217295667\", \"7403222365217295667\", \"60bcb4eb31327c764963919972a31628\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    反差色               = EffectMeta(\"反差色\", True, \"7542896143949106472\", \"7542896143949106472\", \"3e8d3b4af537ad3b0dffcc96afde969c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    发光CCD              = EffectMeta(\"发光CCD\", True, \"7434468515576319295\", \"7434468515576319295\", \"56442b377a1b22860018e387ca1d9ea2\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    叠阳                 = EffectMeta(\"叠阳\", True, \"7148961858320354573\", \"7148961858320354573\", \"852e9a57b27c6d6f4e71b65be8f43927\", [])\n    古早像素             = EffectMeta(\"古早像素\", True, \"7470614335644077375\", \"7470614335644077375\", \"c874f99264828b3f179288d81745cf42\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    古早回忆             = EffectMeta(\"古早回忆\", True, \"7449798505385790746\", \"7449798505385790746\", \"26a8a7b5705761b5c26d49532a0e74ec\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    古早回忆录           = EffectMeta(\"古早回忆录\", True, \"7594878732377099556\", \"7594878732377099556\", \"e22b4ea46238ff1ac9fa7779c5e53d33\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    古早复古             = EffectMeta(\"古早复古\", True, \"7457910812439596339\", \"7457910812439596339\", \"b2884dc7ce5cc92bab1179ca2e31db35\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    古早宝丽来           = EffectMeta(\"古早宝丽来\", True, \"7586692127833328896\", \"7586692127833328896\", \"4492ecb382f769abb5dbc47e66dbbfc0\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    古早感胶片           = EffectMeta(\"古早感胶片\", True, \"7576707005788867875\", \"7576707005788867875\", \"4a644380b4e7f7f395abbd77162f855f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    古早时光             = EffectMeta(\"古早时光\", True, \"7560702007405792552\", \"7560702007405792552\", \"0d0cf3147b5f99874e0f0d6fa838a191\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    古早画质             = EffectMeta(\"古早画质\", True, \"7557963448068361510\", \"7557963448068361510\", \"5e728e8ab18877bb79014a43b28e805e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    古早记忆             = EffectMeta(\"古早记忆\", True, \"7366562482812456255\", \"7366562482812456255\", \"3a6086410283e0166d65d7935faa3809\", [])\n    古早高曝             = EffectMeta(\"古早高曝\", True, \"7596354290730552622\", \"7596354290730552622\", \"6b64e499637b252f3c34d42dc07b02f3\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    古罗马电影           = EffectMeta(\"古罗马电影\", True, \"7596692097164479807\", \"7596692097164479807\", \"ccf1e60405598efb12146a11207a51e7\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    古都                 = EffectMeta(\"古都\", True, \"7127615616525126949\", \"7127615616525126949\", \"ce6f674fe7eebb2be94a3784496d2d4f\", [])\n    史诗电影             = EffectMeta(\"史诗电影\", True, \"7591041766158109952\", \"7591041766158109952\", \"b8c7fb31ac7bc75cbb4634295a5a0531\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    吉宵                 = EffectMeta(\"吉宵\", True, \"7190241639070174503\", \"7190241639070174503\", \"14910132a5caef71f9fa0a1076098026\", [])\n    向晚                 = EffectMeta(\"向晚\", True, \"7226254370084490554\", \"7226254370084490554\", \"f16c7f86eb94ede08374f3485d9de7f6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    味蕾                 = EffectMeta(\"味蕾\", True, \"7281166220794055997\", \"7281166220794055997\", \"04205b3010d2adedb961380ceb679a6b\", [])\n    和歌山               = EffectMeta(\"和歌山\", True, \"7210651068324285754\", \"7210651068324285754\", \"50e01f465c3dc235b925e5a43ed901eb\", [])\n    哈苏I                = EffectMeta(\"哈苏I\", True, \"7291596720956329266\", \"7291596720956329266\", \"df3882769e455938b11f5596ac569e49\", [])\n    哈苏II               = EffectMeta(\"哈苏II\", True, \"7291560741885480250\", \"7291560741885480250\", \"498b45335903ffa59cef94ac0376fd38\", [])\n    哈苏蓝               = EffectMeta(\"哈苏蓝\", True, \"7361792059109313811\", \"7361792059109313811\", \"45392b51287027d5fa5249495c6a9007\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    哥谭                 = EffectMeta(\"哥谭\", True, \"7337928347118275890\", \"7337928347118275890\", \"25575caefd72dfcac744d7aa717d4c1f\", [])\n    喜气新春             = EffectMeta(\"喜气新春\", True, \"7593257815104359706\", \"7593257815104359706\", \"b71e1450a077e3a15964e7713a090b4e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    围炉暖食             = EffectMeta(\"围炉暖食\", True, \"7586719222160543017\", \"7586719222160543017\", \"dcd16de43df57da7072ca377ae7c1f49\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    国民旧照             = EffectMeta(\"国民旧照\", True, \"7511971221785922826\", \"7511971221785922826\", \"b188101c8e03b870871faac571033dd9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    国风电影             = EffectMeta(\"国风电影\", True, \"7409572381775138067\", \"7409572381775138067\", \"8600273a392d0e967d9671cd20ec0899\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    圣善夜               = EffectMeta(\"圣善夜\", True, \"7175100386007584060\", \"7175100386007584060\", \"d67a3e3c70791b034ccbd201de89908d\", [])\n    圣诞回忆录           = EffectMeta(\"圣诞回忆录\", True, \"7447162094572686592\", \"7447162094572686592\", \"58f5e01abfb26b8db86ef923ffc35f9b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    圣诞愿景             = EffectMeta(\"圣诞愿景\", True, \"7428162298436537627\", \"7428162298436537627\", \"beff3bd9341b5517c97c23eafe24983a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    圣诞拍立得           = EffectMeta(\"圣诞拍立得\", True, \"7438160882837835018\", \"7438160882837835018\", \"29632de266432a7808e62d5e4d499637\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    圣诞胶片             = EffectMeta(\"圣诞胶片\", True, \"7446290147697528076\", \"7446290147697528076\", \"3ac6eccb0ca00d99893cfbb531277c19\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    圣诞萌宠             = EffectMeta(\"圣诞萌宠\", True, \"7582150382516718894\", \"7582150382516718894\", \"92c39ebbc96838de2b1969efc2355822\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    圣诞闪胶II           = EffectMeta(\"圣诞闪胶II\", True, \"7446329592119332108\", \"7446329592119332108\", \"d2f78c92985d2e02e1ae6819abf6b30f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    圣诞闪胶III          = EffectMeta(\"圣诞闪胶III\", True, \"7446329549283020068\", \"7446329549283020068\", \"57a64e2f7d3aef1cc73b9724a37093c3\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    城市赏月II           = EffectMeta(\"城市赏月II\", True, \"7405206230550973731\", \"7405206230550973731\", \"86ea7d3bdd6f5605d8d0d7e2e5a92200\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    增色                 = EffectMeta(\"增色\", True, \"7283013745788357925\", \"7283013745788357925\", \"c1dffcebde80cca62c000f8f023065c8\", [])\n    增色II               = EffectMeta(\"增色II\", True, \"7411476796526300452\", \"7411476796526300452\", \"8794bb983e61ab36704bbc7b6c964237\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    增质CCD              = EffectMeta(\"增质CCD\", True, \"7500847387959708978\", \"7500847387959708978\", \"41f83b3a2e4e741112b4b98e83735eb4\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    增质去雾             = EffectMeta(\"增质去雾\", True, \"7565956901322706226\", \"7565956901322706226\", \"87a0c1800f94528adee80264a2053079\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    墨林                 = EffectMeta(\"墨林\", True, \"7271284653816843554\", \"7271284653816843554\", \"a311fa20eacf38b912c183627e008ff5\", [])\n    墨色胶卷             = EffectMeta(\"墨色胶卷\", True, \"7580008561884040473\", \"7580008561884040473\", \"7ada28b6fbb803b70e15ba8f56ae31bc\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    复古电影感           = EffectMeta(\"复古电影感\", True, \"7479800436778732863\", \"7479800436778732863\", \"ac5a841a4e7a08b12c69e43da470768f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    复古蓝调             = EffectMeta(\"复古蓝调\", True, \"7449048492665834779\", \"7449048492665834779\", \"d00d1242160522fdbdb8b5d694549728\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    夏威夷               = EffectMeta(\"夏威夷\", True, \"7159140854601469223\", \"7159140854601469223\", \"616966578de6ebccae6b5eaa5b914d82\", [])\n    夏日粉               = EffectMeta(\"夏日粉\", True, \"7261469707138518283\", \"7261469707138518283\", \"b667443ab8554ad725bd72bb9cabab2b\", [])\n    夏日紫霞             = EffectMeta(\"夏日紫霞\", True, \"7508030199255026970\", \"7508030199255026970\", \"e2511ed7c2027e8df0205c3dc96116cf\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    多巴胺               = EffectMeta(\"多巴胺\", True, \"7237441824611224889\", \"7237441824611224889\", \"83ec0f2e61d762e17830bd55ca08e8d3\", [])\n    夜拍闪曝             = EffectMeta(\"夜拍闪曝\", True, \"7494135245709610275\", \"7494135245709610275\", \"775c6fd432cc8c187c473b1ea109b0d4\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    夜拍高光             = EffectMeta(\"夜拍高光\", True, \"7462637606052941095\", \"7462637606052941095\", \"f7ba4b96c56acc96fa7c86f1e13f1c43\", [])\n    夜景人像增强         = EffectMeta(\"夜景人像增强\", True, \"7493208490832317705\", \"7493208490832317705\", \"c2574ae2684de016ee740b78b2c6064d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    夜景去雾             = EffectMeta(\"夜景去雾\", True, \"7525110001959030042\", \"7525110001959030042\", \"c5744f7e50df98655bcdc4101a19b768\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    夜景增色II           = EffectMeta(\"夜景增色II\", True, \"7411477748130139403\", \"7411477748130139403\", \"1be937803f18855a2ee12a82c6d8c30a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    夜焰                 = EffectMeta(\"夜焰\", True, \"7185289606600953092\", \"7185289606600953092\", \"fdafbb7b837d162b7ff32cbb0f130da4\", [])\n    夜雾                 = EffectMeta(\"夜雾\", True, \"7168110568673479948\", \"7168110568673479948\", \"e6b2ff75ac938639d840ec586264c2f5\", [])\n    大吉岭               = EffectMeta(\"大吉岭\", True, \"7175076362997288230\", \"7175076362997288230\", \"d6138cfc775b365ce144308d5a7c46d9\", [])\n    大疆4Pro             = EffectMeta(\"大疆4Pro\", True, \"7534412681785183540\", \"7534412681785183540\", \"5a2dba430109143ef37b0547ae287381\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    大疆电影感           = EffectMeta(\"大疆电影感\", True, \"7512706064693988645\", \"7512706064693988645\", \"2a70d8e43f4cec20b20d602da4e60676\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    大雪纷飞             = EffectMeta(\"大雪纷飞\", True, \"7569682767080901897\", \"7569682767080901897\", \"7bdb1acf6b3066b67924788e5e773dab\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    奥林巴斯             = EffectMeta(\"奥林巴斯\", True, \"7361792068475325735\", \"7361792068475325735\", \"a523adb5976eb5a39d963683f520551f\", [])\n    奥罗拉               = EffectMeta(\"奥罗拉\", True, \"7269236283019463972\", \"7269236283019463972\", \"2a04fac3df136d4135b8ea94aa7d604a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    奶呼萌宠             = EffectMeta(\"奶呼萌宠\", True, \"7395972887133441307\", \"7395972887133441307\", \"7278a8d1ae246098e7f8db233bbec459\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    奶昔                 = EffectMeta(\"奶昔\", True, \"7172169921726565670\", \"7172169921726565670\", \"ca0cc9a987f8eca36ac97a5b5d6a5327\", [])\n    奶油II               = EffectMeta(\"奶油II\", True, \"7474592762331942184\", \"7474592762331942184\", \"4a972233f7836fd91773131bdba27488\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    奶油柔肤             = EffectMeta(\"奶油柔肤\", True, \"7482412177760996646\", \"7482412177760996646\", \"a64d8790c1f50c529d66b382290fbabc\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    奶油白               = EffectMeta(\"奶油白\", True, \"7398438142321134898\", \"7398438142321134898\", \"48358ee1c48f7293c4148609e736337f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    奶油白肤             = EffectMeta(\"奶油白肤\", True, \"7459030855810387251\", \"7459030855810387251\", \"325c15b25296e24fe16c44d4732c939c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    奶油美食             = EffectMeta(\"奶油美食\", True, \"7480210942026927423\", \"7480210942026927423\", \"406786a335a27c96d88acdb491582c6b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    奶油风萌宠           = EffectMeta(\"奶油风萌宠\", True, \"7510488117430734118\", \"7510488117430734118\", \"9088ec10dbd831542695d8522ba43007\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    好莱坞I              = EffectMeta(\"好莱坞I\", True, \"7226994281414692155\", \"7226994281414692155\", \"b255b7959f2c621cdbc5aa7cda9e7583\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    好莱坞II             = EffectMeta(\"好莱坞II\", True, \"7226995248814165308\", \"7226995248814165308\", \"41348d00e1ab4f1dbe6832f8b6224c13\", [])\n    好莱坞III            = EffectMeta(\"好莱坞III\", True, \"7312617341710372107\", \"7312617341710372107\", \"59b8ade3560f637686d6e4b0f56f97fe\", [])\n    好莱坞IV             = EffectMeta(\"好莱坞IV\", True, \"7312647197462367524\", \"7312647197462367524\", \"12657ebf4545c621bc0ca38944b9712c\", [])\n    嬉皮士               = EffectMeta(\"嬉皮士\", True, \"7131431284403981605\", \"7131431284403981605\", \"218af350afd9de1bfdd017218e7eeae4\", [])\n    子弹列车             = EffectMeta(\"子弹列车\", True, \"7202480777387445507\", \"7202480777387445507\", \"ee8aa0105ea992ace4fc114c34b08adc\", [])\n    安塞尔灰调           = EffectMeta(\"安塞尔灰调\", True, \"7581301466128780569\", \"7581301466128780569\", \"7caa7c44123efa5c56df0953a01a0c86\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    安藤调               = EffectMeta(\"安藤调\", True, \"7607806312822443289\", \"7607806312822443289\", \"46510f4b879087ceeca71f04fdbe4c67\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    安西娅               = EffectMeta(\"安西娅\", True, \"7270142995712773415\", \"7270142995712773415\", \"85e046726dee3b398e38a3d31b48e500\", [])\n    宝丽来SX70           = EffectMeta(\"宝丽来SX70\", True, \"7600301036787600667\", \"7600301036787600667\", \"cfb1689fbd6075cdba01aaa046cf5ca6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    家宴                 = EffectMeta(\"家宴\", True, \"7330584144524643595\", \"7330584144524643595\", \"1cb453a49c768a3f9c086b047321c233\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    宿营                 = EffectMeta(\"宿营\", True, \"7127822311708691726\", \"7127822311708691726\", \"e8ad70a709e7a37282ee64779c874732\", [])\n    富士CC_I             = EffectMeta(\"富士CC I\", True, \"7268561936344780086\", \"7268561936344780086\", \"069ae1d53dc300c85b017cdf6df18550\", [])\n    富士NC_I             = EffectMeta(\"富士NC I\", True, \"7159156535640296737\", \"7159156535640296737\", \"bdce583bf77430b24e9f7d78d40a69eb\", [])\n    富士NC_II            = EffectMeta(\"富士NC II\", True, \"7159408376378559747\", \"7159408376378559747\", \"0fce68168c67f99c11bf1e05e933eb79\", [])\n    富士NC_III           = EffectMeta(\"富士NC III\", True, \"7159134459088899339\", \"7159134459088899339\", \"25f1e0d1d5997b56577a96de8de2005d\", [])\n    富士NN               = EffectMeta(\"富士NN\", True, \"7447157317457513743\", \"7447157317457513743\", \"015e667b8a037ff32dd679f96b40963d\", [])\n    富士XT5              = EffectMeta(\"富士XT5\", True, \"7535108076081335606\", \"7535108076081335606\", \"fd1d1579efa189af1ce1380e36f78bce\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    富士x100             = EffectMeta(\"富士x100\", True, \"7394357532912782629\", \"7394357532912782629\", \"fc5765383ceef36fc858b8c4a4430bb8\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    富士电影             = EffectMeta(\"富士电影\", True, \"7497919307628825866\", \"7497919307628825866\", \"50d92e8eabe03ff923e404ab3afdc371\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    富士蓝               = EffectMeta(\"富士蓝\", True, \"7246720031118101816\", \"7246720031118101816\", \"ca146f44fb50a5c1335149b2c1bd0079\", [])\n    富士蓝II             = EffectMeta(\"富士蓝II\", True, \"7226994246471945530\", \"7226994246471945530\", \"43bee1438c8372b1f4a8857650fab808\", [])\n    富士青               = EffectMeta(\"富士青\", True, \"7226994214029184313\", \"7226994214029184313\", \"77bfdff2d848539626acd538429cc660\", [])\n    富春山居             = EffectMeta(\"富春山居\", True, \"7208496124779302177\", \"7208496124779302177\", \"f5ef0379f91fb0004e2886a3bef4e9ce\", [])\n    小清新               = EffectMeta(\"小清新\", True, \"7482421927462653220\", \"7482421927462653220\", \"b0cd714c67da47fb1fbd05c4c9b9e577\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    小美好               = EffectMeta(\"小美好\", True, \"7468493795479276835\", \"7468493795479276835\", \"7d678f329443e66ad181f12a46e2df8c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    小麦色               = EffectMeta(\"小麦色\", True, \"7362076973981584691\", \"7362076973981584691\", \"ea639b8e75457d08c026eb753f8704e5\", [])\n    尘杏                 = EffectMeta(\"尘杏\", True, \"7131630640646081822\", \"7131630640646081822\", \"653c8a4ffafe89ec8a1b2ac30a8b249e\", [])\n    尘烟                 = EffectMeta(\"尘烟\", True, \"7148958479326153991\", \"7148958479326153991\", \"946cbb3cd0096e46d11cd91630bcd1bc\", [])\n    山晴                 = EffectMeta(\"山晴\", True, \"7246723856222719269\", \"7246723856222719269\", \"acbd5fdb5b04114a6eedffdf716ed6b3\", [])\n    山本                 = EffectMeta(\"山本\", True, \"7156638423191784735\", \"7156638423191784735\", \"2516de8cc9f3c5ba7e3d02cc9b7a709e\", [])\n    山海诗篇             = EffectMeta(\"山海诗篇\", True, \"7603667447308389657\", \"7603667447308389657\", \"e8a63c858f97ec7d7788d0cd76c1f1d6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    岚夏                 = EffectMeta(\"岚夏\", True, \"7260771472107441471\", \"7260771472107441471\", \"5d9760bfa20e1745f2da9d0dddc1f8f3\", [])\n    岩灰                 = EffectMeta(\"岩灰\", True, \"7221472488079904060\", \"7221472488079904060\", \"fdd078505b4a102962d962cf461e9544\", [])\n    川秋电影感           = EffectMeta(\"川秋电影感\", True, \"7561143628266065204\", \"7561143628266065204\", \"d1b0a5b3e939e062bd3bbb196f7fd3c3\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    川野                 = EffectMeta(\"川野\", True, \"7361032844484857142\", \"7361032844484857142\", \"59694a68c2ed99fd1822b9d728532d51\", [])\n    市井                 = EffectMeta(\"市井\", True, \"7145394707156323591\", \"7145394707156323591\", \"3135422526252e5674d585a4d099dd97\", [])\n    幽海                 = EffectMeta(\"幽海\", True, \"7262350396566342975\", \"7262350396566342975\", \"280e721f50df8e0ee622da68f4879f91\", [])\n    底特律               = EffectMeta(\"底特律\", True, \"7336763348492553499\", \"7336763348492553499\", \"d1bcdfe293f329d701a0df1ef4ab5e16\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    庙会                 = EffectMeta(\"庙会\", True, \"7185309693131148555\", \"7185309693131148555\", \"e36b0d36967b31a89a953c35ca01e387\", [])\n    弥晖                 = EffectMeta(\"弥晖\", True, \"7148812815246134541\", \"7148812815246134541\", \"ad4ca90087a6855a24e76e5bc7bfcf66\", [])\n    强曝光               = EffectMeta(\"强曝光\", True, \"7568386153783512335\", \"7568386153783512335\", \"fc45f26a2287be60b36ed575393d2e4e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    彩光                 = EffectMeta(\"彩光\", True, \"7127824109093866760\", \"7127824109093866760\", \"0aeae3c00b2ff3d26f0bba78a0f0cda5\", [])\n    影忆                 = EffectMeta(\"影忆\", True, \"7379137689599167779\", \"7379137689599167779\", \"c5613205380a0465924690e83fa63f28\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    影石4k               = EffectMeta(\"影石4k\", True, \"7604153795639135497\", \"7604153795639135497\", \"ef35e24492b097e1c5344cadb8254cf0\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    影部                 = EffectMeta(\"影部\", True, \"7168136171673963787\", \"7168136171673963787\", \"57ebfdd7bdad96f19879e1635d823fb8\", [])\n    往事                 = EffectMeta(\"往事\", True, \"7530879877180919049\", \"7530879877180919049\", \"4d90e27eed027ffa92b9f512ee7d0daf\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    徕卡I                = EffectMeta(\"徕卡I\", True, \"7268562944093408523\", \"7268562944093408523\", \"91730e54e94b7eeb40bcfbd8f7c9a3cf\", [])\n    徕卡II               = EffectMeta(\"徕卡II\", True, \"7268563047776587020\", \"7268563047776587020\", \"a75e26160d19e9db7d9be10f6e8056b7\", [])\n    徕卡Q2               = EffectMeta(\"徕卡Q2\", True, \"7500447762404724018\", \"7500447762404724018\", \"44b1d99f86da8399aeb745061acaf9b5\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    徕卡银盐             = EffectMeta(\"徕卡银盐\", True, \"7601116367005175067\", \"7601116367005175067\", \"ee383f4b01c7e4dcb46c799b2c9ab6f9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    心动夏               = EffectMeta(\"心动夏\", True, \"7261461692096220428\", \"7261461692096220428\", \"daffbda5fec8238d91024cb36610023d\", [])\n    忆山                 = EffectMeta(\"忆山\", True, \"7271278427309755688\", \"7271278427309755688\", \"919dd48c0590b884f6aabc4f46f63b3f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    忆时                 = EffectMeta(\"忆时\", True, \"7266325161433910591\", \"7266325161433910591\", \"606029f145342308907b3422f6c6872c\", [])\n    快照II               = EffectMeta(\"快照II\", True, \"7143760738765655310\", \"7143760738765655310\", \"94a1e1cdca9b003126ac25d1df655263\", [])\n    怀旧                 = EffectMeta(\"怀旧\", True, \"7494564488704806198\", \"7494564488704806198\", \"a20fb046d1381d7c948151543932f934\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    怦然心动             = EffectMeta(\"怦然心动\", True, \"7195889899738909990\", \"7195889899738909990\", \"48ce7e2b8db89c5f411f53d6d7750cb7\", [])\n    恍光                 = EffectMeta(\"恍光\", True, \"7237446176629345593\", \"7237446176629345593\", \"9c7e3ff19468cb967d0ff9b0d79ea23d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    情感故事电影         = EffectMeta(\"情感故事电影\", True, \"7509005376835079439\", \"7509005376835079439\", \"dcc9eccd46b98f0fcf40bfdee83940fe\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    情辉                 = EffectMeta(\"情辉\", True, \"7329826553477565705\", \"7329826553477565705\", \"50b73c148b43973bedc2e6168a1638f5\", [])\n    慕斯                 = EffectMeta(\"慕斯\", True, \"7261185427703418169\", \"7261185427703418169\", \"038504b6474c25b4ce735d1d165c4198\", [])\n    扬帆远航             = EffectMeta(\"扬帆远航\", True, \"7487297020743404810\", \"7487297020743404810\", \"805da3fa2ca3e11f631e4b4534d3230c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    拐杖糖               = EffectMeta(\"拐杖糖\", True, \"7175093825659079991\", \"7175093825659079991\", \"de11b072c9e793ee23a87de1f7265880\", [])\n    捕风                 = EffectMeta(\"捕风\", True, \"7248566556593098024\", \"7248566556593098024\", \"2ebec31165718f44bbd2ecbc338c175a\", [])\n    摩登                 = EffectMeta(\"摩登\", True, \"7131219052021779719\", \"7131219052021779719\", \"178dab15fb53b396f20c89ccaec799a2\", [])\n    撕拉拍立得           = EffectMeta(\"撕拉拍立得\", True, \"7502647335218941220\", \"7502647335218941220\", \"604d0b6a7b3b23a0169e1dfd38deccba\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    攀岩                 = EffectMeta(\"攀岩\", True, \"7195930274918567180\", \"7195930274918567180\", \"928cb605e08b3e72110837d55afaa9d9\", [])\n    文艺少女             = EffectMeta(\"文艺少女\", True, \"7409360036096527670\", \"7409360036096527670\", \"4e871014a6115b63b432b99e127bcfef\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    新中式电影感         = EffectMeta(\"新中式电影感\", True, \"7493945636518104360\", \"7493945636518104360\", \"ea98a825bea08eae7b908e111bb6b428\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    新宿                 = EffectMeta(\"新宿\", True, \"7210646550974876984\", \"7210646550974876984\", \"1bb8524cde9b57773015e98ba17e0f7d\", [])\n    新年喜市             = EffectMeta(\"新年喜市\", True, \"7449639936292031781\", \"7449639936292031781\", \"a2981bc6a7e88a697bfd4135167febbc\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    新年欢愉             = EffectMeta(\"新年欢愉\", True, \"7452802706139352370\", \"7452802706139352370\", \"8681ba97d1c52b8bf7cd6bf46d4eb340\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    新年电影感           = EffectMeta(\"新年电影感\", True, \"7582425874620747008\", \"7582425874620747008\", \"3d97863fb08a128b41df65bae1b3f003\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    新年红               = EffectMeta(\"新年红\", True, \"7449639891694112010\", \"7449639891694112010\", \"1f4ee7c68ba5b40b13598d2688815c01\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    新年红气             = EffectMeta(\"新年红气\", True, \"7586522353278962984\", \"7586522353278962984\", \"5aaf75b3818098ad583374700c0830ca\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    新年顺意             = EffectMeta(\"新年顺意\", True, \"7603025037431541027\", \"7603025037431541027\", \"7f5b32c930d643d8d99183d71f2cc51b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    新颜                 = EffectMeta(\"新颜\", True, \"7188018091496951077\", \"7188018091496951077\", \"322f374bbff6d0399ee12136889818d9\", [])\n    日光吻               = EffectMeta(\"日光吻\", True, \"7226985203540053305\", \"7226985203540053305\", \"12c40e5f562e2f080e7ae157b1b925a8\", [])\n    日出增色             = EffectMeta(\"日出增色\", True, \"7526422478206356787\", \"7526422478206356787\", \"6074c700577f7d04bf32f6a92b48d7b9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    日出时刻             = EffectMeta(\"日出时刻\", True, \"7551097988878273826\", \"7551097988878273826\", \"701dde0ef765472e2db82ab093a560b9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    日料寿司             = EffectMeta(\"日料寿司\", True, \"7507632191380229402\", \"7507632191380229402\", \"60cddb5817475d59ae022444a47f5e7e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    日漫增色             = EffectMeta(\"日漫增色\", True, \"7493804773515316491\", \"7493804773515316491\", \"1e99ad9eaf4572e8a813993ed7971466\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    日漫清新             = EffectMeta(\"日漫清新\", True, \"7439037715825413413\", \"7439037715825413413\", \"583935b5a865d92247472e4ea8fb1a6c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    日系增色             = EffectMeta(\"日系增色\", True, \"7472373777469328667\", \"7472373777469328667\", \"edf1bd45853137dfc8d34657839b082f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    日系春和             = EffectMeta(\"日系春和\", True, \"7473805992308837659\", \"7473805992308837659\", \"345cff234af4dc0b6c906d8def6b11c6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    日落增色             = EffectMeta(\"日落增色\", True, \"7468875753661173004\", \"7468875753661173004\", \"5bc34c329c1eb63913ae46655244495a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    日落时刻             = EffectMeta(\"日落时刻\", True, \"7496524092779105551\", \"7496524092779105551\", \"c2e34cb2efeb788a5899bfffb6989ac8\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    日落晚霞             = EffectMeta(\"日落晚霞\", True, \"7528332870654414142\", \"7528332870654414142\", \"e9bb836a8ab978a2c71a3df73a1f63f9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    旧时代II             = EffectMeta(\"旧时代II\", True, \"7232217903536409893\", \"7232217903536409893\", \"779a72d4b71cd42f470008749a165d93\", [])\n    旧时来信             = EffectMeta(\"旧时来信\", True, \"7366562830486621459\", \"7366562830486621459\", \"1680dbb9fafa20e0a3c81e56b038508f\", [])\n    旧曲                 = EffectMeta(\"旧曲\", True, \"7266320092386938124\", \"7266320092386938124\", \"d95b63cc01d7d71f705b7a22861bbe08\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    旧金山               = EffectMeta(\"旧金山\", True, \"7159161900389977382\", \"7159161900389977382\", \"22f238fa32975ad165c124316008ab31\", [])\n    时尚极简             = EffectMeta(\"时尚极简\", True, \"7549604752934325556\", \"7549604752934325556\", \"d93470ec52e92bb643b5cbfaee42bcbe\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    旷野                 = EffectMeta(\"旷野\", True, \"7275698024892943655\", \"7275698024892943655\", \"5d52166c545e774971e36e50cb218f04\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    旷野自然             = EffectMeta(\"旷野自然\", True, \"7501717343156981046\", \"7501717343156981046\", \"1322b0aef7226539eb2a3cead86fa495\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    旷野蓝               = EffectMeta(\"旷野蓝\", True, \"7131513310733765918\", \"7131513310733765918\", \"afa609a1dc4092fbb0eeb87363894c76\", [])\n    明亮春味             = EffectMeta(\"明亮春味\", True, \"7485240505257807138\", \"7485240505257807138\", \"bfb5aa3c2feef58512926f11c85cab93\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    明亮焕晴             = EffectMeta(\"明亮焕晴\", True, \"7470840671763565864\", \"7470840671763565864\", \"2de92eefc7b02e03fef523e65677073d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    明媚春景             = EffectMeta(\"明媚春景\", True, \"7482055184554806566\", \"7482055184554806566\", \"377e50499a9d84cd54bf6f326941f492\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    明媚春色             = EffectMeta(\"明媚春色\", True, \"7611007721336311046\", \"7611007721336311046\", \"5a6408eaf62091f0fbd7dc566eec6268\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    明媚自然             = EffectMeta(\"明媚自然\", True, \"7480823852470177034\", \"7480823852470177034\", \"5142e281e72f62ec65c1a801e0b88371\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    明媚透亮             = EffectMeta(\"明媚透亮\", True, \"7506413750665121060\", \"7506413750665121060\", \"707fbbec9a4b7a298c65151f73bbbdd5\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春和                 = EffectMeta(\"春和\", True, \"7327596304173944127\", \"7327596304173944127\", \"dc13ebbcf22161cf0053e75c2d3b7f90\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春喜                 = EffectMeta(\"春喜\", True, \"7325335963318750515\", \"7325335963318750515\", \"fba27053f1a0a40cc1c97e91f61bdc19\", [])\n    春天淡彩             = EffectMeta(\"春天淡彩\", True, \"7479295356488977679\", \"7479295356488977679\", \"518c1fb623f3d4556e087e5f1d2b9b87\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春忆胶卷             = EffectMeta(\"春忆胶卷\", True, \"7483069698981104947\", \"7483069698981104947\", \"52c2d6550b16560a5b247db65e3c6b8b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春日序               = EffectMeta(\"春日序\", True, \"7477922252470652198\", \"7477922252470652198\", \"071a79fd559e4b05428cc4c83ac4c755\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春日樱               = EffectMeta(\"春日樱\", True, \"7493076668009958668\", \"7493076668009958668\", \"442fd0d11f067faeeb2c47e2500d30f7\", [\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    春日清晰             = EffectMeta(\"春日清晰\", True, \"7477594530104085770\", \"7477594530104085770\", \"d19642d2f9573e92254abf9914e55ce7\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春日清透             = EffectMeta(\"春日清透\", True, \"7485293187616066831\", \"7485293187616066831\", \"848bc05cfb1e5e7b9716ba47552407e8\", [])\n    春日温柔             = EffectMeta(\"春日温柔\", True, \"7477942092459773193\", \"7477942092459773193\", \"d5b6cb8dbb0c0def9f49055c04bcc942\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春日美食III          = EffectMeta(\"春日美食III\", True, \"7486868815364492554\", \"7486868815364492554\", \"cb202891744256abbd40cfe028092216\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春日花田             = EffectMeta(\"春日花田\", True, \"7611799763343789318\", \"7611799763343789318\", \"491659913f37f344c2f1f3d9a4b4f412\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春日花间             = EffectMeta(\"春日花间\", True, \"7472064159065132325\", \"7472064159065132325\", \"59c64d43a532ecebca203a3e4f84b190\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春日韩胶             = EffectMeta(\"春日韩胶\", True, \"7481494936836197641\", \"7481494936836197641\", \"76e9e0b4346020ba2915cb56eecfcf64\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春桃肤               = EffectMeta(\"春桃肤\", True, \"7483917188638772517\", \"7483917188638772517\", \"23bead4c25fd90d46521297cc16c6bec\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春橙肤               = EffectMeta(\"春橙肤\", True, \"7481693425218194725\", \"7481693425218194725\", \"2198cca5453c2bdc16b9e61ac361619f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春游踏青             = EffectMeta(\"春游踏青\", True, \"7493581083628408102\", \"7493581083628408102\", \"234d177e20bb230887116e469115e40b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春禧电影感           = EffectMeta(\"春禧电影感\", True, \"7594482003286838564\", \"7594482003286838564\", \"a8ef748c0a0014bfb43aa35163be244f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    春风                 = EffectMeta(\"春风\", True, \"7148963827239963918\", \"7148963827239963918\", \"ae9468b81643a706f5cae5761eff19b8\", [])\n    昭和                 = EffectMeta(\"昭和\", True, \"7195780237790154042\", \"7195780237790154042\", \"211b05e6793f255052a1cc463864ed3d\", [])\n    晚宴                 = EffectMeta(\"晚宴\", True, \"7302041028205333786\", \"7302041028205333786\", \"af499ef2d522dda0857f2be9c7db00d0\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晚柠                 = EffectMeta(\"晚柠\", True, \"7262634564428778752\", \"7262634564428778752\", \"b9058248c373fa4f49357e1c878ab6cb\", [])\n    晚樱                 = EffectMeta(\"晚樱\", True, \"7127609541839129886\", \"7127609541839129886\", \"c30e126bfe5accdb5902c5ba63c8579e\", [])\n    晨旭                 = EffectMeta(\"晨旭\", True, \"7279062968501832972\", \"7279062968501832972\", \"7450c20e328d6fc45b648d999806f2e8\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    普林斯顿             = EffectMeta(\"普林斯顿\", True, \"7127615578705104135\", \"7127615578705104135\", \"ab9e14d92af596b94e91fd6253b510cd\", [])\n    景明                 = EffectMeta(\"景明\", True, \"7329530921755888915\", \"7329530921755888915\", \"ba919353aaafdf60651a9189c760142e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴冬暖阳             = EffectMeta(\"晴冬暖阳\", True, \"7571508644982902059\", \"7571508644982902059\", \"0e657b54dcc856b331f9bc5468f075ba\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴天                 = EffectMeta(\"晴天\", True, \"7420253131079961868\", \"7420253131079961868\", \"df2d876976f447b305a67db1b43d070e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴天亮丽             = EffectMeta(\"晴天亮丽\", True, \"7454234032570764581\", \"7454234032570764581\", \"590feb6405078fdae397cc40bc72dd7c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴天增色             = EffectMeta(\"晴天增色\", True, \"7454234028141497610\", \"7454234028141497610\", \"a402e1fe28509c7046627674a1efabf8\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴天灿烂             = EffectMeta(\"晴天灿烂 \", True, \"7486890449207151891\", \"7486890449207151891\", \"a031700fb1a1b957e763b59c779db325\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴好                 = EffectMeta(\"晴好\", True, \"7281163707227344189\", \"7281163707227344189\", \"8ab42295fd5c3f9671dc860cab4cf822\", [])\n    晴好风光             = EffectMeta(\"晴好风光\", True, \"7475397942715632922\", \"7475397942715632922\", \"026f69b8fbc1fedb3eb0939366c6617e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴山质感             = EffectMeta(\"晴山质感\", True, \"7542495542429879562\", \"7542495542429879562\", \"3cbf0062169ef8bfdd1ec2fda7b4a7ed\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴春                 = EffectMeta(\"晴春\", True, \"7346542846863887635\", \"7346542846863887635\", \"ed510f73b526d21d1fcabfc410f664b8\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴春奶蓝             = EffectMeta(\"晴春奶蓝\", True, \"7485769123176254770\", \"7485769123176254770\", \"16093c7dc49cdbf9fc2071831d96db5c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴朗                 = EffectMeta(\"晴朗\", True, \"7434746357233028390\", \"7434746357233028390\", \"c1298ed66eed37d0f9a1ad78fa7239ee\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴海                 = EffectMeta(\"晴海\", True, \"7363996374083407140\", \"7363996374083407140\", \"ccf259f7a3b758c500f93e4ed925587d\", [])\n    晴秋                 = EffectMeta(\"晴秋\", True, \"7410233668351937846\", \"7410233668351937846\", \"df72e5506e6db975a692345ffe3f3e94\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴空                 = EffectMeta(\"晴空\", True, \"7127558139058179342\", \"7127558139058179342\", \"5b5899ce01e0aac5b8f15a2f77c4ee62\", [])\n    晴空漫游             = EffectMeta(\"晴空漫游\", True, \"7477810373060611338\", \"7477810373060611338\", \"37a68a5bac333f74da7afac747de12bd\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴肤                 = EffectMeta(\"晴肤\", True, \"7365842976691604763\", \"7365842976691604763\", \"c3d640b01c7bb7f6ab7ebd598bf92811\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴谷                 = EffectMeta(\"晴谷\", True, \"7307191907514420491\", \"7307191907514420491\", \"2ad917b1c9f293648cf453201987fe5d\", [])\n    晶莹雪肤             = EffectMeta(\"晶莹雪肤\", True, \"7592615852252335394\", \"7592615852252335394\", \"c8ba6aaf1fb2f851b3596c17088e2909\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晶透                 = EffectMeta(\"晶透\", True, \"7199095242476293435\", \"7199095242476293435\", \"17e30bbde014d6688a3b00203a7a8ea8\", [])\n    智能光线             = EffectMeta(\"智能光线\", True, \"7451897248885099795\", \"7451897248885099795\", \"79973825711b46f78f955ee564f2b122\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暖晨                 = EffectMeta(\"暖晨\", True, \"7312646382395936010\", \"7312646382395936010\", \"03737fce45a4ba22d225edbe7e36a04c\", [])\n    暖阳冬日             = EffectMeta(\"暖阳冬日\", True, \"7572802123021290787\", \"7572802123021290787\", \"228d775f95ae46401bd487827c7e6d22\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暖雾晨光             = EffectMeta(\"暖雾晨光\", True, \"7595404603575782707\", \"7595404603575782707\", \"54794bfd66cf2beeafcc2a48e23b6d5f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暖食增色             = EffectMeta(\"暖食增色\", True, \"7533181577170373934\", \"7533181577170373934\", \"0355f51d9ff2c44036c5058e7db73ba2\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暖黄                 = EffectMeta(\"暖黄\", True, \"7127830631601458440\", \"7127830631601458440\", \"7c7c4a40d7c44698a9db145eb8260156\", [])\n    暗光提亮             = EffectMeta(\"暗光提亮\", True, \"7446318175991368997\", \"7446318175991368997\", \"f85598ada312c86238f4402d075feb66\", [])\n    暗匣                 = EffectMeta(\"暗匣\", True, \"7159163878822153483\", \"7159163878822153483\", \"00729c25c8b262db946bb5ac80b8d1dc\", [])\n    暗夜明肤             = EffectMeta(\"暗夜明肤\", True, \"7328364126449765671\", \"7328364126449765671\", \"9fe0da0817604428adb38249ecae911c\", [])\n    暗影                 = EffectMeta(\"暗影\", True, \"7291203298630159676\", \"7291203298630159676\", \"21f3af497daf847e50efadc241f88a1a\", [])\n    暗曛                 = EffectMeta(\"暗曛\", True, \"7281163501047991608\", \"7281163501047991608\", \"893d483cd405343c9420015066e56096\", [])\n    暗蓝电影             = EffectMeta(\"暗蓝电影\", True, \"7596691154008132915\", \"7596691154008132915\", \"9c176d06f4f1a394a3f3254662e77423\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暗蓝电影感           = EffectMeta(\"暗蓝电影感\", True, \"7596940217177705779\", \"7596940217177705779\", \"76310240f62e24ecdad60f89991a63f0\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暗调发光             = EffectMeta(\"暗调发光\", True, \"7413717074037525769\", \"7413717074037525769\", \"7607d3d95aa486b47b9245af5b59fc4a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暗调古风             = EffectMeta(\"暗调古风\", True, \"7505272278574206219\", \"7505272278574206219\", \"113adc91ddc8eb89d24a1f353415a1b6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暗调复古电影         = EffectMeta(\"暗调复古电影\", True, \"7494530599202327846\", \"7494530599202327846\", \"72f3b7b5cc1bc9a247025588e8815dfb\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暗调电影             = EffectMeta(\"暗调电影\", True, \"7402945560623336758\", \"7402945560623336758\", \"bd89a7f21cb380fe362311146462d0fd\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暗调纪实电影         = EffectMeta(\"暗调纪实电影\", True, \"7493536391431785752\", \"7493536391431785752\", \"bc7a68297d80f6b3302e2826d66f67fe\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暗调阴郁             = EffectMeta(\"暗调阴郁\", True, \"7596555533230902579\", \"7596555533230902579\", \"014d3108cf9855ef67f636f376a80764\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暗部漫游             = EffectMeta(\"暗部漫游\", True, \"7595398794410347826\", \"7595398794410347826\", \"effefb5f0c9b9fc19bf4920b79ae2a31\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暗金                 = EffectMeta(\"暗金\", True, \"7511619145864187136\", \"7511619145864187136\", \"725fc1d6b1623309eeee59015a5c6bdc\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暗银                 = EffectMeta(\"暗银\", True, \"7177725752513793284\", \"7177725752513793284\", \"ad378d530ac056cb2b2e0b0ab171ede8\", [])\n    暗银II               = EffectMeta(\"暗银II\", True, \"7223630575888780602\", \"7223630575888780602\", \"33f209efb496924d6da0c7ad89bea81f\", [])\n    暗黑玫瑰             = EffectMeta(\"暗黑玫瑰\", True, \"7562034253412715811\", \"7562034253412715811\", \"7f83df0b8fdd6a3563cc89ed19e5d8f3\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暮信                 = EffectMeta(\"暮信\", True, \"7279061785922080055\", \"7279061785922080055\", \"0635e0022bfbda491e52a8eef142b33d\", [])\n    暮川                 = EffectMeta(\"暮川\", True, \"7262351934785408267\", \"7262351934785408267\", \"187450ba96a5e11233e9d38396274d87\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暮樱                 = EffectMeta(\"暮樱\", True, \"7341257736983760182\", \"7341257736983760182\", \"470ab88faab84fe2c6de6300af28be5f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暮涛                 = EffectMeta(\"暮涛\", True, \"7145394582933572878\", \"7145394582933572878\", \"a4930081ec4b2a6fc96b85508cae899f\", [])\n    暮色约会             = EffectMeta(\"暮色约会\", True, \"7332396398157090089\", \"7332396398157090089\", \"920f4d54eb383be7327d76689d96f1a5\", [])\n    曼波                 = EffectMeta(\"曼波\", True, \"7233734975839898940\", \"7233734975839898940\", \"92b9d72c49094fa0280e1763b9002cac\", [])\n    月吟                 = EffectMeta(\"月吟\", True, \"7168108694285159719\", \"7168108694285159719\", \"98ee4013998d056bf434a4d2c62cf548\", [])\n    月辉                 = EffectMeta(\"月辉\", True, \"7476109983688576290\", \"7476109983688576290\", \"8cea6a07e5698d90c0d7ee40efee1f88\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    朦胧气质棕           = EffectMeta(\"朦胧气质棕\", True, \"7493920442613288219\", \"7493920442613288219\", \"43451fb4b7d714c1d835b9bd8f4254ec\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    木葵                 = EffectMeta(\"木葵\", True, \"7233731121610100020\", \"7233731121610100020\", \"424ca4570f07325b1124b3be3f7dd35f\", [])\n    末世天使             = EffectMeta(\"末世天使\", True, \"7506099780947430668\", \"7506099780947430668\", \"d7a4f329369b0f8232525d73bf9b9b91\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    杏铃                 = EffectMeta(\"杏铃\", True, \"7295630593063193865\", \"7295630593063193865\", \"2727cb3874cfcc3541fbf4f08052a6da\", [])\n    松绿                 = EffectMeta(\"松绿\", True, \"7246723559047941433\", \"7246723559047941433\", \"1aca4ded18b11bff899309955ed07c5c\", [])\n    果酥                 = EffectMeta(\"果酥\", True, \"7160594387594972446\", \"7160594387594972446\", \"f68ff633bab02132880a03034894d378\", [])\n    柏林                 = EffectMeta(\"柏林\", True, \"7530690874699713842\", \"7530690874699713842\", \"4359ffed00242d8940bab8a902a7f588\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    柔光                 = EffectMeta(\"柔光\", True, \"7395596262252334373\", \"7395596262252334373\", \"01d991f6057be53b6eb319f5c69a1798\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    柔焦                 = EffectMeta(\"柔焦\", True, \"7345412316621442354\", \"7345412316621442354\", \"e9449745f95a354e4d835961cbb0e674\", [])\n    柔雾感               = EffectMeta(\"柔雾感\", True, \"7480785731015691539\", \"7480785731015691539\", \"c3a6c183bf91b95f792847ced8aa6ad5\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    柠青                 = EffectMeta(\"柠青\", True, \"7127653798272683278\", \"7127653798272683278\", \"1689d0cca2119b6ab3d54573e53e1902\", [])\n    柯达金200            = EffectMeta(\"柯达金200\", True, \"7517685395102977334\", \"7517685395102977334\", \"c28090d8f54cf11516c16126a0efb84d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    栖海                 = EffectMeta(\"栖海\", True, \"7349928965869538570\", \"7349928965869538570\", \"ef900ccea3b5ec0d5cb420b4ee487bcb\", [])\n    栩栩                 = EffectMeta(\"栩栩\", True, \"7177259623819316519\", \"7177259623819316519\", \"09c34a30d79f4c7332267b16eaca664e\", [])\n    格金                 = EffectMeta(\"格金\", True, \"7348301778909252879\", \"7348301778909252879\", \"256144ddabaf723badea240301660868\", [])\n    桃木                 = EffectMeta(\"桃木\", True, \"7252673818035064124\", \"7252673818035064124\", \"7e5d4fb53f764eaa07d6e465fd60588e\", [])\n    桃粉                 = EffectMeta(\"桃粉\", True, \"7297131749346135331\", \"7297131749346135331\", \"80b55b69c2b4662c65835f49ee46ad97\", [])\n    桐影                 = EffectMeta(\"桐影\", True, \"7275699191253339455\", \"7275699191253339455\", \"b77671ede2639384b704eb73722e928a\", [])\n    梦境                 = EffectMeta(\"梦境\", True, \"7127675251604917517\", \"7127675251604917517\", \"12627ad5e79adab77540c65ea8ee7cc2\", [])\n    梦幻夏               = EffectMeta(\"梦幻夏\", True, \"7377370067798985993\", \"7377370067798985993\", \"3adb502f6928cf41be040b6f52e1a48e\", [])\n    梦核紫               = EffectMeta(\"梦核紫\", True, \"7261463763344248103\", \"7261463763344248103\", \"41ed7e729f06a288363ca93a928f8a90\", [])\n    梨花白               = EffectMeta(\"梨花白\", True, \"7470438095998029066\", \"7470438095998029066\", \"307bdbcd9b1e9068e702e47360d10278\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    梨花白皙             = EffectMeta(\"梨花白皙\", True, \"7611013816964500788\", \"7611013816964500788\", \"ec6e6fb170e90c7b162808e8abe958cb\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    棕榈                 = EffectMeta(\"棕榈\", True, \"7252676190073392444\", \"7252676190073392444\", \"113b463fa3945ef37700c7c52dfc6bb9\", [])\n    森山                 = EffectMeta(\"森山\", True, \"7242215081663008056\", \"7242215081663008056\", \"0dc17be521cf783590bebcf2a5c888df\", [])\n    森林徒步             = EffectMeta(\"森林徒步\", True, \"7524262165273005321\", \"7524262165273005321\", \"c889505e8e46aaeaa48f792c770ec042\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    森秋                 = EffectMeta(\"森秋\", True, \"7274575376095923497\", \"7274575376095923497\", \"b055e64a58bd8d9b882477c9be6ef3a6\", [])\n    森绿                 = EffectMeta(\"森绿\", True, \"7510128089511349555\", \"7510128089511349555\", \"992abfe865ee701777a6cccdf033dc2b\", [])\n    樱晴                 = EffectMeta(\"樱晴\", True, \"7274246029824806155\", \"7274246029824806155\", \"9c902cf649dd7820589ddb51869bc045\", [])\n    樱花粉肤             = EffectMeta(\"樱花粉肤\", True, \"7467985496988241204\", \"7467985496988241204\", \"01a1557eeb00bf1f68755765e18b4281\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    橘光                 = EffectMeta(\"橘光\", True, \"7127675251961384205\", \"7127675251961384205\", \"1c0060b506446d78b609c4383b9eba3f\", [])\n    橘海                 = EffectMeta(\"橘海\", True, \"7278615838628924733\", \"7278615838628924733\", \"2c1496f259e375191ad52c8c43c6cf2f\", [])\n    橙蓝                 = EffectMeta(\"橙蓝\", True, \"7127561047048850718\", \"7127561047048850718\", \"4dd590015f2e14265dd5456a91ec86a6\", [])\n    欧若淡彩             = EffectMeta(\"欧若淡彩\", True, \"7479295334930205952\", \"7479295334930205952\", \"c188665c6348ae65e32b6e70a691151b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    殷粉                 = EffectMeta(\"殷粉\", True, \"7169357894868061478\", \"7169357894868061478\", \"91d27d5647faec40a747359ec6dd6eb4\", [])\n    毕业胶片             = EffectMeta(\"毕业胶片\", True, \"7510863205011393844\", \"7510863205011393844\", \"a064e9e21ae3fb3664c66b857d792902\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    气色                 = EffectMeta(\"气色\", True, \"7417468417852099894\", \"7417468417852099894\", \"8c94ade25035fdc85d27cb49ff9c85ef\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    气色透亮             = EffectMeta(\"气色透亮\", True, \"7527311213869403402\", \"7527311213869403402\", \"e87f59cca325712c1302c250448387ef\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    氧气春日             = EffectMeta(\"氧气春日\", True, \"7471717864001506587\", \"7471717864001506587\", \"51de5abddac2c4cb01f10cbd6d34ac20\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    氧气甜白             = EffectMeta(\"氧气甜白\", True, \"7470913918186163468\", \"7470913918186163468\", \"d83fe74d8abe64f7bb31e01dc17ab59a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    水光红润             = EffectMeta(\"水光红润\", True, \"7546838732532436224\", \"7546838732532436224\", \"f3909397f05a0275d5da7a642c6edd9e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    水墨意境             = EffectMeta(\"水墨意境\", True, \"7592199246766542104\", \"7592199246766542104\", \"c06ae9c8273fd8d3c71e91e4d76b21be\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    沙漫                 = EffectMeta(\"沙漫\", True, \"7148776798715776292\", \"7148776798715776292\", \"b6a48f6276a19984c0e466362bcd0999\", [])\n    沙砾                 = EffectMeta(\"沙砾\", True, \"7160580722774920461\", \"7160580722774920461\", \"a796471629be7b3bfbd649deafca3ddb\", [])\n    沙龙暖调             = EffectMeta(\"沙龙暖调\", True, \"7604669372958788900\", \"7604669372958788900\", \"4cfa40ea53b69116d5f3bf2dbb345346\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    治愈奶萌             = EffectMeta(\"治愈奶萌\", True, \"7535396553368948018\", \"7535396553368948018\", \"b0ed204b3cf34517a869cdb4f3c4ba69\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    法式少女             = EffectMeta(\"法式少女\", True, \"7480196177611230514\", \"7480196177611230514\", \"fcbe6cb7764d3023cd221aaecfdc7d8d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    法式甜粉             = EffectMeta(\"法式甜粉\", True, \"7480196167372999973\", \"7480196167372999973\", \"418873710a7304cc284104bd32eed187\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    法餐                 = EffectMeta(\"法餐\", True, \"7127655700532186398\", \"7127655700532186398\", \"b8b6d5ae88e12e25be14a2dd85b7cbc6\", [])\n    洋气新年             = EffectMeta(\"洋气新年\", True, \"7452802627991129380\", \"7452802627991129380\", \"4d13496829650356a30bf7cf96b72dd2\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    洛丽塔粉             = EffectMeta(\"洛丽塔粉\", True, \"7476109684169133362\", \"7476109684169133362\", \"cb02e21da652aa4dabd912a8b009df89\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    浅空                 = EffectMeta(\"浅空\", True, \"7297910428703657227\", \"7297910428703657227\", \"dcb2f23d5604acc06982464a227b8e40\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    浅绿微曝             = EffectMeta(\"浅绿微曝\", True, \"7589518503460310296\", \"7589518503460310296\", \"2988956aa2c0578d30b28ce04321a525\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    浅茶                 = EffectMeta(\"浅茶\", True, \"7221481120083283257\", \"7221481120083283257\", \"6acf81ddf75fc8c5ddb20f3a927dcaa3\", [])\n    浅草                 = EffectMeta(\"浅草\", True, \"7195783041376111932\", \"7195783041376111932\", \"8c4eb75992a7f07bd07e56c16b388d87\", [])\n    浓咖                 = EffectMeta(\"浓咖\", True, \"7526564908188568866\", \"7526564908188568866\", \"8a8bb532202c25217236311956506247\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    浓调电影             = EffectMeta(\"浓调电影\", True, \"7608956042701065487\", \"7608956042701065487\", \"d44494db028e4a2558182249d23cd46f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    浓郁增色             = EffectMeta(\"浓郁增色\", True, \"7578511090758192384\", \"7578511090758192384\", \"380c1144bde6ebb3bca0d4570be8e25e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    浓郁日落             = EffectMeta(\"浓郁日落\", True, \"7591499629557075251\", \"7591499629557075251\", \"005a8985f0c1721fc6c158bb641a3992\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    浓郁电影感           = EffectMeta(\"浓郁电影感\", True, \"7602322655651400970\", \"7602322655651400970\", \"1008b11504257570fcf75eaf37722544\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    浓郁秋意             = EffectMeta(\"浓郁秋意\", True, \"7562593990671895808\", \"7562593990671895808\", \"0c99beeab4b6b4bee54fb35525055f66\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    浓郁胶卷             = EffectMeta(\"浓郁胶卷\", True, \"7499121362351574282\", \"7499121362351574282\", \"ed6846e943d41e7776b9cfddbb1f0ce6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    浪漫质感             = EffectMeta(\"浪漫质感\", True, \"7537336415810489619\", \"7537336415810489619\", \"1614a827abe09365506b4c097a625b0f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    浪语                 = EffectMeta(\"浪语\", True, \"7376495406487801139\", \"7376495406487801139\", \"3310cabac6dabcb702b1c7ec26831462\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    海上冲浪             = EffectMeta(\"海上冲浪\", True, \"7527721135824211243\", \"7527721135824211243\", \"ad7160ce93edefe64d911dcd42ead464\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    海山                 = EffectMeta(\"海山\", True, \"7281162426219859255\", \"7281162426219859255\", \"33fb59b0082de5109778483e30235a46\", [])\n    海松                 = EffectMeta(\"海松\", True, \"7145394304377163045\", \"7145394304377163045\", \"d94890916054949103ba41e9eb36e948\", [])\n    海水正蓝             = EffectMeta(\"海水正蓝\", True, \"7361398032753020201\", \"7361398032753020201\", \"9f61634eccac5b971ce92279a50b9a99\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    海盐                 = EffectMeta(\"海盐\", True, \"7473034636436852031\", \"7473034636436852031\", \"91b796a25fbca315800d4db4c4f4081e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    海盐蓝               = EffectMeta(\"海盐蓝\", True, \"7495702685765651775\", \"7495702685765651775\", \"bb5eaf7e5063d853dc0392bb7119c74e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    海边胶片             = EffectMeta(\"海边胶片\", True, \"7497887075627257114\", \"7497887075627257114\", \"05404c80bc61b9cd92805e6016579607\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    润光                 = EffectMeta(\"润光\", True, \"7199093300526173501\", \"7199093300526173501\", \"3916e1d5dc3a3522f4b883c3b1f2b43a\", [])\n    涩谷                 = EffectMeta(\"涩谷\", True, \"7210645355136961852\", \"7210645355136961852\", \"7ca84443c2a14a2e9de11a5708a62a63\", [])\n    淡奶油               = EffectMeta(\"淡奶油\", True, \"7127668617101020423\", \"7127668617101020423\", \"e53103dabd1bbb6ab4481b18a4c42b2c\", [])\n    深蓝电影感           = EffectMeta(\"深蓝电影感\", True, \"7607867444048317706\", \"7607867444048317706\", \"f31c8f7ba639041a53ceb2f3e63b3e72\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清冷国风             = EffectMeta(\"清冷国风\", True, \"7493171130753174835\", \"7493171130753174835\", \"7d053e14ed86f5176b46c2c9408ccd90\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清冷情绪感           = EffectMeta(\"清冷情绪感\", True, \"7602661089280560394\", \"7602661089280560394\", \"4d2118f02b426a8a1cecc3952df44e68\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清冷暗黑             = EffectMeta(\"清冷暗黑\", True, \"7398191077364124955\", \"7398191077364124955\", \"ad3d3e686cc83a8d59b097e11da88fec\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清冷破碎III          = EffectMeta(\"清冷破碎III\", True, \"7415242837555416330\", \"7415242837555416330\", \"1b226ab430f4d82233a250b10444227d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清新感               = EffectMeta(\"清新感\", True, \"7493819626330017078\", \"7493819626330017078\", \"35d73b32f29b709f39544491ede0838a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清新明亮             = EffectMeta(\"清新明亮\", True, \"7429759193361435955\", \"7429759193361435955\", \"7bc0e54281c36e6de77a5615f27c4caa\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清新春日             = EffectMeta(\"清新春日\", True, \"7463798716542111030\", \"7463798716542111030\", \"a1d039f3590e2adf5da1004cc2d73eda\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清新晴空             = EffectMeta(\"清新晴空\", True, \"7456482453444726026\", \"7456482453444726026\", \"07019cfc5d2c3256ba47bf3bea3dbb00\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清新暖食             = EffectMeta(\"清新暖食\", True, \"7481862972801879346\", \"7481862972801879346\", \"36c030d9a1c8557e81848189cc1af755\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清新氧晴             = EffectMeta(\"清新氧晴\", True, \"7459675263652220171\", \"7459675263652220171\", \"2b31c0d9bf2a405612888fcb3995f873\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清新绿妍             = EffectMeta(\"清新绿妍\", True, \"7436078162217274687\", \"7436078162217274687\", \"112dd9649310ed413c7408dd8f2f92d0\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清新花妍             = EffectMeta(\"清新花妍\", True, \"7478775634630659378\", \"7478775634630659378\", \"a6ccdb6e981df85838d0f41c39465a68\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清新质感             = EffectMeta(\"清新质感\", True, \"7456482275618835763\", \"7456482275618835763\", \"3b08d9fe88051cfafaa416a4c414d7d2\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清新透亮             = EffectMeta(\"清新透亮\", True, \"7439995840799722815\", \"7439995840799722815\", \"65bb0c559415d970de0bfc05ae12dcb0\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清新雪肤             = EffectMeta(\"清新雪肤\", True, \"7441124539016219943\", \"7441124539016219943\", \"984a69be99e9c48c3fb48429449c9cfe\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰                 = EffectMeta(\"清晰\", True, \"7447719105563610404\", \"7447719105563610404\", \"5f6d758ab20aa947bba241a6b76b85b2\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰ll               = EffectMeta(\"清晰ll\", True, \"7127669764792634637\", \"7127669764792634637\", \"7b2ad7edaed946467ab161d016cfca93\", [])\n    清晰严冬             = EffectMeta(\"清晰严冬\", True, \"7449939197223243058\", \"7449939197223243058\", \"d9d8276e9a3c42cfd6fc7f4ca7a4df81\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰净透             = EffectMeta(\"清晰净透\", True, \"7483183184826420519\", \"7483183184826420519\", \"8a899113236afdc2c594847f2f6f47a7\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰增强             = EffectMeta(\"清晰增强\", True, \"7436068361622129929\", \"7436068361622129929\", \"04d65d54d326cdac7199f22fcb568546\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰增色             = EffectMeta(\"清晰增色\", True, \"7428650549572144411\", \"7428650549572144411\", \"70ba95840a5098b3da9177f37d833e3e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰增质             = EffectMeta(\"清晰增质\", True, \"7441960726274559282\", \"7441960726274559282\", \"b34ce1dffbe825638afca51c302d1e73\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰提升             = EffectMeta(\"清晰提升\", True, \"7443101069539953931\", \"7443101069539953931\", \"c3d50db262018318dffa816fb21a538b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰电影             = EffectMeta(\"清晰电影\", True, \"7435151579029769511\", \"7435151579029769511\", \"917f37af833a8ff548f59c513140f62c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰画质             = EffectMeta(\"清晰画质\", True, \"7441541255760284939\", \"7441541255760284939\", \"9f05ff28c43c9e08a23a0ad7e00783d2\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰自然             = EffectMeta(\"清晰自然\", True, \"7473805985388317978\", \"7473805985388317978\", \"3e1cc9a595ff0c720a894699eb20a9d5\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰花朵             = EffectMeta(\"清晰花朵\", True, \"7493197626645531928\", \"7493197626645531928\", \"dad9279c9aca95f1691b257001998384\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰萌宠             = EffectMeta(\"清晰萌宠\", True, \"7503810545670311206\", \"7503810545670311206\", \"aa7df625b33d7e1a71b8a631f774b14e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰质感             = EffectMeta(\"清晰质感\", True, \"7442390492307836186\", \"7442390492307836186\", \"92dd44e1cf31d63da9de52e93f0f9bb1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清晰透亮             = EffectMeta(\"清晰透亮\", True, \"7440517981374893327\", \"7440517981374893327\", \"142da1059c48af1f07e00b4e2d589545\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清透II               = EffectMeta(\"清透II\", True, \"7472986633399225635\", \"7472986633399225635\", \"9781a0c82f0455cf221e683c0006ec1d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清透光感             = EffectMeta(\"清透光感\", True, \"7493540929874218281\", \"7493540929874218281\", \"5f5104a97960ff734ecef9eb568c5627\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清透感               = EffectMeta(\"清透感\", True, \"7496156231392873767\", \"7496156231392873767\", \"b2398ecc78f2a553abf3aa1f6b6e0fbc\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清透春日             = EffectMeta(\"清透春日\", True, \"7614215952338636058\", \"7614215952338636058\", \"dccbb81ecdce0585b38b54afcec883ee\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清透美食             = EffectMeta(\"清透美食\", True, \"7403664041945681191\", \"7403664041945681191\", \"3121bd38673441c5417ec3e6f0da13a2\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    清透萌宠             = EffectMeta(\"清透萌宠\", True, \"7473126624322391308\", \"7473126624322391308\", \"65f21eb6f46b4bc1620c3b942ccecadc\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    港风复古             = EffectMeta(\"港风复古\", True, \"7493874443639377164\", \"7493874443639377164\", \"c11f61a31f6ee77e6ca00916255a8395\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    港风夜景             = EffectMeta(\"港风夜景\", True, \"7408952560549104923\", \"7408952560549104923\", \"5ae3b44614fecb8e1e404bea862e3831\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    港风电影             = EffectMeta(\"港风电影\", True, \"7493845947546455307\", \"7493845947546455307\", \"d64afc32204dd52601a74a7a82dda04e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    湖畔                 = EffectMeta(\"湖畔\", True, \"7210609383804390711\", \"7210609383804390711\", \"e1c8871f6971098d209bfbff648d2044\", [])\n    漠土                 = EffectMeta(\"漠土\", True, \"7347670931646549282\", \"7347670931646549282\", \"9dfde36f1fab0e85773d04fadeb30650\", [])\n    漫樱                 = EffectMeta(\"漫樱\", True, \"7356883843376221475\", \"7356883843376221475\", \"1799ab3b4a9bf0957995b69d27195229\", [])\n    漫空                 = EffectMeta(\"漫空\", True, \"7210749292888280359\", \"7210749292888280359\", \"cd88f8152fffe8033bb5057fc2539319\", [])\n    漫荫                 = EffectMeta(\"漫荫\", True, \"7210758351595048195\", \"7210758351595048195\", \"fc46efdc25a15ca3958126a8c72c1cd8\", [])\n    漫银纪元             = EffectMeta(\"漫银纪元\", True, \"7571383496334150937\", \"7571383496334150937\", \"d91f6447af1458dfa0b51d593375a687\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    漱石                 = EffectMeta(\"漱石\", True, \"7145394477249678606\", \"7145394477249678606\", \"ac50156682af7d7ce4e76eb731a5a832\", [])\n    潘多拉               = EffectMeta(\"潘多拉\", True, \"7127620215290039566\", \"7127620215290039566\", \"36e7d537966ee59eb61c326598546cb0\", [])\n    灯会                 = EffectMeta(\"灯会\", True, \"7145394908608662814\", \"7145394908608662814\", \"21472133401674a3e5645f79e9d30ae9\", [])\n    灯塔                 = EffectMeta(\"灯塔\", True, \"7262351970193640715\", \"7262351970193640715\", \"1a07b83501e168fa1d630a0d7891ce47\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    灰芋                 = EffectMeta(\"灰芋\", True, \"7199460195502689574\", \"7199460195502689574\", \"96b986718efbb22647ae5836b2c8ff43\", [])\n    灰调中性             = EffectMeta(\"灰调中性\", True, \"7476126948708617482\", \"7476126948708617482\", \"0ad9b7ad4e7e37fd3d9db635919c96be\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    灰调日常             = EffectMeta(\"灰调日常\", True, \"7484662695443090715\", \"7484662695443090715\", \"775159063b0b80ee165739845dd1813c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    灰麻                 = EffectMeta(\"灰麻\", True, \"7312645421271158070\", \"7312645421271158070\", \"38ff7fc68c3ad9d76d9527a6d0b560cb\", [])\n    灿金彩带             = EffectMeta(\"灿金彩带\", True, \"7467879231914118412\", \"7467879231914118412\", \"6616e3a1d378a44ed14ea50d8d25ca67\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    炊烟                 = EffectMeta(\"炊烟\", True, \"7194083900333755704\", \"7194083900333755704\", \"924d2235bf0485217a6897fb9504b456\", [])\n    烈日                 = EffectMeta(\"烈日\", True, \"7145395383475113230\", \"7145395383475113230\", \"cc04d06002980d31b709b833290441b2\", [])\n    烈空                 = EffectMeta(\"烈空\", True, \"7246722333010824508\", \"7246722333010824508\", \"849e979a487594a0da039ddd33e43c6b\", [])\n    烘挞                 = EffectMeta(\"烘挞\", True, \"7160598329817091364\", \"7160598329817091364\", \"8df6f056381a16178b36fa8ad6e559bf\", [])\n    烛光晚餐             = EffectMeta(\"烛光晚餐\", True, \"7575953878076673323\", \"7575953878076673323\", \"c9599a6599bd63181d919ccb8b93302c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    烟橙                 = EffectMeta(\"烟橙\", True, \"7131582482608164132\", \"7131582482608164132\", \"e958619538087c86308f718045b292f2\", [])\n    烟火年年             = EffectMeta(\"烟火年年\", True, \"7582992418941717823\", \"7582992418941717823\", \"a2fbff851c2cf4abb37af3610d491b3c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    烟火迎春             = EffectMeta(\"烟火迎春\", True, \"7595505308848360750\", \"7595505308848360750\", \"9870636e51f5bc409077c62208cc4e7f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    烟花去雾             = EffectMeta(\"烟花去雾\", True, \"7595588267978837282\", \"7595588267978837282\", \"1565db93cb09db3e482149ca799753da\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    烟花灿烂             = EffectMeta(\"烟花灿烂\", True, \"7604545611471408390\", \"7604545611471408390\", \"e50d944774217a344777088c3d5c3db1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    烟花璀璨             = EffectMeta(\"烟花璀璨\", True, \"7328363415313993001\", \"7328363415313993001\", \"0d2282c9172ed09758f861849916ab4b\", [])\n    烟花璀璨_II          = EffectMeta(\"烟花璀璨 II\", True, \"7462635722969730323\", \"7462635722969730323\", \"9b5d3dc3140ea461c77235ceb39df35b\", [])\n    热带季风             = EffectMeta(\"热带季风\", True, \"7377368986276646171\", \"7377368986276646171\", \"2879146129f3375e8fefc940fe970397\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    热显宝丽来           = EffectMeta(\"热显宝丽来\", True, \"7542376153407950095\", \"7542376153407950095\", \"c3687961a6970093faa88b7b3ec8b894\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    热气腾腾             = EffectMeta(\"热气腾腾\", True, \"7463372376038755603\", \"7463372376038755603\", \"7512302ec39fcf1c3fe8eb3d88015094\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    焕肤                 = EffectMeta(\"焕肤\", True, \"7127674287238008078\", \"7127674287238008078\", \"073940956259c1077acaec764f52f31c\", [])\n    焰色                 = EffectMeta(\"焰色\", True, \"7131539023817936158\", \"7131539023817936158\", \"efcc2f7cdccc176ce06f14d9029bcbf2\", [])\n    熏柏                 = EffectMeta(\"熏柏\", True, \"7145395127089909028\", \"7145395127089909028\", \"1081c5bbbf4ed18971b14f24316d1905\", [])\n    燃空                 = EffectMeta(\"燃空\", True, \"7226265591760358713\", \"7226265591760358713\", \"e3bc331ba068b35f92a7fc1c282530fc\", [])\n    爱丽丝               = EffectMeta(\"爱丽丝\", True, \"7328694736565439807\", \"7328694736565439807\", \"deae47ffa17d61be87aabf804cea348c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    爱之城               = EffectMeta(\"爱之城\", True, \"7131656881805741325\", \"7131656881805741325\", \"3531cd81550d23dd7d10b4b8ec90ba9f\", [])\n    爱之城II             = EffectMeta(\"爱之城II\", True, \"7337929076042222899\", \"7337929076042222899\", \"1635b6718619a9832177e25c33f1968b\", [])\n    牙白                 = EffectMeta(\"牙白\", True, \"7172285234296278309\", \"7172285234296278309\", \"1c6bd0a57d892c86c845666b44a8f547\", [])\n    牛奶肌               = EffectMeta(\"牛奶肌\", True, \"7473369111490317595\", \"7473369111490317595\", \"330d7a689e6be431555bbfdb79c40222\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    牧野                 = EffectMeta(\"牧野\", True, \"7397751642390564134\", \"7397751642390564134\", \"9c3719579cfc7ed5c7b1cfb64f83e78e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    独行侠               = EffectMeta(\"独行侠\", True, \"7202485617026977056\", \"7202485617026977056\", \"50fc4f48bab6acc0b86f42c68a44e3dc\", [])\n    猎梦                 = EffectMeta(\"猎梦\", True, \"7148806074601164062\", \"7148806074601164062\", \"29250207ce609f25ddaad4a5ff618515\", [])\n    玄影灵               = EffectMeta(\"玄影灵\", True, \"7405509975939894567\", \"7405509975939894567\", \"32ec94003ae4974d96d095884f512660\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    玩趣                 = EffectMeta(\"玩趣\", True, \"7177267248753610023\", \"7177267248753610023\", \"3dd9c3beaf276b96f226c49ac2bcbdd0\", [])\n    琥珀                 = EffectMeta(\"琥珀\", True, \"7295599414180138250\", \"7295599414180138250\", \"4a9ef682fbe7b4214e681796d4b4c77d\", [])\n    璀璨                 = EffectMeta(\"璀璨\", True, \"7468943213143821587\", \"7468943213143821587\", \"da0d70b6d9194b356f971b8fcdaad992\", [\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    甜妹感               = EffectMeta(\"甜妹感\", True, \"7486871767642950966\", \"7486871767642950966\", \"7eede1d6b72f5c5a56c0a2fc14397ad6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    甜心芭比             = EffectMeta(\"甜心芭比\", True, \"7505303260148878630\", \"7505303260148878630\", \"2ea342e24a99ce386418d5cb214ce807\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    田园野餐             = EffectMeta(\"田园野餐\", True, \"7374709634088668452\", \"7374709634088668452\", \"e7d118f203092058bd662381cd81854f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影光感             = EffectMeta(\"电影光感\", True, \"7575372908076338457\", \"7575372908076338457\", \"f11c4c537cc8c01305d1f1fe2e227353\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影叙事感           = EffectMeta(\"电影叙事感\", True, \"7539542018494663975\", \"7539542018494663975\", \"52aa2a88fa78c85bee650dfe0087c065\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影境遇             = EffectMeta(\"电影境遇\", True, \"7611777721500306723\", \"7611777721500306723\", \"cbfb00635fd223ddb16f9b46ac9f63a9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影增强             = EffectMeta(\"电影增强\", True, \"7439365849703550247\", \"7439365849703550247\", \"61b80862b0f2f60fb42dbf3974ccbcdc\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影增质             = EffectMeta(\"电影增质\", True, \"7435151398783765799\", \"7435151398783765799\", \"41a4b54d9a3918e6466be755a455667e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影大师             = EffectMeta(\"电影大师\", True, \"7569903362355891518\", \"7569903362355891518\", \"6b2290221ec8c89ef691dd93a17a99c9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影往事             = EffectMeta(\"电影往事\", True, \"7604153456365948169\", \"7604153456365948169\", \"ed514ff59aa8cb2eebc7ee49df61cabf\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影感增强           = EffectMeta(\"电影感增强\", True, \"7486832436819578151\", \"7486832436819578151\", \"4c90165bf74665c89b9eba6408ef3bba\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影感大片           = EffectMeta(\"电影感大片\", True, \"7575521370369428742\", \"7575521370369428742\", \"0c93dec8336a85d615bab1e787f5f07d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影慢镜             = EffectMeta(\"电影慢镜\", True, \"7591523217345449279\", \"7591523217345449279\", \"de864f5abe14d8319a5c518fa923c654\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影慢镜II           = EffectMeta(\"电影慢镜II\", True, \"7592642498489503026\", \"7592642498489503026\", \"be22ffebcc4a52afd09e0b52273faa62\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影柔光             = EffectMeta(\"电影柔光\", True, \"7447126702137904420\", \"7447126702137904420\", \"8bc2fa65718e78742c45e937ee513599\", [\n                              EffectParam(\"intensity\", 0.180, 0.000, 1.000)])\n    \"\"\"参数:\n    intensity: 默认18%, 0% ~ 100%\"\"\"\n    电影校正             = EffectMeta(\"电影校正\", True, \"7494169971136711977\", \"7494169971136711977\", \"8a967a661c33955a914ee2d6741f4abe\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影独白             = EffectMeta(\"电影独白\", True, \"7595136957605252390\", \"7595136957605252390\", \"69cccaa977b143bf9c2884a918360eac\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影画质             = EffectMeta(\"电影画质\", True, \"7472770427245448474\", \"7472770427245448474\", \"3c17e8775c8ffd2f8875c1b06720a81d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影葡街             = EffectMeta(\"电影葡街\", True, \"7589559390106062132\", \"7589559390106062132\", \"9e21d6b27e52c0442aea729950266bea\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电影镜头             = EffectMeta(\"电影镜头\", True, \"7591844323558165800\", \"7591844323558165800\", \"04bd57ed5fd14719cb5896275281716b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    画报                 = EffectMeta(\"画报\", True, \"7239979137404833083\", \"7239979137404833083\", \"267ef83e978e1b8282afa81c88e8dfd4\", [])\n    画质修复             = EffectMeta(\"画质修复\", True, \"7507148382536764682\", \"7507148382536764682\", \"8839ae43389b979ea5b3af0210940455\", [\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    画质增蓝             = EffectMeta(\"画质增蓝\", True, \"7525722154726329650\", \"7525722154726329650\", \"d4bbe627e3786316720acfda6ba49b23\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    画质高清             = EffectMeta(\"画质高清\", True, \"7439560136630471963\", \"7439560136630471963\", \"b08bde10ef963cf648e677615667fda3\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    登高                 = EffectMeta(\"登高\", True, \"7195925533031435558\", \"7195925533031435558\", \"688df92b416581b9cf33e543ae7ae03b\", [])\n    白富美               = EffectMeta(\"白富美\", True, \"7302336985513970963\", \"7302336985513970963\", \"9fb4286e708d3bbf2b6bc6af85120be2\", [])\n    白瓷亮肤             = EffectMeta(\"白瓷亮肤\", True, \"7545707655537397044\", \"7545707655537397044\", \"30d45d50d67e78c4fbceca515f6aeef8\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    白皙丝绸             = EffectMeta(\"白皙丝绸\", True, \"7600637764823993650\", \"7600637764823993650\", \"7e6fb86a203656c5dfcae95bd6ccf5a0\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    白皙去黄             = EffectMeta(\"白皙去黄\", True, \"7531992666729352482\", \"7531992666729352482\", \"d69785c1d162574ce7fc3b74fe3e807d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    百川                 = EffectMeta(\"百川\", True, \"7210616269597314362\", \"7210616269597314362\", \"cd1f1360bd1891f9b31c63542689d8ea\", [])\n    盐系                 = EffectMeta(\"盐系\", True, \"7127823742830398757\", \"7127823742830398757\", \"9d48681f2c1f584e9b93fa37485693d1\", [])\n    石山                 = EffectMeta(\"石山\", True, \"7194091413728922941\", \"7194091413728922941\", \"a9faf4808c5ec06b8d2ecc944a3682c6\", [])\n    砂金                 = EffectMeta(\"砂金\", True, \"7131655685321821477\", \"7131655685321821477\", \"9a4836294cf0cc48fcf84af02d963400\", [])\n    破晓                 = EffectMeta(\"破晓\", True, \"7348707347419712794\", \"7348707347419712794\", \"0f73c6cf0189f4c0e462e76102e46084\", [])\n    硬朗                 = EffectMeta(\"硬朗\", True, \"7127663097162075399\", \"7127663097162075399\", \"7f33d22c16b09c852f48314404c2b532\", [])\n    硬朗男孩             = EffectMeta(\"硬朗男孩\", True, \"7524592387742567689\", \"7524592387742567689\", \"b998c48b7bc0927ba03a6a0c866fa2d8\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    碎芒                 = EffectMeta(\"碎芒\", True, \"7148945136280440101\", \"7148945136280440101\", \"c40eb1ab380e7e22f5a4a71d69520a54\", [])\n    碳烤                 = EffectMeta(\"碳烤\", True, \"7363537225620983067\", \"7363537225620983067\", \"596d7d07b942eff22e9f8aaa47918711\", [])\n    福桔                 = EffectMeta(\"福桔\", True, \"7323020458050260262\", \"7323020458050260262\", \"e0d586addaf8f3b790f011effa361c80\", [])\n    福气新年             = EffectMeta(\"福气新年\", True, \"7582612168625982739\", \"7582612168625982739\", \"cfbb0a5235f70d9b9377840689dfb210\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    福气新春             = EffectMeta(\"福气新春\", True, \"7595423045704027442\", \"7595423045704027442\", \"49b3bd7bfd195e8b70e31082f77198e6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    福漫                 = EffectMeta(\"福漫\", True, \"7602179574549761305\", \"7602179574549761305\", \"42c9e43f879101736833459671bfd4ae\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    福运                 = EffectMeta(\"福运\", True, \"7453122471810714930\", \"7453122471810714930\", \"a6ec7e80c2ecff207da782397d0f9068\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    禾美                 = EffectMeta(\"禾美\", True, \"7260770496055168310\", \"7260770496055168310\", \"fce7d45ba040a90176adfc1cc74fb8be\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    私语                 = EffectMeta(\"私语\", True, \"7127674303306419464\", \"7127674303306419464\", \"7f8596dc2626cd91e642c6a17c953390\", [])\n    秋叶黄               = EffectMeta(\"秋叶黄\", True, \"7542556208268348712\", \"7542556208268348712\", \"161e16336ce1768fc9e7395de07c83b9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    秋季电影感           = EffectMeta(\"秋季电影感\", True, \"7540164276858801448\", \"7540164276858801448\", \"7f62d804192fe06b9e8c4b3716fa6f62\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    秋意电影感           = EffectMeta(\"秋意电影感\", True, \"7551307375555185956\", \"7551307375555185956\", \"04899a4d2671dfbcd2a737a750b1272f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    秋日物语II           = EffectMeta(\"秋日物语II\", True, \"7404121905780772122\", \"7404121905780772122\", \"1d70b53cb9e08dd8e5205d1f8d9258b1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    秋日自然             = EffectMeta(\"秋日自然\", True, \"7556996788276841791\", \"7556996788276841791\", \"ccf27de6fd29f43da006f5ac5d0299bd\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    秋池                 = EffectMeta(\"秋池\", True, \"7145391965717253406\", \"7145391965717253406\", \"3a908de0c7ba051b7838f5515d523a2c\", [])\n    秋波                 = EffectMeta(\"秋波\", True, \"7196920471043050812\", \"7196920471043050812\", \"0ce8c8224ab832699cae7ebdbd7034e9\", [])\n    秋田胶片             = EffectMeta(\"秋田胶片\", True, \"7493760868576988443\", \"7493760868576988443\", \"6ebf281ef0ce140be9ea39457209139a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    科切拉               = EffectMeta(\"科切拉\", True, \"7502329862581996854\", \"7502329862581996854\", \"ea0880ddab806d8765dce61edba72dbc\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    科幻星球             = EffectMeta(\"科幻星球\", True, \"7501988309900528935\", \"7501988309900528935\", \"5d48a663f0d44ab86af1a5a48a7ac974\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    简餐                 = EffectMeta(\"简餐\", True, \"7127561998556073247\", \"7127561998556073247\", \"0c4b5c50cb8bd668c241a262984f940b\", [])\n    粉柔撕拉片           = EffectMeta(\"粉柔撕拉片\", True, \"7503540725334723875\", \"7503540725334723875\", \"22bc2bf6c87fab59f75217cd83c21eae\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    粉橘                 = EffectMeta(\"粉橘\", True, \"7131467442789846285\", \"7131467442789846285\", \"1fc9df6984d15546e3d28689ef43c334\", [])\n    粉白                 = EffectMeta(\"粉白\", True, \"7156647258342034702\", \"7156647258342034702\", \"fd5f2b2a42b0c54aa8df8b99c830ab36\", [])\n    粉白微曝光           = EffectMeta(\"粉白微曝光\", True, \"7481194247610174757\", \"7481194247610174757\", \"14b4910ed81667464beb2264bd80ae2a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    粉蓝烟花             = EffectMeta(\"粉蓝烟花\", True, \"7462636960557927699\", \"7462636960557927699\", \"92e7bc7ca6f8381bdf25c4540669f28b\", [\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认70%, 0% ~ 100%\"\"\"\n    粉霞                 = EffectMeta(\"粉霞\", True, \"7525754134151105833\", \"7525754134151105833\", \"c551709419f57acb321c36d879ed4376\", [])\n    素净                 = EffectMeta(\"素净\", True, \"7351018816215764233\", \"7351018816215764233\", \"3c792ad3327a3b6774aa89990dacf093\", [])\n    素简                 = EffectMeta(\"素简\", True, \"7300968790391606567\", \"7300968790391606567\", \"091f103fae7c3a0480f05be172a0c904\", [])\n    紫霞时分             = EffectMeta(\"紫霞时分\", True, \"7507920355613248803\", \"7507920355613248803\", \"0666e85ae9821a1ba83106da65094df9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    繁花似锦             = EffectMeta(\"繁花似锦\", True, \"7322666518536359204\", \"7322666518536359204\", \"f5d1f324f0f06bf4fc783095efd7dc1e\", [])\n    繁花如梦             = EffectMeta(\"繁花如梦\", True, \"7322665314980859177\", \"7322665314980859177\", \"d8bcaf063ca3ef2cd8d5f1642204a35f\", [])\n    繁花璀璨             = EffectMeta(\"繁花璀璨\", True, \"7322665617373351231\", \"7322665617373351231\", \"98b0d8c15909c10ef71f187df3e36c9f\", [])\n    红运                 = EffectMeta(\"红运\", True, \"7325421708809096467\", \"7325421708809096467\", \"31a7c3905e75dda75c86e104dcb5d222\", [])\n    纪实电影             = EffectMeta(\"纪实电影\", True, \"7493535052098358590\", \"7493535052098358590\", \"6270a0d32e121f2f157428a8fa71baf1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    纪实电影胶片         = EffectMeta(\"纪实电影胶片\", True, \"7501954865518677267\", \"7501954865518677267\", \"8276d9650078c937901324127c6a2733\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    纱雾                 = EffectMeta(\"纱雾\", True, \"7260772961462799627\", \"7260772961462799627\", \"acde0ae9bd3ee0a6684457d562f35e25\", [])\n    织乐                 = EffectMeta(\"织乐\", True, \"7148965677376736542\", \"7148965677376736542\", \"a319e3016fe180b247add4a6898b3cd0\", [])\n    经典港风             = EffectMeta(\"经典港风\", True, \"7449048410004507914\", \"7449048410004507914\", \"c0bedd6c0adf9e2be04aceb386d79ef3\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    绿妍II               = EffectMeta(\"绿妍II\", True, \"7361401117672066345\", \"7361401117672066345\", \"2f29b2a050dc8c75c742e1ffb7be4cf0\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    绿野                 = EffectMeta(\"绿野\", True, \"7148817459095670029\", \"7148817459095670029\", \"be31c5c42c288d05bd0a7ba6781c7d55\", [])\n    绿野漫旅             = EffectMeta(\"绿野漫旅\", True, \"7409674961595518258\", \"7409674961595518258\", \"f4b64f852dc51be8707a058245200c09\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    缎光肌               = EffectMeta(\"缎光肌\", True, \"7551730848282742070\", \"7551730848282742070\", \"4bca1d9f6da952f5269affa22ac43871\", [\n                              EffectParam(\"effects_adjust_filter\", 0.175, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认18%, 0% ~ 100%\"\"\"\n    美味brunch           = EffectMeta(\"美味brunch\", True, \"7494869214751182121\", \"7494869214751182121\", \"3e2f1a0747b5380d3adbbc60118de785\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    美好春日             = EffectMeta(\"美好春日\", True, \"7480550244233809189\", \"7480550244233809189\", \"ad5934723eb251d50206e74ee43de934\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    美好瞬间             = EffectMeta(\"美好瞬间\", True, \"7332345211621887251\", \"7332345211621887251\", \"1b989818420007070e3ecdc7df7fba1e\", [])\n    美拉德               = EffectMeta(\"美拉德\", True, \"7273782607257685309\", \"7273782607257685309\", \"f22f3b6e1ef2d6f6e5b7a9e3b753fe18\", [])\n    美食增色             = EffectMeta(\"美食增色\", True, \"7403664465390013735\", \"7403664465390013735\", \"ada69091300af58308e5bbdaa2c818dc\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    美高                 = EffectMeta(\"美高\", True, \"7239236880858877217\", \"7239236880858877217\", \"29446ccd642910767b50978b2fe45f4b\", [])\n    羽梦                 = EffectMeta(\"羽梦\", True, \"7213573482850880827\", \"7213573482850880827\", \"ee8c5d6e7808f4e6662d42298104b87b\", [])\n    聆时                 = EffectMeta(\"聆时\", True, \"7279063581092531510\", \"7279063581092531510\", \"9e59d950f575eb8a28d1f789a3b8ab50\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    聚焦                 = EffectMeta(\"聚焦\", True, \"7320428711487098153\", \"7320428711487098153\", \"54fcd82f212e40df18ac882bd748f59c\", [])\n    背景增色             = EffectMeta(\"背景增色\", True, \"7538027894447131967\", \"7538027894447131967\", \"3d3ae418605554d05b52e82b280aa9db\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    胶片微曝             = EffectMeta(\"胶片微曝\", True, \"7578191333169417523\", \"7578191333169417523\", \"a5259ff5c583f14d2e8acdd6a483554e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    胶片电影             = EffectMeta(\"胶片电影\", True, \"7496103061845249316\", \"7496103061845249316\", \"b1ceda65b100e3c6799c576668c9e945\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    自然增色             = EffectMeta(\"自然增色\", True, \"7477552975246937380\", \"7477552975246937380\", \"f77a303a6b12fff167afa54dbf437e31\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    自然明亮             = EffectMeta(\"自然明亮\", True, \"7439995841366035724\", \"7439995841366035724\", \"1d53604a9caed4ee27a7e1f8f5fd9785\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    自然春色             = EffectMeta(\"自然春色\", True, \"7478210864818965779\", \"7478210864818965779\", \"21a8812e6490383c0eaaa6121cc71454\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    艾丽莎               = EffectMeta(\"艾丽莎\", True, \"7269240546810400011\", \"7269240546810400011\", \"720b5b57295f927d983152d9bffcf33c\", [])\n    芭比                 = EffectMeta(\"芭比\", True, \"7259718549634157882\", \"7259718549634157882\", \"aa97d157fa8642f46808cfda6c777fdd\", [])\n    花容                 = EffectMeta(\"花容\", True, \"7340950375127649577\", \"7340950375127649577\", \"b5d5c5fcaf7d85f5d06e540f69258653\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    花火增色             = EffectMeta(\"花火增色\", True, \"7446691478761508108\", \"7446691478761508108\", \"08297394b95f037a00a1f169d00fd322\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    花间                 = EffectMeta(\"花间\", True, \"7211008985187487036\", \"7211008985187487036\", \"6acce0fe02d2e0328e597abcb1043de3\", [])\n    花食                 = EffectMeta(\"花食\", True, \"7261180740283403578\", \"7261180740283403578\", \"37b2683488f5e586c98256dab864ab84\", [])\n    苍橘                 = EffectMeta(\"苍橘\", True, \"7131605817958075685\", \"7131605817958075685\", \"43666fcf1f38cb2036f87b7e496ccec4\", [])\n    苏打气泡             = EffectMeta(\"苏打气泡\", True, \"7535720421677731098\", \"7535720421677731098\", \"a08729a75a9c12cd53d42720ee2c94c3\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    苦尽柑来             = EffectMeta(\"苦尽柑来\", True, \"7493339669950729481\", \"7493339669950729481\", \"72833304e3f98f8a607dc9006676cbcd\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    苦檀                 = EffectMeta(\"苦檀\", True, \"7145391965847162142\", \"7145391965847162142\", \"1dad3330806a06ca9abdd9ef20ef9216\", [])\n    英伦复古             = EffectMeta(\"英伦复古\", True, \"7481337713443048755\", \"7481337713443048755\", \"88568151518cb4c4f5fd605bd7260260\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    茶卡盐湖             = EffectMeta(\"茶卡盐湖\", True, \"7526507478738013476\", \"7526507478738013476\", \"6a12ea5bd3c3a73148f39425a6512151\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    茶墨                 = EffectMeta(\"茶墨\", True, \"7177728466354326822\", \"7177728466354326822\", \"d80d22c59b7846cfe3a0e8970825b316\", [])\n    茶酪                 = EffectMeta(\"茶酪\", True, \"7160603159486827783\", \"7160603159486827783\", \"3115e57bcd131acf89d8bdef6cd11cbd\", [])\n    荒原风光             = EffectMeta(\"荒原风光\", True, \"7531037440736349491\", \"7531037440736349491\", \"efa0f0ca6a0f065b891711f0156ceea9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    莫吉托               = EffectMeta(\"莫吉托\", True, \"7131419324622982408\", \"7131419324622982408\", \"9b6cb49204cfb1ae3b38e70f4f71a0a7\", [])\n    莫奈睡莲             = EffectMeta(\"莫奈睡莲\", True, \"7584815680642551102\", \"7584815680642551102\", \"bfb2e4a20f924d068ff7d6c7e3e835cf\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    莫奈花园             = EffectMeta(\"莫奈花园\", True, \"7500930664041172278\", \"7500930664041172278\", \"2a39723f27860f53fe08437092bf9109\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    菁润明肤             = EffectMeta(\"菁润明肤\", True, \"7396300458781936906\", \"7396300458781936906\", \"7ee2a3e6c8d54cf46fd9789913459e64\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    萌宠                 = EffectMeta(\"萌宠\", True, \"7394022809317526834\", \"7394022809317526834\", \"b12efc22acc27dcad4569d60c4f63a36\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    落日派对             = EffectMeta(\"落日派对\", True, \"7374708995501739305\", \"7374708995501739305\", \"e00847299fab64d98f8ae309c62b98aa\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    落日电影             = EffectMeta(\"落日电影\", True, \"7501223866988039434\", \"7501223866988039434\", \"ae92cb31192486980824dce7bf4680fe\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    落日粉               = EffectMeta(\"落日粉\", True, \"7368141858603666698\", \"7368141858603666698\", \"66dd18db6e7d8f042e7cf8cd02e64af4\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    落日鎏金             = EffectMeta(\"落日鎏金\", True, \"7374251948058447158\", \"7374251948058447158\", \"f5154a29054db9946d66ed823cb58006\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    蒸汽机               = EffectMeta(\"蒸汽机\", True, \"7232220370667883837\", \"7232220370667883837\", \"c6ccfd3ad46f0c3d4715907b325c0fac\", [])\n    蓝梦核               = EffectMeta(\"蓝梦核\", True, \"7237440664139484473\", \"7237440664139484473\", \"0d12a669f41b3b92d1a892f42b9e0d9b\", [])\n    蓝橙II               = EffectMeta(\"蓝橙II\", True, \"7337929426493132058\", \"7337929426493132058\", \"40056bb94f392bdc1ab305683e265b2b\", [])\n    蓝灰                 = EffectMeta(\"蓝灰\", True, \"7127667757839076645\", \"7127667757839076645\", \"aa8ef49b3edba824d41f097effe534c0\", [])\n    蓝调                 = EffectMeta(\"蓝调\", True, \"7127664822921022734\", \"7127664822921022734\", \"3f0f50b54a2486b3fe5cfbb68dfaeaae\", [])\n    蓝调烟火             = EffectMeta(\"蓝调烟火\", True, \"7328363887542209828\", \"7328363887542209828\", \"fe2367155cae2d1d5c07c10a64e3b6ef\", [])\n    蓝调舞曲             = EffectMeta(\"蓝调舞曲\", True, \"7366562845120646463\", \"7366562845120646463\", \"95d43f9239219401b66eae286f0ccc1c\", [])\n    蓝都                 = EffectMeta(\"蓝都\", True, \"7166470141494955297\", \"7166470141494955297\", \"6b7636f5921c185131dd935a77713dd7\", [])\n    蓝金                 = EffectMeta(\"蓝金\", True, \"7341300292148907327\", \"7341300292148907327\", \"4107fa238d7b56801c9cc3a4a3a15c32\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    蔚蓝海域             = EffectMeta(\"蔚蓝海域\", True, \"7487297018998607131\", \"7487297018998607131\", \"6e6217924fb9c959e770c2dceb2e8a03\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    薄绿                 = EffectMeta(\"薄绿\", True, \"7344374695053102371\", \"7344374695053102371\", \"4d2965f4455177ada455bd38eec021b8\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    薄荷奶绿             = EffectMeta(\"薄荷奶绿\", True, \"7478775705195547930\", \"7478775705195547930\", \"aa440e34665d6b825e6e5c51daddf4cd\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    薰草                 = EffectMeta(\"薰草\", True, \"7199455696017018151\", \"7199455696017018151\", \"9864263dc92e5a276336767b1845a731\", [])\n    藤宅                 = EffectMeta(\"藤宅\", True, \"7159133894975999244\", \"7159133894975999244\", \"50294465be1355e66f9b789711193204\", [])\n    街头                 = EffectMeta(\"街头\", True, \"7263357855678467364\", \"7263357855678467364\", \"cec28e1462ddc4ce254c41bc0465d083\", [])\n    褪色胶卷             = EffectMeta(\"褪色胶卷\", True, \"7502716416567545099\", \"7502716416567545099\", \"8eee6f53a48048bc43e278fe7455fa6b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    西冷                 = EffectMeta(\"西冷\", True, \"7131899038625975559\", \"7131899038625975559\", \"582a118ed87f8ddfbf2bab6ce6ccbba2\", [])\n    西西里               = EffectMeta(\"西西里\", True, \"7131488780451663140\", \"7131488780451663140\", \"36c35e9b449bd69a2d186c044c8032c8\", [])\n    西部峡谷             = EffectMeta(\"西部峡谷\", True, \"7595798301719694654\", \"7595798301719694654\", \"ba098db9df33ac91894368a2420a39a7\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    西雅图               = EffectMeta(\"西雅图\", True, \"7159175960414194982\", \"7159175960414194982\", \"d89963be26099b79db297b25e18011a6\", [])\n    诗诺                 = EffectMeta(\"诗诺\", True, \"7330543523042708790\", \"7330543523042708790\", \"ddc9145845f6f5548aba0c4f5ceb76ed\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    诗野                 = EffectMeta(\"诗野\", True, \"7385930407901990153\", \"7385930407901990153\", \"732ab9949e2fa049eafb47f349a435c5\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    贝果                 = EffectMeta(\"贝果\", True, \"7131656881805856013\", \"7131656881805856013\", \"21f8c68e7dd3fe22071ed06d21cc328a\", [])\n    质感增蓝             = EffectMeta(\"质感增蓝\", True, \"7493589321014906162\", \"7493589321014906162\", \"56ce0511b0a6c57c13b9893e02c8b1d9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    质感新中式           = EffectMeta(\"质感新中式\", True, \"7493945660903787803\", \"7493945660903787803\", \"4d5b0b65c44336d48392212a0cf39f90\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    质感晴春             = EffectMeta(\"质感晴春\", True, \"7482408418578271514\", \"7482408418578271514\", \"ebd1b0610f7bd86277a84a4499e608e3\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    赏味                 = EffectMeta(\"赏味\", True, \"7127608379056459015\", \"7127608379056459015\", \"d29bc8b2ddd9d018da1309ba9a467517\", [])\n    超清4K               = EffectMeta(\"超清4K\", True, \"7452918022752275762\", \"7452918022752275762\", \"b5f7af272fe9c86eba1ab10dfb30af53\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    超清电影             = EffectMeta(\"超清电影\", True, \"7437195358075145484\", \"7437195358075145484\", \"b4d4468d83898c1aeb1a9dc4562e9675\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    超清电影卷           = EffectMeta(\"超清电影卷\", True, \"7475289663381540150\", \"7475289663381540150\", \"1a1a0b6e3a384118c2aec2ce7688b31c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    超清画质             = EffectMeta(\"超清画质\", True, \"7460107425375472935\", \"7460107425375472935\", \"64488ffa5f279bff5138ab001694354b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    超白                 = EffectMeta(\"超白\", True, \"7302338645938261287\", \"7302338645938261287\", \"08f7a0eb8cd3535a23b4360acc4cc2f0\", [])\n    超透白皙             = EffectMeta(\"超透白皙\", True, \"7554056334228917514\", \"7554056334228917514\", \"bc71eed566e221f65b3f0ade45e0a7b2\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    超高清               = EffectMeta(\"超高清\", True, \"7471501720732863753\", \"7471501720732863753\", \"fa6384cf3f1bba156d8aa7d8c75707c5\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    越岭                 = EffectMeta(\"越岭\", True, \"7193989203930123554\", \"7193989203930123554\", \"80634d76c41bb167ee4c2bec4172235b\", [])\n    越野                 = EffectMeta(\"越野\", True, \"7195931118166609190\", \"7195931118166609190\", \"f8f340ecb359e2dd7f155da84b06f013\", [])\n    轻古早               = EffectMeta(\"轻古早\", True, \"7592592527794998580\", \"7592592527794998580\", \"4885d22159b8eae574e31fec0f3c086a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    轻氧夏               = EffectMeta(\"轻氧夏\", True, \"7522455016272121124\", \"7522455016272121124\", \"94ed475a3c59137c13fa00a9775987f2\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    轻肤III              = EffectMeta(\"轻肤III\", True, \"7387063538507975974\", \"7387063538507975974\", \"cbdb0b96103a7d22d960553d35bc8ebe\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    轻胶少女             = EffectMeta(\"轻胶少女\", True, \"7368463117287804197\", \"7368463117287804197\", \"5a1420dd511148188fa11d42998052ab\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    过期电影卷           = EffectMeta(\"过期电影卷\", True, \"7361791960652238143\", \"7361791960652238143\", \"7b98e4262666c36aeb965842cd14d10a\", [])\n    运动质感             = EffectMeta(\"运动质感\", True, \"7515060642705952011\", \"7515060642705952011\", \"375bb7107af2eadbb68bed5634e0c738\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    迷幻                 = EffectMeta(\"迷幻\", True, \"7233731748545203493\", \"7233731748545203493\", \"6eb7969f4e1becb256c90950b3cb8eb3\", [])\n    迷雾                 = EffectMeta(\"迷雾\", True, \"7160594413847203085\", \"7160594413847203085\", \"5143fc0b35bca33c7b010458ffe8f1d7\", [])\n    逆光拯救             = EffectMeta(\"逆光拯救\", True, \"7503403496117521690\", \"7503403496117521690\", \"215ef7f95fec78bf8ae7a287704ec22a\", [\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认70%, 0% ~ 100%\"\"\"\n    逆光提亮             = EffectMeta(\"逆光提亮\", True, \"7524288987129810214\", \"7524288987129810214\", \"314431f06e12dda849a2404eae2086cd\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    透氧肌肤             = EffectMeta(\"透氧肌肤\", True, \"7486780026029870386\", \"7486780026029870386\", \"28c30d84ec48ad647c130cd13699640d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    通透                 = EffectMeta(\"通透\", True, \"7530582568769522980\", \"7530582568769522980\", \"91c475f7f652322e83863e2e9105bbc2\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    通透暖食             = EffectMeta(\"通透暖食\", True, \"7409674549467352374\", \"7409674549467352374\", \"cad4cbe7d4bc4b96a84ff02b53733227\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    通透氧感             = EffectMeta(\"通透氧感\", True, \"7506758417143450890\", \"7506758417143450890\", \"9b272a024e2b804c5c5d1a373b9dddcf\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    邂逅                 = EffectMeta(\"邂逅\", True, \"7271145889119440147\", \"7271145889119440147\", \"6b6957bc110b65e03bc5d9ae65de6d66\", [])\n    郁金香               = EffectMeta(\"郁金香\", True, \"7343831195924303123\", \"7343831195924303123\", \"15e11e4352b9891fd1a1969ff7841b6b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    都卡                 = EffectMeta(\"都卡\", True, \"7341296364598480178\", \"7341296364598480178\", \"fac476280a61adbc7a731a9ee538b0b1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    都城                 = EffectMeta(\"都城\", True, \"7148817291583474980\", \"7148817291583474980\", \"3c6ec02ca887c9fdca982be6b3916430\", [])\n    都市                 = EffectMeta(\"都市\", True, \"7312646683672825100\", \"7312646683672825100\", \"486a70b4dc6b3cbedf1ad34461022d78\", [])\n    都市电影II           = EffectMeta(\"都市电影II\", True, \"7406976302122618123\", \"7406976302122618123\", \"ac28bc6e0a041b86886720147edbc7cd\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    酚蓝                 = EffectMeta(\"酚蓝\", True, \"7131322091839753502\", \"7131322091839753502\", \"29848db45e217e3af6f2ad05a252fea4\", [])\n    酷感辣妹             = EffectMeta(\"酷感辣妹\", True, \"7506178551725542696\", \"7506178551725542696\", \"89ff083b5e1c9d7fcde3556f6f116025\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    酷绿                 = EffectMeta(\"酷绿\", True, \"7281165120980454713\", \"7281165120980454713\", \"a8c562d272e85ba3920043355e3fdf69\", [])\n    醒春                 = EffectMeta(\"醒春\", True, \"7211006465358843196\", \"7211006465358843196\", \"3544111511d3c365e3068023059ed83e\", [])\n    里昂                 = EffectMeta(\"里昂\", True, \"7131643870714006821\", \"7131643870714006821\", \"634a11a0d1a1b69aa4ac2770aa47c7dc\", [])\n    野林                 = EffectMeta(\"野林\", True, \"7395470918245502234\", \"7395470918245502234\", \"55d1cb1e80f65e9b7de90b4634573223\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    野趣                 = EffectMeta(\"野趣\", True, \"7193983160231742772\", \"7193983160231742772\", \"dc9a0e3b25c1b462e5c684ac64bbb1b7\", [])\n    金姜                 = EffectMeta(\"金姜\", True, \"7233733326517832995\", \"7233733326517832995\", \"5116f63c46a435d34ccb83fd58b3d009\", [])\n    金粉飘落             = EffectMeta(\"金粉飘落\", True, \"7456773992901397787\", \"7456773992901397787\", \"0367f5e04e48d7526c33f0b210ebb41d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    铅绿                 = EffectMeta(\"铅绿\", True, \"7131509679246675208\", \"7131509679246675208\", \"a2f9487c275619234b3e3ca37badad36\", [])\n    银蓝                 = EffectMeta(\"银蓝\", True, \"7145394266209127694\", \"7145394266209127694\", \"e1f2f32043ab9fd801bfdbc9a9f708d3\", [])\n    镜粉                 = EffectMeta(\"镜粉\", True, \"7145390299370638600\", \"7145390299370638600\", \"26b6e129d49359d3112438c001f22926\", [])\n    闪星                 = EffectMeta(\"闪星\", True, \"7346450662185569555\", \"7346450662185569555\", \"f9bdd96e9282b3783dcc174484aa5fc6\", [])\n    闪耀派对             = EffectMeta(\"闪耀派对\", True, \"7471169568484953363\", \"7471169568484953363\", \"b188a83453552dc05b8f32619c7e3e40\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    阳光肤               = EffectMeta(\"阳光肤\", True, \"7234795543178775868\", \"7234795543178775868\", \"116a1adcf464b736d76bf31d679b3d72\", [])\n    阴天拯救             = EffectMeta(\"阴天拯救\", True, \"7361399516454604071\", \"7361399516454604071\", \"a219fa1f7b74d889f137be1ef3b136a6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    陶瓷肌               = EffectMeta(\"陶瓷肌\", True, \"7234793127867878712\", \"7234793127867878712\", \"e7b66853ca5dbdb1c049d45225b355cb\", [])\n    随性                 = EffectMeta(\"随性\", True, \"7271140658071588132\", \"7271140658071588132\", \"6619560c233df84381e8c371b7387faa\", [])\n    雀染                 = EffectMeta(\"雀染\", True, \"7145394848361729288\", \"7145394848361729288\", \"c6bc39d80e10c8bfe361164e83585a01\", [])\n    雅西卡               = EffectMeta(\"雅西卡\", True, \"7569903893891714329\", \"7569903893891714329\", \"2076756290bdcea6bca3040162a47637\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    雨皂                 = EffectMeta(\"雨皂\", True, \"7145678373530946824\", \"7145678373530946824\", \"af2869df0cbd9ea0ac0443206e91b135\", [])\n    雨空                 = EffectMeta(\"雨空\", True, \"7196917591909109052\", \"7196917591909109052\", \"ffe686005136a692517b6e19e4e490e7\", [])\n    雪地胶片             = EffectMeta(\"雪地胶片\", True, \"7431914829876694324\", \"7431914829876694324\", \"fb5e7ff5746e82dc6a426e2731012359\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    雪地胶片II           = EffectMeta(\"雪地胶片II\", True, \"7431914902177991970\", \"7431914902177991970\", \"e739418605bc306c84cde37fd76b937a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    雪地胶片III          = EffectMeta(\"雪地胶片III\", True, \"7431914955747691810\", \"7431914955747691810\", \"52e66f9849aed0df650660c2cc97a9f5\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    雪挞                 = EffectMeta(\"雪挞\", True, \"7262376135202327871\", \"7262376135202327871\", \"319cab31ed6a056c3f5256a357eb9b96\", [])\n    雪白肤III            = EffectMeta(\"雪白肤III\", True, \"7426223181205146890\", \"7426223181205146890\", \"76bb0c72be291d1ea9d9f108b67a70c1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    雪白透亮             = EffectMeta(\"雪白透亮\", True, \"7564026160212987190\", \"7564026160212987190\", \"cea2e70ffe56f0f03ec4e1be240bd34d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    雾都                 = EffectMeta(\"雾都\", True, \"7312646650202262820\", \"7312646650202262820\", \"00b8522f76bf9a991e0a6090f63747ee\", [])\n    雾野                 = EffectMeta(\"雾野\", True, \"7127823362356727077\", \"7127823362356727077\", \"6fbd00682d2a15e079bc242301e9b757\", [])\n    青提                 = EffectMeta(\"青提\", True, \"7131290518838938887\", \"7131290518838938887\", \"9cd0e0ba2190b96f6eccacbed5151b24\", [])\n    青春照               = EffectMeta(\"青春照\", True, \"7513077194952936767\", \"7513077194952936767\", \"754dec3e8e77d8fcb6e0902e63a923bd\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    青春胶片             = EffectMeta(\"青春胶片\", True, \"7510888042761096459\", \"7510888042761096459\", \"d7cee0f1454e87ac7735278aef69ebc7\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    青森                 = EffectMeta(\"青森\", True, \"7145390299106381086\", \"7145390299106381086\", \"9b0479f9bd81b1c22908e882f16610d8\", [])\n    青橙电影感           = EffectMeta(\"青橙电影感\", True, \"7478335987777572137\", \"7478335987777572137\", \"0acf322490d8427244fbfda12940b3f6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    青灰                 = EffectMeta(\"青灰\", True, \"7127671508264078599\", \"7127671508264078599\", \"a9b480c9b5bf91d2aa0b5e8388f53746\", [])\n    青蒲                 = EffectMeta(\"青蒲\", True, \"7145393992673414407\", \"7145393992673414407\", \"7cd919e92b66b19e00c95b9f3db9def8\", [])\n    青黄                 = EffectMeta(\"青黄\", True, \"7127541821332409630\", \"7127541821332409630\", \"e777bf266933df88bfc019a84e6dd792\", [])\n    青黄II               = EffectMeta(\"青黄II\", True, \"7337932621046910262\", \"7337932621046910262\", \"059b7e40c1fe52a2451c35bd82e329e5\", [])\n    韦斯                 = EffectMeta(\"韦斯\", True, \"7226989951911562553\", \"7226989951911562553\", \"7162086ae8bf07df55d86ce535bdd75c\", [])\n    韩女古早             = EffectMeta(\"韩女古早\", True, \"7538333322636741903\", \"7538333322636741903\", \"b6d5cb83bda0447010412e05d9471992\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    韩式古早             = EffectMeta(\"韩式古早\", True, \"7592591080688864546\", \"7592591080688864546\", \"4b481cd8955cc08bf0daaad898186364\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    韩系INS              = EffectMeta(\"韩系INS\", True, \"7407460599929572627\", \"7407460599929572627\", \"797ac245a94d625e2b38faf848e12fd8\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    风味                 = EffectMeta(\"风味\", True, \"7330579916272012580\", \"7330579916272012580\", \"7abbb099b234e92b6a7169f2ae6232b6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    风铃II               = EffectMeta(\"风铃II\", True, \"7356885346841349410\", \"7356885346841349410\", \"7e36a3f345976371e7a668d1e96c7905\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    风铃蓝               = EffectMeta(\"风铃蓝\", True, \"7261466919688015140\", \"7261466919688015140\", \"5bf0d1478c19629df96ad85b3301ec35\", [])\n    飒意                 = EffectMeta(\"飒意\", True, \"7248568718265978112\", \"7248568718265978112\", \"25a705fe908fad028d75a5b9bf30e4b7\", [])\n    食光II               = EffectMeta(\"食光II\", True, \"7478181967532543259\", \"7478181967532543259\", \"dee8c9a0537f6b78d56eb3b32a5f5de1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    食色                 = EffectMeta(\"食色\", True, \"7131644140340776205\", \"7131644140340776205\", \"8540ba0ddb988c6f5f4b69742ca94136\", [])\n    香浓                 = EffectMeta(\"香浓\", True, \"7330588808666156307\", \"7330588808666156307\", \"480c2599aaaf7be5a800c269dada7cdd\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    驮月                 = EffectMeta(\"驮月\", True, \"7145394213339860261\", \"7145394213339860261\", \"ba8a3a6272282d63ee8b46c2e228e09b\", [])\n    高晴画质             = EffectMeta(\"高晴画质\", True, \"7486890470149246219\", \"7486890470149246219\", \"8bdb640b5e3aa5fcd6c19f31463f36f9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清                 = EffectMeta(\"高清\", True, \"7447039744229428534\", \"7447039744229428534\", \"838ba5b40cfb93c8c8f4ac23489dd0ce\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清4k电影           = EffectMeta(\"高清4k电影\", True, \"7454130417562553651\", \"7454130417562553651\", \"cc6b3db256e26231e11fa48b17d80b71\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清II               = EffectMeta(\"高清II\", True, \"7325426821267295551\", \"7325426821267295551\", \"17a86357c081e0d080c9d501a66382d0\", [])\n    高清中性灰           = EffectMeta(\"高清中性灰\", True, \"7476126917280730378\", \"7476126917280730378\", \"34151fd0c9652a96e5debded17f272e9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清亮粉             = EffectMeta(\"高清亮粉\", True, \"7474611627338239282\", \"7474611627338239282\", \"202d1c83b5a7fa0e2bc1e29f28fd2d5f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清修复             = EffectMeta(\"高清修复\", True, \"7471501728546966835\", \"7471501728546966835\", \"9703a70d4a78fd4e9185a3cab90259c0\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清修复III          = EffectMeta(\"高清修复III\", True, \"7402847660165713190\", \"7402847660165713190\", \"3bf03425397e50f8a51df7f69fe34138\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清冷冬             = EffectMeta(\"高清冷冬\", True, \"7446737538967932186\", \"7446737538967932186\", \"a29f0443ce7468781539fe86dc17918a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清圣诞             = EffectMeta(\"高清圣诞\", True, \"7446290162922818870\", \"7446290162922818870\", \"4e9a65f2fdaa588f544c6b411e998547\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清增强             = EffectMeta(\"高清增强\", True, \"7426668776491453707\", \"7426668776491453707\", \"c28d7683eb3bbc58cd3b008b380ed551\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清增色             = EffectMeta(\"高清增色\", True, \"7440518219409968384\", \"7440518219409968384\", \"bdf331387c885b59eb154db384b9f801\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清增质             = EffectMeta(\"高清增质\", True, \"7436815358410886435\", \"7436815358410886435\", \"b2394c83d83e47b5f21b0307af48ac9e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清寒冬             = EffectMeta(\"高清寒冬\", True, \"7449684693982743817\", \"7449684693982743817\", \"dfd7cf9a4a54f20c70b2c9b2c5fbc6aa\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清影视             = EffectMeta(\"高清影视\", True, \"7437098009827036455\", \"7437098009827036455\", \"0cdff3f488d2dff927a695fdae418784\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清感               = EffectMeta(\"高清感\", True, \"7414810241453280549\", \"7414810241453280549\", \"f26fae62c0f2cc8b44506cd07d6a086e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清感II             = EffectMeta(\"高清感II\", True, \"7414810073731435785\", \"7414810073731435785\", \"b09366ac9d328a2594c8c0953e7f1167\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清感III            = EffectMeta(\"高清感III\", True, \"7414810202706447625\", \"7414810202706447625\", \"8c9985eeeedee5235a4943b845b240cd\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清提亮             = EffectMeta(\"高清提亮\", True, \"7439995842477428004\", \"7439995842477428004\", \"100906363649af4f5176b8565f27fc39\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清提升             = EffectMeta(\"高清提升\", True, \"7443710725773675803\", \"7443710725773675803\", \"f65967d1ee75e1d946c95fe6c730240f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清春日             = EffectMeta(\"高清春日\", True, \"7476104906924100915\", \"7476104906924100915\", \"a0150e0273b470188e19f1b7b24e4ef1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清晴天             = EffectMeta(\"高清晴天\", True, \"7442389591140748570\", \"7442389591140748570\", \"e7b2e8a233f1d0bc5b71aca1f8fa44ed\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清晴日             = EffectMeta(\"高清晴日\", True, \"7448290256476065035\", \"7448290256476065035\", \"23940e28ee7ceab734e59b2102fc7904\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清暖调             = EffectMeta(\"高清暖调\", True, \"7431187754379136266\", \"7431187754379136266\", \"23aea64209982cc3a0a3b1acdd276b3e\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清润颜             = EffectMeta(\"高清润颜\", True, \"7428629277110848768\", \"7428629277110848768\", \"1df56b348fb1eacd59e730e89e9b0363\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清漫晴             = EffectMeta(\"高清漫晴\", True, \"7442344329114422565\", \"7442344329114422565\", \"d948e6691c99022bb4cfed02a660245f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清焕晴             = EffectMeta(\"高清焕晴\", True, \"7471955373340101927\", \"7471955373340101927\", \"734bfe48985cc95384f10bb201f24dbe\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清电影             = EffectMeta(\"高清电影\", True, \"7413062310580800831\", \"7413062310580800831\", \"c6209556e6b9b723b7a2c7bf83d29051\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清电影卷           = EffectMeta(\"高清电影卷\", True, \"7452946862581058853\", \"7452946862581058853\", \"4ccd0bcc2434245db6d247397682b534\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清画质             = EffectMeta(\"高清画质\", True, \"7465342226118266162\", \"7465342226118266162\", \"3450ce5a0c73d4728321ba46ed98aed7\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清绿妍             = EffectMeta(\"高清绿妍\", True, \"7451808659320900891\", \"7451808659320900891\", \"7d50bac0231c7a6538ff64ca8c9d3218\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清美食             = EffectMeta(\"高清美食\", True, \"7435865312907676978\", \"7435865312907676978\", \"88736302c2c09917ddf9dd6ebef77373\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清自然             = EffectMeta(\"高清自然\", True, \"7469688503262039334\", \"7469688503262039334\", \"2f74c3aca65c95a3f998812d6e492016\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清质感             = EffectMeta(\"高清质感\", True, \"7433451928773807397\", \"7433451928773807397\", \"30ae508cfe0edc3ec1f749c243997a2a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清雪景             = EffectMeta(\"高清雪景\", True, \"7444960692853148955\", \"7444960692853148955\", \"04a4ecbde473119e6b055fcc0d34eb4a\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清雪肤             = EffectMeta(\"高清雪肤\", True, \"7447397442603076899\", \"7447397442603076899\", \"0fd44648b707fbea89ec49eaa2320b2d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清鲜明             = EffectMeta(\"高清鲜明\", True, \"7435675065498275081\", \"7435675065498275081\", \"46ab34769df26db38c9a7f84ca66c0d9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清黑白             = EffectMeta(\"高清黑白\", True, \"7429744855724641545\", \"7429744855724641545\", \"064d56e4db73deb306811f49462fffcb\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高清默冬             = EffectMeta(\"高清默冬\", True, \"7450134286071631141\", \"7450134286071631141\", \"6d27a4cc883039e86d079f7a80e51b40\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高级影视             = EffectMeta(\"高级影视\", True, \"7513959933310749991\", \"7513959933310749991\", \"cadf521e0e50c405df615f7c07dbbcb1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高级质感             = EffectMeta(\"高级质感\", True, \"7525074000846802227\", \"7525074000846802227\", \"bbde98630add7a33bab859fb52a27bf2\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    高街                 = EffectMeta(\"高街\", True, \"7145394469666376991\", \"7145394469666376991\", \"7036694f303647fe7526848bb622947f\", [])\n    高质感电影           = EffectMeta(\"高质感电影\", True, \"7528823226357665050\", \"7528823226357665050\", \"7372405faae785d55b79a73d6b7723a5\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    魅影                 = EffectMeta(\"魅影\", True, \"7175076304058895619\", \"7175076304058895619\", \"361328c4bc995c85053ea003268aefbf\", [])\n    魔都                 = EffectMeta(\"魔都\", True, \"7166480345666260263\", \"7166480345666260263\", \"cf4adfafcc5e59b9bddd8eeb4d20f44e\", [])\n    鲜亮                 = EffectMeta(\"鲜亮\", True, \"7127615338035858702\", \"7127615338035858702\", \"329252a715f5e0f9727810511e0e9832\", [])\n    鲜明                 = EffectMeta(\"鲜明\", True, \"7320434750018047251\", \"7320434750018047251\", \"ba8b7cbf504c97a30c923d0d6a6c2b44\", [])\n    鲜明II               = EffectMeta(\"鲜明II\", True, \"7361400073533820196\", \"7361400073533820196\", \"350ff543fdd150a6f7e571aa3f467640\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    鲜明增色             = EffectMeta(\"鲜明增色\", True, \"7463798839258909963\", \"7463798839258909963\", \"4c2512b58fb8debd1c75ce016a8919a5\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    鲜美                 = EffectMeta(\"鲜美\", True, \"7330581892510649636\", \"7330581892510649636\", \"0f2146e69f0cf22a0e0aa733be623bd4\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    鲜艳增色             = EffectMeta(\"鲜艳增色\", True, \"7497157143502654732\", \"7497157143502654732\", \"9008c9a3d5200c39fc34090ffca9a3d8\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    鲜花增彩             = EffectMeta(\"鲜花增彩\", True, \"7494505446158503179\", \"7494505446158503179\", \"38823b82a91be95b6ac61dd9fe1054e8\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    鲜花增色             = EffectMeta(\"鲜花增色\", True, \"7493083101426453796\", \"7493083101426453796\", \"f5b7e85440654ec13e83c55de61cb8fc\", [\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    鲜花增艳             = EffectMeta(\"鲜花增艳\", True, \"7493457725431631142\", \"7493457725431631142\", \"bed611a951986953cad10fe37720acd1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    鲜花自然             = EffectMeta(\"鲜花自然\", True, \"7610447734406941994\", \"7610447734406941994\", \"ea05726be30c1ff7645cb754c3df8292\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    鲜萃食光             = EffectMeta(\"鲜萃食光\", True, \"7580047192463969560\", \"7580047192463969560\", \"0cc0343094d17a7136fbbff28bd08a36\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    鸿运新春             = EffectMeta(\"鸿运新春\", True, \"7595835595054730542\", \"7595835595054730542\", \"6ba9471c2fc7de958fde09e2488ff7ba\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    鹅冠                 = EffectMeta(\"鹅冠\", True, \"7308714123913612607\", \"7308714123913612607\", \"37be69ef37633c108a65ab994875d06e\", [])\n    麋鹿                 = EffectMeta(\"麋鹿\", True, \"7430673747708792075\", \"7430673747708792075\", \"80fb6fdd7346e05845f45a7f0966049d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    黄昏                 = EffectMeta(\"黄昏\", True, \"7272330168717430075\", \"7272330168717430075\", \"eebcc8f84ff895bd0d66535d9ad44275\", [])\n    黑冰                 = EffectMeta(\"黑冰\", True, \"7131522303082466597\", \"7131522303082466597\", \"d03c03e8f1e67f5cff0a5671fe96dfb9\", [])\n    黑暗神话             = EffectMeta(\"黑暗神话\", True, \"7408496787398446362\", \"7408496787398446362\", \"0685a00dcd0068efd472e6019d312774\", [])\n    黑曜                 = EffectMeta(\"黑曜\", True, \"7223712396769119545\", \"7223712396769119545\", \"3b81efb578ddec8efa40dd0c5b754056\", [])\n    黑白记忆             = EffectMeta(\"黑白记忆\", True, \"7533265997478808841\", \"7533265997478808841\", \"6c0dc5428414f66db73be80c2bc1c012\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    黑金                 = EffectMeta(\"黑金\", True, \"7414902721733479699\", \"7414902721733479699\", \"46eddfebd9864056c59bf8219cb671e9\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    黑金红               = EffectMeta(\"黑金红\", True, \"7341266486536768831\", \"7341266486536768831\", \"66796ec5de5e85b2cf461fa49b4c0225\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    黛瓦                 = EffectMeta(\"黛瓦\", True, \"7226247580018019644\", \"7226247580018019644\", \"5d96058b7d47716b7c928aca57407cb7\", [])\n    龙舌兰               = EffectMeta(\"龙舌兰\", True, \"7252674245396942139\", \"7252674245396942139\", \"254083154fd15d41d41cc3763eda9f40\", [])\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/font_meta.py",
    "content": "\"\"\"字体资源元数据\"\"\"\n\nfrom .effect_meta import EffectEnum\nfrom .effect_meta import EffectMeta\n\nclass FontType(EffectEnum):\n    \"\"\"字体资源类型\"\"\"\n\n    # 免费特效\n    _3D_만화               = EffectMeta(\"3D 만화\", False, \"6841117833447870990\", \"20402387\", \"9d79db0486d90980a54240b3313ea156\", [])\n    A1明朝               = EffectMeta(\"A1明朝\", False, \"7246698168547545602\", \"20403949\", \"6eca3b3507bab16aac9ad557fa17a46e\", [])\n    AlexBrush            = EffectMeta(\"AlexBrush\", False, \"7241838813960475173\", \"14864426\", \"6be278d4aef1173e6ca44f9ff96f913a\", [])\n    Alice_Regular        = EffectMeta(\"Alice-Regular\", False, \"7238874837500826170\", \"14443129\", \"2d35398aea443c50ab0f28f32492311d\", [])\n    Alike_Regular        = EffectMeta(\"Alike-Regular\", False, \"7238879091334582821\", \"14443547\", \"51f4b11df2a6423c714ce8e27febf3a8\", [])\n    Allura_Regular       = EffectMeta(\"Allura-Regular\", False, \"7239181917067678266\", \"14864457\", \"db0c6eb393c3b4e0db86ef3f81c2df49\", [])\n    Amble_Regular        = EffectMeta(\"Amble-Regular\", False, \"7236679983140180539\", \"14138187\", \"681c9b484dbc55dc6322de5318773956\", [])\n    Amigate              = EffectMeta(\"Amigate\", False, \"7042231710112551431\", \"1485328\", \"1496029e87060f4208d5fbc127ed5f2c\", [])\n    Anson                = EffectMeta(\"Anson\", False, \"7312373886476096001\", \"37083210\", \"1f6c4b124f1cc0c8dc64e9a8d5d5db1c\", [])\n    Anton                = EffectMeta(\"Anton\", False, \"6807743423336944142\", \"643585\", \"42dd948f3247dc39f802bf951e9be731\", [])\n    Arizonia_Regular     = EffectMeta(\"Arizonia-Regular\", False, \"7239188828425032252\", \"14864444\", \"00b288db92a3de4e612d10a6d73dd551\", [])\n    Arvo                 = EffectMeta(\"Arvo\", False, \"7238901809073361467\", \"14451489\", \"a086736a58a78472c0b20dc4ab1e6c86\", [])\n    Ballet               = EffectMeta(\"Ballet\", False, \"7241838661656908343\", \"14864427\", \"fd0c45be63da4eea7647907d22335953\", [])\n    Barrio_Regular       = EffectMeta(\"Barrio-Regular\", False, \"7239174980292842044\", \"14471579\", \"08c0bd8b8b221c5ab1a6c601d03c1643\", [])\n    Belleza_Regular      = EffectMeta(\"Belleza-Regular\", False, \"7234404156780319288\", \"13824767\", \"fe94f7ae72a9ec37f34c25d99835d35b\", [])\n    Bevan_Regular        = EffectMeta(\"Bevan-Regular\", False, \"7238530249451901496\", \"14400121\", \"1d181b88d75b2728ae21ecec60525f01\", [])\n    Bilbo_Regular        = EffectMeta(\"Bilbo-Regular\", False, \"7239189505289228861\", \"14864440\", \"d0619bf78b9ad1b563f44726bf5e6eeb\", [])\n    BlackMango_Regular   = EffectMeta(\"BlackMango-Regular\", False, \"7306445155244970497\", \"41472093\", \"8f91492140c961395923bc1edd9abae8\", [])\n    Blinker_Thin         = EffectMeta(\"Blinker-Thin\", False, \"7209874013324055098\", \"10587620\", \"81c6838b262365f201bbc4e7bd1dd3d4\", [])\n    Boxing               = EffectMeta(\"Boxing\", False, \"7078972382651617805\", \"1648729\", \"bab7d0b17e408bd9098c074825e15fc0\", [])\n    Bungee_Regular       = EffectMeta(\"Bungee-Regular\", False, \"7314592672792973826\", \"37039650\", \"26f72c42742cd487ebafebfa8bc45c4f\", [])\n    Caladea_Regular      = EffectMeta(\"Caladea-Regular\", False, \"7209874013319860797\", \"10587623\", \"2611c4dab5e14627c0d2d0e1da6b2279\", [])\n    Calfine              = EffectMeta(\"Calfine\", False, \"7076269550299255309\", \"1632683\", \"4064e735eb58176895303b2c16b746a0\", [])\n    Candal_Regular       = EffectMeta(\"Candal-Regular\", False, \"7234514498579599928\", \"13854523\", \"a2d487c2f846a1ccda2bf132ed899a0f\", [])\n    Candice              = EffectMeta(\"Candice\", False, \"7080446593123488286\", \"1656182\", \"64df76345cbd40beadae4bd3de9ba3b2\", [])\n    Carattere_Regular    = EffectMeta(\"Carattere-Regular\", False, \"7277869798401249851\", \"22621896\", \"b80aaa34cc2482fbba8d202f881b1405\", [])\n    Cardo_Regular        = EffectMeta(\"Cardo-Regular\", False, \"7209874013324055101\", \"10587624\", \"9ace63fa497bb12601dd89a36864bb3e\", [])\n    Caveat_Bold          = EffectMeta(\"Caveat-Bold\", False, \"7239187536675869242\", \"14864446\", \"4388f5af4caff83b8b322d911bfc54bd\", [])\n    Caveat_Regular       = EffectMeta(\"Caveat-Regular\", False, \"7277872672304796217\", \"22621892\", \"2ad4a79314b4fe122e8ff7599133cf4a\", [])\n    Chonburi_Regular     = EffectMeta(\"Chonburi-Regular\", False, \"7209944750021939771\", \"10608872\", \"77ff38c7d3ea5d01f2f2609a56f12d9e\", [])\n    Cinzel_Regular       = EffectMeta(\"Cinzel-Regular\", False, \"7209874013324055095\", \"10587622\", \"ef50d040311cab144dd0879e9fb17214\", [])\n    Coda_Heavy           = EffectMeta(\"Coda-Heavy\", False, \"7234514878008922681\", \"13854593\", \"e59a0f53b9d8fcf82f0ecc64e6e82b03\", [])\n    Coiny_Regular        = EffectMeta(\"Coiny-Regular\", False, \"7203293403990200834\", \"27240316\", \"027b0038d0184ca86288c22298b82600\", [])\n    Cola                 = EffectMeta(\"Cola\", False, \"7076270486740537863\", \"1632682\", \"bb54dd710db7f3d31d747d4f62421710\", [])\n    Cookie_Regular       = EffectMeta(\"Cookie-Regular\", False, \"7239182754624049720\", \"14864454\", \"cf340cf39c31a5b28b85b5f6dec07367\", [])\n    Cormorant_Garamond_Medium = EffectMeta(\"Cormorant Garamond-Medium\", False, \"7238899812190392888\", \"14451211\", \"f7693a5eb89ce8af8b6b978d89dbc56e\", [])\n    Coustard_Regular     = EffectMeta(\"Coustard-Regular\", False, \"7209874014028698172\", \"10587614\", \"99006417512ae6c9126a739f6cdbeea1\", [])\n    Crimson_SemiboldItalic = EffectMeta(\"Crimson-SemiboldItalic\", False, \"7239227834273632827\", \"14864433\", \"b6cc62d01a2cc5280c48b7db98db93c4\", [])\n    Dynalight_Regular    = EffectMeta(\"Dynalight-Regular\", False, \"7239227395088060987\", \"14864435\", \"5d5320056f020e023af8d8b2cc437882\", [])\n    Exo                  = EffectMeta(\"Exo\", False, \"7003588519440421413\", \"1349503\", \"c7861a7748efe6c7f69b2d864881eeb3\", [])\n    Facon                = EffectMeta(\"Facon\", False, \"6807743498851193352\", \"643587\", \"efbc6d45df587ebb12ed68df89da03ff\", [])\n    FiraSans_Book        = EffectMeta(\"FiraSans-Book\", False, \"7236005080040739388\", \"14037099\", \"d8e3ce7cb329f8fd088ab68593cee7c3\", [])\n    Fraunces_Black       = EffectMeta(\"Fraunces-Black\", False, \"7209874014221636155\", \"10587607\", \"e4eaeb42700c4e326415285bcd62568c\", [])\n    Fulbo_Argenta        = EffectMeta(\"Fulbo-Argenta\", False, \"7239234097267085861\", \"14490123\", \"df542eac625386374be06a4ff47f44bb\", [])\n    Gallery              = EffectMeta(\"Gallery\", False, \"7030677248797577765\", \"1441466\", \"c6c8e230a16440a4df49ae96893c8211\", [])\n    GenWanMinJP_Light_源云明体 = EffectMeta(\"GenWanMinJP-Light（源云明体）\", False, \"7265529261530812985\", \"20356559\", \"c6088aac4b7825da8d0781b25375b333\", [])\n    GenWanMinJP_Medium_源云明体 = EffectMeta(\"GenWanMinJP-Medium（源云明体）\", False, \"7265529620802310713\", \"20356561\", \"941698601932e62603a114646b13c8d6\", [])\n    GenWanMinJP_Regular_源云明体 = EffectMeta(\"GenWanMinJP-Regular（源云明体）\", False, \"7265529744542667322\", \"20356563\", \"62a5403aa320065c8020fff2332606a0\", [])\n    GenWanMinJP_SB_源云明体 = EffectMeta(\"GenWanMinJP-SB（源云明体）\", False, \"7265529923547173413\", \"20356565\", \"f8f73f5b108d3a2ada9b8bdb5ba230ce\", [])\n    Giveny               = EffectMeta(\"Giveny\", False, \"7030676531156357645\", \"1441468\", \"7499748cd12c31b8e3e5c30fb7184a54\", [])\n    Great_Vibes_Regular  = EffectMeta(\"Great Vibes-Regular\", False, \"7239229310119187001\", \"14864431\", \"055d9f5c35d0a5b803ff9eb94cfd1c9d\", [])\n    Grenze_Thin          = EffectMeta(\"Grenze-Thin\", False, \"7209874014951445051\", \"10587602\", \"654a7647f1fc34d7bd45eaf48bc09f94\", [])\n    HG行書体             = EffectMeta(\"HG行書体\", False, \"6808052324217393677\", \"20402937\", \"f5db863a8c3d18dd45b27ebf125f3053\", [])\n    HarmonyOSCn_Ltlt     = EffectMeta(\"HarmonyOSCn-Ltlt\", False, \"7265589159580930621\", \"20373125\", \"896d4f7f284c9fac25df861900c40b52\", [])\n    HarmonyOS_Sans_SC_Bold = EffectMeta(\"HarmonyOS_Sans_SC_Bold\", False, \"7265594890002633272\", \"20374146\", \"43f72102bcc9cf55d485857e81a4b1d0\", [])\n    HarmonyOS_Sans_SC_Light = EffectMeta(\"HarmonyOS_Sans_SC_Light\", False, \"7265595050145354295\", \"20374151\", \"049f4b5a6101391d7e4b67654a5ba00b\", [])\n    HarmonyOS_Sans_SC_Medium = EffectMeta(\"HarmonyOS_Sans_SC_Medium\", False, \"7265595177916437050\", \"20374140\", \"b6636326c0e4bd6b7d163210313e36b1\", [])\n    HarmonyOS_Sans_SC_Regular = EffectMeta(\"HarmonyOS_Sans_SC_Regular\", False, \"7265595305163231781\", \"20374142\", \"ae33e48fc99aa4c8bdf259ec8aa7b768\", [])\n    HarmonyOS_Sans_TC_Bold = EffectMeta(\"HarmonyOS_Sans_TC_Bold\", False, \"7265530043495879226\", \"20356569\", \"ed1b8e7841ccba0c1a530d4d975a3651\", [])\n    HarmonyOS_Sans_TC_Light = EffectMeta(\"HarmonyOS_Sans_TC_Light\", False, \"7265530445658329661\", \"20356571\", \"f43d72b12b7ac433a6b9efd13b00e44c\", [])\n    HarmonyOS_Sans_TC_Medium = EffectMeta(\"HarmonyOS_Sans_TC_Medium\", False, \"7265530519687795255\", \"20356573\", \"116d59aa44e88bda1c3b4652ccc42bc5\", [])\n    HarmonyOS_Sans_TC_Regular = EffectMeta(\"HarmonyOS_Sans_TC_Regular\", False, \"7265530629050077754\", \"20356575\", \"57cdc99508ebf188ee9107f21c558e1d\", [])\n    HeptaSlab_Light      = EffectMeta(\"HeptaSlab-Light\", False, \"7277873865001275964\", \"22621897\", \"3fd3c1d463fc7ae1918dff1ce91544ae\", [])\n    Inter_SemiBold       = EffectMeta(\"Inter-SemiBold\", False, \"7314592494006571522\", \"37039662\", \"a6c30071ea24cb16a01a3bf1bc6be1fc\", [])\n    Italianno            = EffectMeta(\"Italianno\", False, \"7241839293499445820\", \"14864422\", \"556a3f0ce762e7524a1163ffc59ffd54\", [])\n    Jellee_Bold          = EffectMeta(\"Jellee-Bold\", False, \"7239233471132996153\", \"14489881\", \"d20fff398f68280b5a62d5c6718251ef\", [])\n    Kanit_ExtraBoldItalic = EffectMeta(\"Kanit-ExtraBoldItalic\", False, \"7341281330442801665\", \"48512062\", \"aebb4a5aba5f9fa5fbc1e108ae58738b\", [])\n    Kanit_Regular        = EffectMeta(\"Kanit-Regular\", False, \"7341281459799331330\", \"48512024\", \"8c53bab543a483f4aea69870952e15b5\", [])\n    KaushanScript        = EffectMeta(\"KaushanScript\", False, \"7241838959305691707\", \"14864425\", \"668f46331e342dbebebb36c127e9d937\", [])\n    Koulen_Regular       = EffectMeta(\"Koulen-Regular\", False, \"7341281656319250945\", \"48512036\", \"7b5c8caefbc8f8c2cf6834e65d10c48a\", [])\n    LXGWWenKai_Bold      = EffectMeta(\"LXGWWenKai-Bold\", False, \"7265591538472718903\", \"20373127\", \"562011555df237de57ff2da20dde5ecc\", [])\n    LXGWWenKai_Light     = EffectMeta(\"LXGWWenKai-Light\", False, \"7265592227118715448\", \"20373111\", \"302ec5cdf24cd8ed486ffdcfc1431c39\", [])\n    LXGWWenKai_Regular   = EffectMeta(\"LXGWWenKai-Regular\", False, \"7265591946897265212\", \"20373101\", \"7bac545cc43d16cfc89b681ba37b06e7\", [])\n    Letter               = EffectMeta(\"Letter\", False, \"6740438320989344263\", \"349325\", \"afe91c6c7dfc29fca46fd33e9900e738\", [])\n    Lexend_Tera_Regular  = EffectMeta(\"Lexend Tera-Regular\", False, \"7234820388151104061\", \"13897171\", \"c80509ef3cbbf1a22e997e028d8d65d7\", [])\n    Lora_Regular         = EffectMeta(\"Lora-Regular\", False, \"7238875962530599481\", \"14443153\", \"b5e90b8f301b01629056e71f3df5a456\", [])\n    Love                 = EffectMeta(\"Love\", False, \"6766522308593979917\", \"459276\", \"a329a038511121412865fa841f51dfc3\", [])\n    Luxury               = EffectMeta(\"Luxury\", False, \"7291876268541219329\", \"41472051\", \"8b2c690dc8c0a5124b5536aab2915747\", [])\n    Maler                = EffectMeta(\"Maler\", False, \"7080115730963763743\", \"1654362\", \"bc7bb1a47b0de76584924e455397ec39\", [])\n    Marker               = EffectMeta(\"Marker\", False, \"6766523474354639373\", \"459282\", \"a32ce70017cd4b72adc8aee8768c2380\", [])\n    Mirza_Regular        = EffectMeta(\"Mirza-Regular\", False, \"7239174396349256249\", \"14471319\", \"10d2e66842d9ee555bede8d5b1f0dbe7\", [])\n    Misto                = EffectMeta(\"Misto\", False, \"7078972749472862757\", \"1648728\", \"3a0130cbb7dd5e67908f7c1549f2b16c\", [])\n    Modern               = EffectMeta(\"Modern\", False, \"6740498577912500749\", \"349479\", \"3bd3fe9a9464df4555335393bb266aba\", [])\n    Mokgech              = EffectMeta(\"Mokgech\", False, \"7042232545433358878\", \"1485324\", \"40cd447e9f6cd01454c5754e29d8d277\", [])\n    Montserrat_Black     = EffectMeta(\"Montserrat-Black\", False, \"7314592902414340609\", \"37039624\", \"93753515f71befcab33fb82a861ae668\", [])\n    Montserrat_Thin      = EffectMeta(\"Montserrat-Thin\", False, \"7209944750529450554\", \"10608863\", \"fd322e04efc93ed0b04a5c5eccf8670a\", [])\n    Nunito               = EffectMeta(\"Nunito\", False, \"6807743644842332685\", \"643589\", \"5243915a1b14f5fe467f4d5f10d2ba38\", [])\n    OldStandardTT_Regular = EffectMeta(\"OldStandardTT-Regular\", False, \"7277874282493907512\", \"22621894\", \"24b6280d5832d9d6cbfada464f5c5a61\", [])\n    Parisienne_Regular   = EffectMeta(\"Parisienne-Regular\", False, \"7239229422367150652\", \"14864430\", \"1198a78a64a487470c2896642867fd4f\", [])\n    Playfair_Display_SC_Re = EffectMeta(\"Playfair Display SC-Re\", False, \"7238897435437699639\", \"14450193\", \"ad4a8a89cccf34fa545d809eb5fb9e98\", [])\n    PlayfairDisplay_Italic = EffectMeta(\"PlayfairDisplay-Italic\", False, \"7238900597125026341\", \"14451355\", \"5f2b452050047a6277d4a8e4a0714719\", [])\n    Plunct               = EffectMeta(\"Plunct\", False, \"7035916496484176421\", \"1459552\", \"ba351b572d684c0f8ea9b7d6cab9f500\", [])\n    Polly                = EffectMeta(\"Polly\", False, \"7078971156350374431\", \"1648730\", \"02fb23bcda9f281d4029ef482bb3c1fb\", [])\n    Poppins_Bold         = EffectMeta(\"Poppins-Bold\", False, \"7312373689708712449\", \"41472095\", \"d090413fb1d5672cdf7177fea62fbccd\", [])\n    Poppins_Regular      = EffectMeta(\"Poppins-Regular\", False, \"7202912523383738881\", \"41472101\", \"62f9677bff07407d954efbb810d8273e\", [])\n    Prata                = EffectMeta(\"Prata\", False, \"6807743776916771335\", \"643593\", \"e02d50dc998334eb230ccf6abd8703d2\", [])\n    Quattrocento_Regular = EffectMeta(\"Quattrocento-Regular\", False, \"7238898734724026917\", \"14450839\", \"a48a832bc5b72fcfedc20c67dfa355ce\", [])\n    RedHatDisplay_BoldItalic = EffectMeta(\"RedHatDisplay-BoldItalic\", False, \"7341281783637348865\", \"48512032\", \"c24c458d3099c3e7f327635326ba78ce\", [])\n    RedHatDisplay_Light  = EffectMeta(\"RedHatDisplay-Light\", False, \"7341282109987754497\", \"48512058\", \"319e4fda3248900720841a4475234a89\", [])\n    ReenieBeanie_Regular = EffectMeta(\"ReenieBeanie-Regular\", False, \"7277866226397745701\", \"22618063\", \"c8ce7ac2720c24710aa6972bc2ea6db8\", [])\n    ResourceHanRoundedCN_Bold = EffectMeta(\"ResourceHanRoundedCN-Bold\", False, \"7265596195949515319\", \"20374132\", \"5cbf4c907356bf12a5eb668b7ed47ae5\", [])\n    ResourceHanRoundedCN_Lt = EffectMeta(\"ResourceHanRoundedCN-Lt\", False, \"7265596294683431485\", \"20374136\", \"da4650aca66cca11be078688afe61353\", [])\n    ResourceHanRoundedCN_Md = EffectMeta(\"ResourceHanRoundedCN-Md\", False, \"7265596408491676197\", \"20374131\", \"b21249fcbc5e1d96505fdeb21c1f7e8f\", [])\n    ResourceHanRoundedCN_Nl = EffectMeta(\"ResourceHanRoundedCN-Nl\", False, \"7265596514955694649\", \"20374148\", \"5df531b829fa804cb520148c5d1e7c85\", [])\n    Rix독도                = EffectMeta(\"Rix독도\", False, \"6808056629678838286\", \"645449\", \"10fbabdd4c0f2d733c3bac1934e2027b\", [])\n    Romantic             = EffectMeta(\"Romantic\", False, \"6807743277853315597\", \"643581\", \"f0d68fa6c56d1fe75337697635d8d073\", [])\n    Rubik                = EffectMeta(\"Rubik\", False, \"7003588607231398430\", \"1349502\", \"8d5c645a77e132c533bb1988579736de\", [])\n    SansitaSwashed_Regular = EffectMeta(\"SansitaSwashed-Regular\", False, \"7314592065168347650\", \"37108558\", \"136c05da10e6016965dccd20b017a0ad\", [])\n    SecularOne_Regular   = EffectMeta(\"SecularOne-Regular\", False, \"7312374157725929986\", \"37082988\", \"6b3bb5fe24e5b1df5ed82af22a1b45bd\", [])\n    Serrat               = EffectMeta(\"Serrat\", False, \"7068208488563872286\", \"1588332\", \"a71fc3b2ebc32587189c11b403dc267d\", [])\n    Signature            = EffectMeta(\"Signature\", False, \"7042230917837885965\", \"1485330\", \"4e29c132141a12bbbffb4a6c5b35bac2\", [])\n    Soap                 = EffectMeta(\"Soap\", False, \"7076269202771808804\", \"1632684\", \"853e5b6b92915f439228d36ae9be0ddf\", [])\n    SourceHanSansCN_Bold = EffectMeta(\"SourceHanSansCN-Bold\", False, \"7265596643066516029\", \"20374122\", \"fb70a3667211b2962782b5a2c127b2a6\", [])\n    SourceHanSansCN_Light = EffectMeta(\"SourceHanSansCN-Light\", False, \"7265596753926165050\", \"20374126\", \"1e5cecf2d7f404937e579b691dd824c5\", [])\n    SourceHanSansCN_Medium = EffectMeta(\"SourceHanSansCN-Medium\", False, \"7265596846465094199\", \"20374144\", \"6ae9ea8211a7b2df59519cc25bf0e4d3\", [])\n    SourceHanSansCN_Normal = EffectMeta(\"SourceHanSansCN-Normal\", False, \"7265596944867660346\", \"20374137\", \"0875520d11130e75a7c55db404269fef\", [])\n    SourceHanSansCN_Regular = EffectMeta(\"SourceHanSansCN-Regular\", False, \"7265597035946971705\", \"20374128\", \"ab9425633f936ad3aee8ce6776a8d785\", [])\n    SourceHanSansTW_Bold = EffectMeta(\"SourceHanSansTW-Bold\", False, \"7265530703364756026\", \"20356585\", \"068f075fb3e12a9e7d866485e4ec90fd\", [])\n    SourceHanSansTW_Light = EffectMeta(\"SourceHanSansTW-Light\", False, \"7265530900580930085\", \"20356587\", \"3c658b896e04038f1e64a7b482c09f2e\", [])\n    SourceHanSansTW_Medium = EffectMeta(\"SourceHanSansTW-Medium\", False, \"7265530989479203389\", \"20356589\", \"3db3cffea241e097cfef7bcef2334d90\", [])\n    SourceHanSansTW_Normal = EffectMeta(\"SourceHanSansTW-Normal\", False, \"7265531070680928828\", \"20356591\", \"7e3007f207de8eeb029b534fbaf9a13f\", [])\n    SourceHanSansTW_Regular = EffectMeta(\"SourceHanSansTW-Regular\", False, \"7265531198548480568\", \"20356593\", \"9a228f45a856db7e2acc9844fe12de42\", [])\n    SourceHanSerifCN_Bold = EffectMeta(\"SourceHanSerifCN-Bold\", False, \"7265597144600416827\", \"20374153\", \"3a3f2f08644467089cadaeb22596a407\", [])\n    SourceHanSerifCN_Light = EffectMeta(\"SourceHanSerifCN-Light\", False, \"7265597259708895803\", \"20374143\", \"f8733631870deaba746afcb65ef30389\", [])\n    SourceHanSerifCN_Medium = EffectMeta(\"SourceHanSerifCN-Medium\", False, \"7265597365539574329\", \"20374123\", \"6b1255756261d5ddb9ac40216ee5a2f0\", [])\n    SourceHanSerifCN_Regular = EffectMeta(\"SourceHanSerifCN-Regular\", False, \"7265597449262076474\", \"20374152\", \"47dc066be4a347aa81c347554fa376a9\", [])\n    SourceHanSerifCN_SemiBold = EffectMeta(\"SourceHanSerifCN-SemiBold\", False, \"7265598654294004281\", \"20374118\", \"f1b0ad6ceca5ec6bd47b0dacae9fbf97\", [])\n    SourceHanSerifTW_Bold = EffectMeta(\"SourceHanSerifTW-Bold\", False, \"7265534770845585980\", \"20356595\", \"7de7afb3383bc3c71064e694a8437fed\", [])\n    SourceHanSerifTW_Light = EffectMeta(\"SourceHanSerifTW-Light\", False, \"7265535017625850429\", \"20356597\", \"78bd0a481bca529b29dadce742f93d4b\", [])\n    SourceHanSerifTW_Medium = EffectMeta(\"SourceHanSerifTW-Medium\", False, \"7265535154775396919\", \"20356599\", \"13289edc534678e1ac9846ffea550910\", [])\n    SourceHanSerifTW_Regular = EffectMeta(\"SourceHanSerifTW-Regular\", False, \"7265535307322233399\", \"20356601\", \"8850278849317c50eefc844c086dd455\", [])\n    SourceHanSerifTW_SemiBold = EffectMeta(\"SourceHanSerifTW-SemiBold\", False, \"7265535436594876984\", \"20356603\", \"2420aafb990c49f9266bfd0bd3d79149\", [])\n    SourceSansPro_Regular = EffectMeta(\"SourceSansPro-Regular\", False, \"7235998842880004665\", \"14035983\", \"2ded03684e9f6b64a81d74f915b17042\", [])\n    Specta               = EffectMeta(\"Specta\", False, \"7039992016805040671\", \"1478300\", \"86debc3c92b292b162ce399aca9f61f8\", [])\n    Spicy_Rice_Regular   = EffectMeta(\"Spicy Rice-Regular\", False, \"7239229520828437053\", \"14864429\", \"7dbb386a703bd1e6b67376ca92f0fa8c\", [])\n    Staatliches_Regular  = EffectMeta(\"Staatliches-Regular\", False, \"7312373990083793409\", \"37083204\", \"eb3e70b0668eb3e03499cd5162bbf8e3\", [])\n    Sunset               = EffectMeta(\"Sunset\", False, \"6807743703436759566\", \"643591\", \"01365a30a2569e10b160f7bd46e2c8c8\", [])\n    Thrive               = EffectMeta(\"Thrive\", False, \"7290877082660246071\", \"26148239\", \"09aecfbb88990df392ae7dfa53e56b6e\", [])\n    Thunder              = EffectMeta(\"Thunder\", False, \"7050422198724465189\", \"1511612\", \"f68ab331feafe5deac4c9484df686557\", [])\n    Work_Sans_ExtraBoldItalic = EffectMeta(\"Work Sans-ExtraBoldItalic\", False, \"7209944751246676517\", \"10608852\", \"b4bb205043371da7ac23c095d1a15895\", [])\n    WorkSans_BlackItalic = EffectMeta(\"WorkSans-BlackItalic\", False, \"7236677807634387511\", \"14137039\", \"b7fe9aff83a587f1bb128d15df0c469e\", [])\n    WorkSans_Regular     = EffectMeta(\"WorkSans-Regular\", False, \"7242301481699775032\", \"14963149\", \"3858f6a8bc6aa06a36b66771b24d8cb9\", [])\n    ZEN丸コ_シック           = EffectMeta(\"ZEN丸ゴシック\", False, \"7236735800514187831\", \"20403385\", \"aa2051cae318b4fb3a736aad88f3fd81\", [])\n    ZEN紅道              = EffectMeta(\"ZEN紅道\", False, \"7244104371372298754\", \"20403919\", \"a010d51f36e5954e6e4ca9112dcb141d\", [])\n    ZY_Alluring_Regular  = EffectMeta(\"ZY Alluring-Regular\", False, \"7277862842190008891\", \"22616627\", \"4d56dbea0c35acab69a5d51861521b12\", [])\n    ZY_Azure             = EffectMeta(\"ZY Azure\", False, \"7230715188326961721\", \"13314774\", \"92baf67659d39c44e7a7e00f7024ada1\", [])\n    ZY_Bless             = EffectMeta(\"ZY Bless\", False, \"7229615361967002172\", \"13168499\", \"8142200dd17ebb41839e9e580fc80aa4\", [])\n    ZY_Coconut_Regular   = EffectMeta(\"ZY Coconut-Regular\", False, \"7277865493736722981\", \"22618062\", \"882aa39ef38c6acb7244d2712f484194\", [])\n    ZY_Dexterous         = EffectMeta(\"ZY Dexterous\", False, \"7320169657841750529\", \"38698692\", \"fadee671a67e0e552e0d61f480e78348\", [])\n    ZY_Diligent          = EffectMeta(\"ZY Diligent\", False, \"7270787894317421093\", \"21346088\", \"0ca879fd3498f0e7957797dceb6b419f\", [])\n    ZY_Etiquette         = EffectMeta(\"ZY Etiquette\", False, \"7262284005293167160\", \"19649099\", \"5ad3fe6b440cde181cb9240565d1afe5\", [])\n    ZY_Fervent           = EffectMeta(\"ZY Fervent\", False, \"7325315777014272514\", \"40751208\", \"edb351323c1814bbb13fdc1149817b88\", [])\n    ZY_Heaven            = EffectMeta(\"ZY Heaven\", False, \"7256754129400238649\", \"18436001\", \"e90e022bd595d7e598b5fd59e5a12524\", [])\n    ZY_Hope              = EffectMeta(\"ZY Hope\", False, \"7276364919165948474\", \"22346588\", \"645c6d16ec0326ca588ed1b792d722b9\", [])\n    ZY_Innocent          = EffectMeta(\"ZY Innocent\", False, \"7256754220588601913\", \"18436002\", \"81733827a8cb7523177fe2ed96c16d51\", [])\n    ZY_Modest            = EffectMeta(\"ZY Modest\", False, \"7276365485812224571\", \"22346583\", \"9de2f616a80d03ee04c73b7a85023bf1\", [])\n    ZY_Oliver            = EffectMeta(\"ZY Oliver\", False, \"7230715372683399740\", \"13314772\", \"d90b1aaa54e0e1ad23afc2af06c04370\", [])\n    ZY_Panorama          = EffectMeta(\"ZY Panorama\", False, \"7262284073026982460\", \"19649101\", \"9f1b77d60340ae5fe1eb3701a843597e\", [])\n    ZY_Radiance          = EffectMeta(\"ZY Radiance\", False, \"7248820625366585915\", \"16174404\", \"e916bd1b63a326aa68a505e80e3f8a89\", [])\n    ZY_Rainbow           = EffectMeta(\"ZY Rainbow\", False, \"7276365019292373559\", \"22346586\", \"33b44a540525ed9a9662b8b3f7d8f362\", [])\n    ZY_Resolve           = EffectMeta(\"ZY Resolve\", False, \"7317175475195875841\", \"37544856\", \"c7607b2d122df39381457c4680b07498\", [])\n    ZY_Superb_Regular    = EffectMeta(\"ZY Superb-Regular\", False, \"7277866017231999525\", \"22618066\", \"c18fa905465af7ff5aff43bb7e48366c\", [])\n    ZY_Vibrant           = EffectMeta(\"ZY Vibrant\", False, \"7276365787147801145\", \"22346584\", \"9f5bc776b6a68c979628fa4249eda4fe\", [])\n    ZY_Wonder            = EffectMeta(\"ZY Wonder\", False, \"7270788266683535932\", \"21346084\", \"dbfdbb77a913235dac580fc6e9e4c19c\", [])\n    ZYCherish            = EffectMeta(\"ZYCherish\", False, \"7290485005162123813\", \"26013701\", \"0d6080a435603e6b1a392d9202d43dac\", [])\n    Zapfino              = EffectMeta(\"Zapfino\", False, \"7076271146110292494\", \"1632681\", \"efa8ec4bd296ade312a2a64fe6b2d206\", [])\n    いろは角クラシックE          = EffectMeta(\"いろは角クラシックE\", False, \"7236735800514187833\", \"20403373\", \"1afbea968b2e1af6cac0e96a44b0e1b0\", [])\n    いろは角クラシックM          = EffectMeta(\"いろは角クラシックM\", False, \"7236735800501604924\", \"20403369\", \"7b73272b2e422660f156f20d7157ffbb\", [])\n    きさ_はし金陵            = EffectMeta(\"きざはし金陵\", False, \"7246698168547545601\", \"20403943\", \"489be31b94a06eb438a50032df8d98ec\", [])\n    くり抜く                = EffectMeta(\"くり抜く\", False, \"6990291609376002562\", \"20403197\", \"76d286f7251430218bd24f555bacebbc\", [])\n    しっほ_りアンチック           = EffectMeta(\"しっぽりアンチック\", False, \"7236735800442884645\", \"20403443\", \"c60f6db5714f4db0ffe07794c290c274\", [])\n    すす_むし                = EffectMeta(\"すずむし\", False, \"7246698168543351297\", \"20404003\", \"5a563fdd1daef779b4d4cec65ae07f5e\", [])\n    た_るまと_ろっふ            = EffectMeta(\"だるまどろっぷ\", False, \"7236735800388358715\", \"20403579\", \"5a269c2c702bc230f613c748b94a78d3\", [])\n    つきみ丸コ_かな_B          = EffectMeta(\"つきみ丸ゴかな B\", False, \"7236735800371581501\", \"20403581\", \"826659485cc65dec7d8a16eba3788ad7\", [])\n    つきみ丸コ_かな_R          = EffectMeta(\"つきみ丸ゴかな R\", False, \"7236735800363192891\", \"20403643\", \"b8abadb9a0e3568108d211d1a63b5ae5\", [])\n    はちきるホ_ッフ             = EffectMeta(\"はちきるポップ\", False, \"7236735799817933368\", \"20403715\", \"4f6d841371f92e510afe383f83c73a42\", [])\n    ひな明朝               = EffectMeta(\"ひな明朝\", False, \"7236735799817933367\", \"20403717\", \"7fe60a5bb3eb2fefeb5080a16ba65df6\", [])\n    ほ_ってり                = EffectMeta(\"ぽってり\", False, \"7246698168551739906\", \"20403945\", \"f194725b8247c3cb01df730b786f1a0f\", [])\n    オとマのヘ                = EffectMeta(\"オとマのペ\", False, \"7236735800459661861\", \"20403367\", \"1502f1c27c0a043f8059eea0d956ad53\", [])\n    キ_カ_丸               = EffectMeta(\"ギガ丸\", False, \"7246698169348657665\", \"20403939\", \"a9076ef858ae90ccc4019622cc1e69e3\", [])\n    キャビン                 = EffectMeta(\"キャビン\", False, \"6841482472102826510\", \"20403069\", \"c76635455780f12a3f869416574d5bb0\", [])\n    クレー_One              = EffectMeta(\"クレー One\", False, \"7236735800442884667\", \"20403427\", \"88612653636506a25508dd36f0a12c1d\", [])\n    コ_シック                = EffectMeta(\"ゴシック\", False, \"7246698168543367682\", \"20404037\", \"18ee639c4dc2b3bf080a2e392d9445a0\", [])\n    コスギ                  = EffectMeta(\"コスギ\", False, \"6808051939150926344\", \"20402991\", \"bb28b047f12adc86d81a0ebee5df7b1f\", [])\n    ゴシック                 = EffectMeta(\"ゴシック\", False, \"6766522798685819399\", \"459278\", \"130d166479800cd97586de33b3a0b659\", [])\n    タイムマシンわ号            = EffectMeta(\"タイムマシンわ号\", False, \"7236735800430301753\", \"20404343\", \"d3a2a70a08086775f468ca6f9de97cae\", [])\n    チェリーホ_ム              = EffectMeta(\"チェリーボム\", False, \"7239261205582320129\", \"20403877\", \"b1c1463f54eb6cc0a4905d928e00a9a4\", [])\n    テ_ラコ_シック             = EffectMeta(\"デラゴシック\", False, \"7236735799822127674\", \"20403647\", \"4f71acd43e4a4257985d092c3ced1bea\", [])\n    ト_ットコ_シック_16         = EffectMeta(\"ドットゴシック 16\", False, \"7236735799813739069\", \"20403657\", \"314f2ce6b496daee67243b39ff58803c\", [])\n    ニューテコ_ミン             = EffectMeta(\"ニューテゴミン\", False, \"7236735799822127653\", \"20403683\", \"7fbbf397f7d96586920ed6f89f328df7\", [])\n    ビジネス                 = EffectMeta(\"ビジネス\", False, \"6808051344142766599\", \"20402993\", \"cdc69ab82c994c9a67275b74a413b750\", [])\n    ブロック                 = EffectMeta(\"ブロック\", False, \"6841483116922540558\", \"20403043\", \"43b7d680337fd69f13dc5319e2574a6a\", [])\n    ヘ_ンレタ                = EffectMeta(\"ペンレタ\", False, \"7246698168543384066\", \"20404089\", \"a2c0b4b7259aaecf6946a4e257dac5cc\", [])\n    ホ_ッタ                 = EffectMeta(\"ポッタ\", False, \"7236735799817933370\", \"20404337\", \"a2acad777dc0bd39f32c890ebb6684bb\", [])\n    ポジティブ                = EffectMeta(\"ポジティブ\", False, \"7013643531847733761\", \"20403295\", \"db889a3e5309902696fdea2b5d3de453\", [])\n    ミンサン書体B            = EffectMeta(\"ミンサン書体B\", False, \"7239261205586514433\", \"20403895\", \"18e32819f3310d8d46d805d31d068635\", [])\n    ミンサン書体R            = EffectMeta(\"ミンサン書体R\", False, \"7239261205594903041\", \"20403909\", \"67ca6787d094e5af727955824f354c39\", [])\n    メモ                   = EffectMeta(\"メモ\", False, \"6841483408602829326\", \"20403011\", \"52f2da3304584137f088b77f51acad88\", [])\n    メモ帳                 = EffectMeta(\"メモ帳\", False, \"6990291446100136449\", \"20403233\", \"260fd1ddf7ce925d8f190749f0296049\", [])\n    モッチーホ_ッフ             = EffectMeta(\"モッチーポップ\", False, \"7236735799813739045\", \"20403817\", \"eebab96f0d7f12a6f239d297a395a465\", [])\n    ランハ_ート               = EffectMeta(\"ランパート\", False, \"7236735799817933373\", \"20403869\", \"8f5133ad1859de8ffab89113b4358a50\", [])\n    レケ_エ_One             = EffectMeta(\"レゲエ One\", False, \"7236735799813739068\", \"20403871\", \"b7b2846f2bb8d5910e93a16de58fd6cf\", [])\n    ロックンロール              = EffectMeta(\"ロックンロール\", False, \"7236735799809544763\", \"20403875\", \"da1dc1ac57175d1f5158b469f79897a2\", [])\n    ローマ                  = EffectMeta(\"ローマ\", False, \"6841482587446186509\", \"20403063\", \"3ef3c328cef61895e0d17b7265d0a830\", [])\n    中秀体               = EffectMeta(\"中秀体\", False, \"6917512631515353607\", \"1014410\", \"9561161c74ae03658e101577ec5cfae6\", [])\n    书南体               = EffectMeta(\"书南体\", False, \"7290445475461730875\", \"25998982\", \"d2602638de94c9006851f0858d567459\", [])\n    云魅手书             = EffectMeta(\"云魅手书\", False, \"7174434449080193550\", \"7048145\", \"bd4bdc8403280395a79565573a6a3cbb\", [])\n    今宋体               = EffectMeta(\"今宋体\", False, \"7216598549809599032\", \"11443544\", \"4bd7448e9ba53dd7fe3bd8b73a07e6f4\", [])\n    仓耳与墨W05          = EffectMeta(\"仓耳与墨W05\", False, \"7265576717970838076\", \"20373115\", \"c0ab4e3f1a478b5867cbd46e00b0f99d\", [])\n    仓耳周珂正大榜书     = EffectMeta(\"仓耳周珂正大榜书\", False, \"7265577040110162492\", \"20373112\", \"5c78e7cf1982aa68487d1675159b73f6\", [])\n    仓耳小丸子           = EffectMeta(\"仓耳小丸子\", False, \"7265576611347436093\", \"20373117\", \"3452ca2452f781808f832d67063a659c\", [])\n    仓耳舒圆体W02        = EffectMeta(\"仓耳舒圆体W02\", False, \"7265576364948853303\", \"20373116\", \"19fd2acae413b58901b2b466dd813785\", [])\n    仓耳非白W02          = EffectMeta(\"仓耳非白W02\", False, \"7265576127073096250\", \"20373124\", \"ef1fe50ee91c6e00bd928500920a2555\", [])\n    仓耳非白W04          = EffectMeta(\"仓耳非白W04\", False, \"7265576259957035579\", \"20373114\", \"120bbe030eae22f65fdcf76f587e337d\", [])\n    以梦为马             = EffectMeta(\"以梦为马\", False, \"7197366059056239141\", \"9182767\", \"56dfcfca94158a7a92263aa5b41f8a84\", [])\n    优设好身体           = EffectMeta(\"优设好身体\", False, \"7265610359807939132\", \"20379296\", \"254c324257a74cfdcf35d4e9eb5da964\", [])\n    优设标题圆           = EffectMeta(\"优设标题圆\", False, \"7260808713844298295\", \"19366221\", \"dd565912c20ce61f6f71a33bcb30faf8\", [])\n    优设标题黑           = EffectMeta(\"优设标题黑\", False, \"7068207165277737502\", \"1588336\", \"d9f1238f50005595eff5f545aa54776c\", [])\n    伯兮体               = EffectMeta(\"伯兮体\", False, \"7290440685616894522\", \"25999024\", \"521d0621c5cd8e26944ba063ca5dec02\", [])\n    佑字_朴              = EffectMeta(\"佑字 朴\", False, \"7236735801042670136\", \"20403343\", \"fc90908f8e84e220b04858badd7ef84d\", [])\n    佑字_舞              = EffectMeta(\"佑字 舞\", False, \"7236735801021698619\", \"20403425\", \"9ebb6e14126e9fc9940f021014ec13b3\", [])\n    佳妙体               = EffectMeta(\"佳妙体\", False, \"7290443628554490423\", \"25998997\", \"f67bcc4b0cf6483e78bffa6cfd972bf1\", [])\n    俊雅体               = EffectMeta(\"俊雅体\", False, \"7078971008769593887\", \"1648731\", \"4f96b92a0023d2da2a4c9cb4e09e9565\", [])\n    俪金黑               = EffectMeta(\"俪金黑\", False, \"6740499317733200388\", \"349465\", \"4ef7d2eb7cdfcff226f086008045131a\", [])\n    像素体               = EffectMeta(\"像素体\", False, \"6770944991167517192\", \"466469\", \"909e7b4c50b29620fcc42a5f7b27914e\", [])\n    元也                 = EffectMeta(\"元也\", False, \"6990291473216311809\", \"20403229\", \"49f510d2627a0916367c79c11f40a1b1\", [])\n    元气泡泡体           = EffectMeta(\"元气泡泡体\", False, \"7203664981080937021\", \"9898775\", \"3af8af39c55aa4109263fd49a00f3885\", [])\n    元瑶体               = EffectMeta(\"元瑶体\", False, \"7290447082886795832\", \"25999023\", \"b981cfd05bb12209521b5aeac9d3740f\", [])\n    先锋体               = EffectMeta(\"先锋体\", False, \"7043775345333375519\", \"1488720\", \"85da61942dcc96f5eddad1c3826b5f0c\", [])\n    光远体               = EffectMeta(\"光远体\", False, \"7290442818584056357\", \"25999003\", \"9e1697182672f31f0280e673856738ea\", [])\n    兰亭圆               = EffectMeta(\"兰亭圆\", False, \"7173608955527041567\", \"6949825\", \"211a5b4aed3f2ac8412d6f9f7e9d8244\", [])\n    凌东齐伋体_combo     = EffectMeta(\"凌东齐伋体-combo\", False, \"7265611544820453948\", \"20379306\", \"6ca3f118d0415aa1f0be2e9ee2800890\", [])\n    凌东齐伋体_fallback  = EffectMeta(\"凌东齐伋体-fallback\", False, \"7265611310132367931\", \"20379309\", \"5717be837d5f541193816ad6b421f7fc\", [])\n    凝琴体               = EffectMeta(\"凝琴体\", False, \"7290444849298281021\", \"25999011\", \"efa89382ae256d5ce6092a312dddd3fc\", [])\n    刘炳森               = EffectMeta(\"刘炳森\", False, \"6852190696930021902\", \"814922\", \"1507ce2872918e76320be3647e986dcf\", [])\n    初尘体               = EffectMeta(\"初尘体\", False, \"7290441058238861879\", \"25998986\", \"ae887a93827cf1730d7b08db606b5b68\", [])\n    匹喏曹               = EffectMeta(\"匹喏曹\", False, \"7043773350555947551\", \"1488716\", \"4f6d74dc7cb2208981569c0842124038\", [])\n    半梦体               = EffectMeta(\"半梦体\", False, \"7290439421625635385\", \"25999018\", \"ed70a8440c036e4f95d41ac34846f229\", [])\n    南廱明體             = EffectMeta(\"南廱明體\", False, \"7265535751624856101\", \"20356611\", \"49934f9817b10611a6824fd80cabf086\", [])\n    卡酷体               = EffectMeta(\"卡酷体\", False, \"7045187669847970341\", \"1494864\", \"514acd68e036f48781d209d84cc7728e\", [])\n    古典体               = EffectMeta(\"古典体\", False, \"7035911487646339598\", \"1459456\", \"37cd7f9d7364c200a37c7f9ee2192ae9\", [])\n    古印宋简             = EffectMeta(\"古印宋简\", False, \"7216598368791827002\", \"11443545\", \"aafc0b7c13e1c5b790d090e57afcff76\", [])\n    古雅体               = EffectMeta(\"古雅体\", False, \"7025895760583463438\", \"1425152\", \"dc99fbcf0d0a7c179313e6289d95ebaf\", [])\n    古风小楷             = EffectMeta(\"古风小楷\", False, \"7216598671016596029\", \"11443543\", \"97e1ab8a11b337dc9e8369a40c936e19\", [])\n    台北黑体_Bold        = EffectMeta(\"台北黑体-Bold\", False, \"7265536086472921658\", \"20356617\", \"b4598638d6eba21257d0456ebe2dd161\", [])\n    台北黑体_Light       = EffectMeta(\"台北黑体-Light\", False, \"7265536169083933242\", \"20356619\", \"3367383fa78c478b88ab81a18746ee85\", [])\n    台北黑体_Regular     = EffectMeta(\"台北黑体-Regular\", False, \"7265536307932172861\", \"20356621\", \"640ca1b520ae3f08b77de45dab99ba33\", [])\n    后现代体             = EffectMeta(\"后现代体\", False, \"6740435494053614093\", \"349307\", \"35b4b7201d26c9a26a038be8813efdd2\", [])\n    启功行楷             = EffectMeta(\"启功行楷\", False, \"6852190785740214791\", \"814921\", \"6fc51e60d628ca3afb0d3fbdc00f3000\", [])\n    吹き出し               = EffectMeta(\"吹き出し\", False, \"6841482925955879431\", \"20403057\", \"79ef9ad4b06c3f44640e943834cc676f\", [])\n    唐瑜体               = EffectMeta(\"唐瑜体\", False, \"7290445542331519525\", \"25998993\", \"3158dfc09010810f5c1ab5fbf6d835d0\", [])\n    喜悦体               = EffectMeta(\"喜悦体\", False, \"7045187886924173861\", \"1494856\", \"71a8ba6a406a0c02fc2a31dceb4921d0\", [])\n    喜鹊万人造字         = EffectMeta(\"喜鹊万人造字\", False, \"7208056956471218748\", \"10379503\", \"b0781d9e494afdae886bd846fecab2e0\", [])\n    喜鹊梅花楷           = EffectMeta(\"喜鹊梅花楷\", False, \"7208056839089427002\", \"10379504\", \"80b578cbb1ed9f7f7403150d3910a0bc\", [])\n    喵魂体               = EffectMeta(\"喵魂体\", False, \"6740436949040894475\", \"349315\", \"f89f9c707b0ed386568e78c9ab3bb176\", [])\n    嘉木体               = EffectMeta(\"嘉木体\", False, \"7290443820041245241\", \"25999016\", \"a5ac5235fec9d01bbb280ab9b37b7b93\", [])\n    圆体                 = EffectMeta(\"圆体\", False, \"6740436583247254029\", \"349313\", \"6622f87ce830dd89234522a0d9db5104\", [])\n    基础像素             = EffectMeta(\"基础像素\", False, \"7203638484752405049\", \"9893377\", \"f76ecb363595e5321389d3ed29df1c9f\", [])\n    墩墩体               = EffectMeta(\"墩墩体\", False, \"7043772438898807304\", \"1488712\", \"377365df3340b4b642a0c199fcbb3882\", [])\n    大字报               = EffectMeta(\"大字报\", False, \"7054126026267300382\", \"1530068\", \"bb2f51e267dce8ffd369e1721f2a6371\", [])\n    天云体               = EffectMeta(\"天云体\", False, \"7290445618533634617\", \"25998981\", \"6ae7aeddb05e6b7ea980b99708204100\", [])\n    妙松体               = EffectMeta(\"妙松体\", False, \"7290444755811439141\", \"25998991\", \"1178bbca3857f8448c766c6f9c6d3bec\", [])\n    妙黑体               = EffectMeta(\"妙黑体\", False, \"7203638484756599333\", \"9893375\", \"ff39549fdcdf9528ce1d0137384eb906\", [])\n    子どもたち               = EffectMeta(\"子どもたち\", False, \"6766524209620324877\", \"20402995\", \"99ac707c2ba4d141161fcec8a9ea91b7\", [])\n    字制区喜脉体         = EffectMeta(\"字制区喜脉体\", False, \"7391765808835203647\", \"75248650\", \"9e6dcd6301144426671b86797a1cfd7a\", [])\n    字制区喜脉喜欢体     = EffectMeta(\"字制区喜脉喜欢体\", False, \"7391765873716892199\", \"75248705\", \"c8402181a043ef9b8c105f8e7bbc03cf\", [])\n    孤月体               = EffectMeta(\"孤月体\", False, \"7290441418395357754\", \"25999015\", \"e48e0b0bf5ff728a46405176e1d5030f\", [])\n    宋体                 = EffectMeta(\"宋体\", False, \"6740513279296147982\", \"349517\", \"02a4eb96fa9d82bbba5906c35521f6f4\", [])\n    小杉ｺﾞｼｯｸ       = EffectMeta(\"小杉ｺﾞｼｯｸ\", False, \"6841482326321402375\", \"20403079\", \"fca4e0440151814d39b1a0a23872224e\", [])\n    小薇体               = EffectMeta(\"小薇体\", False, \"7265594602311127607\", \"20373097\", \"db03f70f2fc5177f552d46ab3648af3f\", [])\n    尔雅新大黑           = EffectMeta(\"尔雅新大黑\", False, \"7217732136894206501\", \"11593555\", \"c3dc73e45b7b16cae8e867a0a73f35dd\", [])\n    居酒屋               = EffectMeta(\"居酒屋\", False, \"7013643566341689858\", \"20403285\", \"ca3edcfff9defcc59e9090cb11ed96d4\", [])\n    山林体               = EffectMeta(\"山林体\", False, \"7035912592925135396\", \"1459484\", \"2b4b013ad868f43d20de26cc7720083a\", [])\n    岩柚体               = EffectMeta(\"岩柚体\", False, \"7290445914571805245\", \"25999002\", \"a2300687db587e3801b32c4a7b77dd32\", [])\n    峰骨体               = EffectMeta(\"峰骨体\", False, \"7054126189211816462\", \"1530066\", \"b5a3bb8585981e629732ca53d6d3be36\", [])\n    幸せ                  = EffectMeta(\"幸せ\", False, \"6990291634747347458\", \"20403193\", \"b18c4a35769d204d8ee88db8a06ac471\", [])\n    幼萱体               = EffectMeta(\"幼萱体\", False, \"7290446812442268217\", \"25998999\", \"ab1b9e358069f4187427aaecbcca1467\", [])\n    庞门正道标题体       = EffectMeta(\"庞门正道标题体\", False, \"7265611148060267045\", \"20379302\", \"92b17506e2b26dac8716ef305c8bcf06\", [])\n    庞门正道粗书体       = EffectMeta(\"庞门正道粗书体\", False, \"7265611032465248805\", \"20379291\", \"06caadf2c04504ea78873cfad51447a3\", [])\n    庞门正道轻松体       = EffectMeta(\"庞门正道轻松体\", False, \"7265610901795902013\", \"20379295\", \"4fe6b6e59c94796b520f5bd5fe83e2ce\", [])\n    张子山体             = EffectMeta(\"张子山体\", False, \"6894206029785993736\", \"961476\", \"4e3af7fa95351181ba26f1be246c4d43\", [])\n    彼岸体               = EffectMeta(\"彼岸体\", False, \"7290440016646378042\", \"25999019\", \"9d97a2a66420faa6dc320cd3035b4fe6\", [])\n    得意黑               = EffectMeta(\"得意黑\", False, \"7399865900821647935\", \"77844112\", \"5219d1f012f4944aaaa2ec19556fdea6\", [])\n    德古拉               = EffectMeta(\"德古拉\", False, \"7021353291850191368\", \"1404774\", \"0573d513ed964b0a24a02943e469c9e7\", [])\n    快乐体               = EffectMeta(\"快乐体\", False, \"7265594331262620217\", \"20373113\", \"d3c284bf1c58e72c2ccd5c0c22bfa5e5\", [])\n    快速体               = EffectMeta(\"快速体\", False, \"7197366121069023804\", \"9182766\", \"462692b2efb28f3cf411edbef8f7f6ff\", [])\n    思源中宋             = EffectMeta(\"思源中宋\", False, \"6807743192671195655\", \"643579\", \"e8b002bff0884028c9f13a9d6eeb03bc\", [])\n    思源粗宋             = EffectMeta(\"思源粗宋\", False, \"6807742980271641102\", \"643575\", \"e4387517f584be39bb2e1ca4ede6cbe3\", [])\n    悠悠然               = EffectMeta(\"悠悠然\", False, \"7081924596999393805\", \"1665070\", \"f38c316a2e5f0e059094bbe18a252ce1\", [])\n    悠然体               = EffectMeta(\"悠然体\", False, \"6740436145831678467\", \"349311\", \"7f7454ea269cfebfef1b104673f05894\", [])\n    悦妍体               = EffectMeta(\"悦妍体\", False, \"7290447167821451813\", \"25998984\", \"3c6344b0d77c47511e5b177675761c7b\", [])\n    惊鸿体               = EffectMeta(\"惊鸿体\", False, \"7203638484756599356\", \"9893376\", \"d06a0ac2a94160c8e6d88bf6d1c436e6\", [])\n    手書                 = EffectMeta(\"手書\", False, \"7013643615326966273\", \"20403235\", \"1d266a4a87b97a7602a4b612465d88e3\", [])\n    抖音美好体           = EffectMeta(\"抖音美好体\", False, \"7244518590332801592\", \"15332487\", \"1a9c90e65d4ac34436d90a1b19d94d5a\", [])\n    招牌体               = EffectMeta(\"招牌体\", False, \"7035914068053463565\", \"1459526\", \"d591f14dd0bf7486dc318195299706a4\", [])\n    拼音体               = EffectMeta(\"拼音体\", False, \"6740437635287749133\", \"349319\", \"1735cfc4e88e38efc9f7b1e3cfd6d035\", [])\n    挥墨体               = EffectMeta(\"挥墨体\", False, \"7037018943218782757\", \"1464398\", \"162b2fc5a67b2f7b664001030b16828a\", [])\n    教科書               = EffectMeta(\"教科書\", False, \"6990291514886722050\", \"20403203\", \"b21936cc7b4fbb0191cc0b356d2d4d98\", [])\n    文研体               = EffectMeta(\"文研体\", False, \"6990293257540342302\", \"1203468\", \"bcadf482b4045f8d47bf373fc01479a0\", [])\n    文艺繁体             = EffectMeta(\"文艺繁体\", False, \"6740437797456318983\", \"349321\", \"b15dc9e0411a83b2c63f983a2fb3b7a6\", [])\n    文轩体               = EffectMeta(\"文轩体\", False, \"7290445778273702455\", \"25998976\", \"d5ea95d6a862335c917a93b4fc741c89\", [])\n    文雅体               = EffectMeta(\"文雅体\", False, \"7068208151488631309\", \"1588334\", \"6f0ccd9662b4b0eb41318fd8547699de\", [])\n    新青年体             = EffectMeta(\"新青年体\", False, \"6740435892441190919\", \"349309\", \"71a73f7e297831936018c928d61ce2b8\", [])\n    方正王铎行草         = EffectMeta(\"方正王铎行草\", False, \"6852191050547597832\", \"814918\", \"94c2759eda2591a0e88b5995c13d0d1b\", [])\n    方糖体               = EffectMeta(\"方糖体\", False, \"7037017159280628231\", \"1464396\", \"49573e8f5bb7ae96ce913040780803e3\", [])\n    无界黑               = EffectMeta(\"无界黑\", False, \"7203638485670957629\", \"9893370\", \"1e04097242afd9dea436e390c2b8d89d\", [])\n    日式标题             = EffectMeta(\"日式标题\", False, \"7081925137355772453\", \"1665068\", \"b21c3e5dcee4cbd5aa5606f1e04fe382\", [])\n    星光体               = EffectMeta(\"星光体\", False, \"7216598789103030821\", \"11443542\", \"cc578f4ebfa6ec1d814f50b8ab99ce5e\", [])\n    晨风体               = EffectMeta(\"晨风体\", False, \"7290440791967666725\", \"25999012\", \"04a6a353ece14e49884af2b765c4f3d1\", [])\n    景天体               = EffectMeta(\"景天体\", False, \"7290444063004693029\", \"25999010\", \"071aa83859c9780691a4c2a872d53456\", [])\n    晴雪体               = EffectMeta(\"晴雪体\", False, \"7290445254241555005\", \"25999004\", \"fb5c70eeca2cbdbd2dcedae3315d9701\", [])\n    書道                 = EffectMeta(\"書道\", False, \"6990291666124935681\", \"20403191\", \"67115dcac0ac0d2311d6a67e1ad1b6a5\", [])\n    有猫在               = EffectMeta(\"有猫在\", False, \"6766524065151717901\", \"459290\", \"0880173b6edb03abadc473b64ec80316\", [])\n    未来黑               = EffectMeta(\"未来黑\", False, \"7081925520866152997\", \"1665065\", \"8fbf8914d93137fc79062de3aa99de65\", [])\n    本黑体               = EffectMeta(\"本黑体\", False, \"7200743888816968247\", \"9554613\", \"fca68b5b94fa66afe5ca424cb5868011\", [])\n    李李体               = EffectMeta(\"李李体\", False, \"7203638484752405053\", \"9893380\", \"87985cec317b243b34472455eb35e061\", [])\n    极简拼音             = EffectMeta(\"极简拼音\", False, \"7070430470667768333\", \"1600484\", \"d9bd33e2a246c62cfae5b75504c5d7c0\", [])\n    柏青体               = EffectMeta(\"柏青体\", False, \"7187746468785033787\", \"8393133\", \"d6d5b5884e999ab9841c65b9af9ad68a\", [])\n    柳公权               = EffectMeta(\"柳公权\", False, \"6852190880837669390\", \"814920\", \"433c8deaa6b69a9b314b01c44020f95d\", [])\n    梅雨煎茶             = EffectMeta(\"梅雨煎茶\", False, \"7081925245099053604\", \"1665067\", \"7adeea403a9002c92bdb071f07506f5d\", [])\n    梦寒体               = EffectMeta(\"梦寒体\", False, \"7290444357499359781\", \"25999021\", \"9e44efeeecc891448419108472e8f719\", [])\n    梦想家               = EffectMeta(\"梦想家\", False, \"6914965725543141896\", \"1005688\", \"01507865e864281742d0126385a84030\", [])\n    梦桃体               = EffectMeta(\"梦桃体\", False, \"7290444545689391653\", \"25998998\", \"58f48899950d28f609bef42bcab15575\", [])\n    梦槐体               = EffectMeta(\"梦槐体\", False, \"7290444451179139641\", \"25998996\", \"4211fd251648fe7089552ac58926b10d\", [])\n    棘薔薇ホ_ールト          = EffectMeta(\"棘薔薇ボールド\", False, \"7236735801134944823\", \"20403299\", \"caa76c8a42b129086bacfbec06a3416e\", [])\n    棘薔薇ライト            = EffectMeta(\"棘薔薇ライト\", False, \"7236735801105584701\", \"20403311\", \"d26d591f8ee3732e6cad13f8eabfb74f\", [])\n    楚辰体               = EffectMeta(\"楚辰体\", False, \"7070430593925779981\", \"1600482\", \"ced7a98a9bcc8984318a2c215192b0c5\", [])\n    楷書MCBK1            = EffectMeta(\"楷書MCBK1\", False, \"7246698168547578369\", \"20404083\", \"fb1f997aac1f765ffd9a0567e39ec75b\", [])\n    欣然体               = EffectMeta(\"欣然体\", False, \"7068531082265629197\", \"1589146\", \"f1d3dde1819db78d7f4bde16daf52fe3\", [])\n    正奇体               = EffectMeta(\"正奇体\", False, \"7290447230488547901\", \"25999005\", \"0be6ac1d15866b82ab08f2219b772ab5\", [])\n    毛笔行楷             = EffectMeta(\"毛笔行楷\", False, \"6912033793700270606\", \"999616\", \"112cdf4c20ddf9336f4757e8c42bcc57\", [])\n    毡笔体               = EffectMeta(\"毡笔体\", False, \"7035924520854622757\", \"1459716\", \"171016edaee58043c22552d32579f154\", [])\n    汇文明朝体           = EffectMeta(\"汇文明朝体\", False, \"7444913491762221577\", \"95241741\", \"dff19164a0e4822b2320a900db9c1c2e\", [])\n    汉仪英雄体           = EffectMeta(\"汉仪英雄体\", False, \"6740499052644798984\", \"349471\", \"3f63a7b1ab4699bf11c88b284939e661\", [])\n    汉仪贤二体           = EffectMeta(\"汉仪贤二体\", False, \"7265612201199669816\", \"20379294\", \"e2016262592025a41b52412055efcae6\", [])\n    江户招牌             = EffectMeta(\"江户招牌\", False, \"7080096840875512334\", \"1654205\", \"a98a329c2a52154b6c50b06e66d60b12\", [])\n    江湖体               = EffectMeta(\"江湖体\", False, \"7080097079397192228\", \"1654203\", \"50957d5102cb4f2ea1459e140826eb0c\", [])\n    沈尹默               = EffectMeta(\"沈尹默\", False, \"6852190963947803143\", \"814919\", \"9af4745e3a8f8b3a8f72f65b43302a98\", [])\n    油性マシ_ック            = EffectMeta(\"油性マジック\", False, \"7236735801076224568\", \"20403341\", \"0c3de71c508fe9eb7027ec49ff2878f0\", [])\n    油漆体               = EffectMeta(\"油漆体\", False, \"7035906361040835079\", \"1459392\", \"f3f06c4b538c534a498c5e3712a949fa\", [])\n    海岛森林_全字符      = EffectMeta(\"海岛森林-全字符\", False, \"7445240658693984805\", \"95365506\", \"91a93794d0970a1acdb8822729ae5965\", [])\n    清刻本悦             = EffectMeta(\"清刻本悦\", False, \"7086429206543864350\", \"1698068\", \"2e70579a0538bde91edc1eaedc68c02f\", [])\n    清酒体               = EffectMeta(\"清酒体\", False, \"7290445172834308664\", \"25999017\", \"7692c22a862d23bcd09f84c0aa2f7502\", [])\n    渊亭体               = EffectMeta(\"渊亭体\", False, \"7290447006659514941\", \"25999013\", \"026681bd4e89ed40420e184fd6bfb1fc\", [])\n    温宁体               = EffectMeta(\"温宁体\", False, \"7290445705578025529\", \"25998977\", \"fdc9d5eb51a0e4f9e1dedc0091402ff5\", [])\n    温柔体               = EffectMeta(\"温柔体\", False, \"7050009415155454500\", \"1511616\", \"eb4b8ebef19e89895193d930e7c607c1\", [])\n    港风繁体             = EffectMeta(\"港风繁体\", False, \"6740438140432945675\", \"349323\", \"9bfde9a789862114b6055ed475688908\", [])\n    游园体               = EffectMeta(\"游园体\", False, \"7290446760739082789\", \"25998988\", \"b9e3537ea657978bc1963e76b66312a9\", [])\n    游思体               = EffectMeta(\"游思体\", False, \"7290446655604658748\", \"25998994\", \"3fd19c651575d8cfda6ca059f725a6f8\", [])\n    源ノ角コ_シック           = EffectMeta(\"源ノ角ゴシック\", False, \"7236735800992338487\", \"20403397\", \"14e8f41b916c9a3b1d38a334301134e5\", [])\n    漫语体               = EffectMeta(\"漫语体\", False, \"7081925440264213000\", \"1665066\", \"e91bd31939be0dbbcae085a64d151ad6\", [])\n    澄月                 = EffectMeta(\"澄月\", False, \"7246698168547561986\", \"20404007\", \"5ff03a1ddae1b9a9909926629d4aa63e\", [])\n    瀞ノクーケ_ル明朝         = EffectMeta(\"瀞ノクーゲル明朝\", False, \"7236735801088807482\", \"20403339\", \"b20759e5aec663c007cc19c16460f819\", [])\n    点宋体               = EffectMeta(\"点宋体\", False, \"7080096967543493150\", \"1654204\", \"e5338c6ec760fc059b257d8dc31e7279\", [])\n    烈金体               = EffectMeta(\"烈金体\", False, \"7043773114546655781\", \"1488714\", \"dd0bc895570589984077890ab098ef15\", [])\n    烟波宋               = EffectMeta(\"烟波宋\", False, \"7068531367386026526\", \"1589144\", \"4ee19f0d46c10ccc70bac084226e6f82\", [])\n    爨宝子碑             = EffectMeta(\"爨宝子碑\", False, \"6852191233356337671\", \"814916\", \"f2686de98659e4812016cfc41192f726\", [])\n    特黑体               = EffectMeta(\"特黑体\", False, \"6740439840254333443\", \"349329\", \"92988aefce8a45c8fd7fe58a60fc72cc\", [])\n    玉轩体               = EffectMeta(\"玉轩体\", False, \"7290446916402287163\", \"25999001\", \"ab11f1f4e5eeb5d783a8ddae06c34225\", [])\n    玩童体               = EffectMeta(\"玩童体\", False, \"6766524209620324877\", \"459292\", \"99ac707c2ba4d141161fcec8a9ea91b7\", [])\n    琉璃宋               = EffectMeta(\"琉璃宋\", False, \"7020719089999942157\", \"1402720\", \"a3bd369495563713486e56b7f550af87\", [])\n    瑞意宋               = EffectMeta(\"瑞意宋\", False, \"7130447431891685895\", \"3997461\", \"a73364889c89bd6be1d08a92cb49245a\", [])\n    瑶蝶体               = EffectMeta(\"瑶蝶体\", False, \"7290446536050217532\", \"25998987\", \"04e3d3e0eae3de5c859e8c00d2b48759\", [])\n    甜甜圈               = EffectMeta(\"甜甜圈\", False, \"7130634783163421215\", \"4009729\", \"bbe904649c122449f4ea360030b603a6\", [])\n    白舟武骨             = EffectMeta(\"白舟武骨\", False, \"7212913285383852600\", \"10971151\", \"2049cc4511ce3d74dbcc2b6678615922\", [])\n    目光体               = EffectMeta(\"目光体\", False, \"7035921361348334117\", \"1459640\", \"39e69d115d15e598c11d2686067dc70d\", [])\n    真言体               = EffectMeta(\"真言体\", False, \"7003588300720050696\", \"1349505\", \"9ae1a1787978c3b8e2a06a9d0c55906a\", [])\n    知夏森林             = EffectMeta(\"知夏森林\", False, \"7224042336223760954\", \"12441415\", \"9d8f09292c3d223bc5a0ac05e373902a\", [])\n    研宋体               = EffectMeta(\"研宋体\", False, \"7130644288047682085\", \"4010355\", \"06458c13377d445fe3368cd2c786c7a5\", [])\n    研月体               = EffectMeta(\"研月体\", False, \"7290446001947546149\", \"25998978\", \"7357fd4adcd7d003cc8ce73876e5b660\", [])\n    禅影体               = EffectMeta(\"禅影体\", False, \"7278963576167993916\", \"22902355\", \"438c78fb511d6993217961e53a281c0a\", [])\n    秀英四号太かな         = EffectMeta(\"秀英四号太かな\", False, \"7246698168543351298\", \"20404005\", \"9ab728019cac814d6634b4f9df2ea909\", [])\n    站酷仓耳渔阳体_W02   = EffectMeta(\"站酷仓耳渔阳体-W02\", False, \"7265609366311539237\", \"20379308\", \"9a845e092fe17de221ac868374d9744b\", [])\n    站酷仓耳渔阳体_W03   = EffectMeta(\"站酷仓耳渔阳体-W03\", False, \"7265610166744125989\", \"20379299\", \"4ae46d2552d181b6ad61de16f81a01e6\", [])\n    站酷仓耳渔阳体_W04   = EffectMeta(\"站酷仓耳渔阳体-W04\", False, \"7265609848438395449\", \"20379307\", \"709d54b0e2a042680ea24ee4705e299e\", [])\n    站酷文艺体           = EffectMeta(\"站酷文艺体\", False, \"7265593885475213880\", \"20373100\", \"16a1388d7e0219385f7db1afd56d5255\", [])\n    站酷酷黑体           = EffectMeta(\"站酷酷黑体\", False, \"7265609486646121018\", \"20379297\", \"bf9cb4e27fff8ea1dacdd07ed038f92f\", [])\n    童趣体               = EffectMeta(\"童趣体\", False, \"7035888265290846756\", \"1459176\", \"07911c7bc89d724503b88c6fbafaccc5\", [])\n    竹柏体               = EffectMeta(\"竹柏体\", False, \"7290447547208831544\", \"25998983\", \"f1e9985534986c52aebe7cec8116383a\", [])\n    竹风体               = EffectMeta(\"竹风体\", False, \"7290447605065060901\", \"25998973\", \"b27dc01a8f98a87292b7f6f589dcbe33\", [])\n    简中圆               = EffectMeta(\"简中圆\", False, \"7050009066717844005\", \"1511618\", \"f26eb8bd135d147bb7700a560f1a5470\", [])\n    糯米团               = EffectMeta(\"糯米团\", False, \"6934225430266253837\", \"1053146\", \"aee9551fab5ef01c45dbe3335869db1d\", [])\n    結月                 = EffectMeta(\"結月\", False, \"7013643491003601410\", \"20403297\", \"8eb2aac0456da1b04e206fc3fe1d75d8\", [])\n    纯真体               = EffectMeta(\"纯真体\", False, \"7045185581772444174\", \"1494870\", \"b33e32b8733e27775849ee5d7f92d7e7\", [])\n    细体                 = EffectMeta(\"细体\", False, \"6740511815358222859\", \"349521\", \"3d80be25a18fb67455744136c1262c91\", [])\n    经典雅黑             = EffectMeta(\"经典雅黑\", False, \"7043775037559542279\", \"1488718\", \"ba7bbfabf030860ee4a23d6596a6c6e3\", [])\n    综艺体               = EffectMeta(\"综艺体\", False, \"6740499188347310605\", \"349467\", \"8d34d3abe70f2c3c61f9a93b1f85c76b\", [])\n    综艺字               = EffectMeta(\"综艺字\", False, \"7130642664080282149\", \"4010283\", \"74671c7987f56ba9a6ab93f95856973a\", [])\n    美佳体               = EffectMeta(\"美佳体\", False, \"7203665054338650685\", \"9898774\", \"69a5666d4ab91113ea146e71bc3e42c9\", [])\n    聚珍体               = EffectMeta(\"聚珍体\", False, \"7203638484752405051\", \"9893381\", \"7e024261e2d38e87bc78e6843ad2e6b3\", [])\n    胡晓波男神体         = EffectMeta(\"胡晓波男神体\", False, \"7265612031825285689\", \"20379293\", \"b383909e5988beae9c65d91a451d4db9\", [])\n    胡晓波真帅体         = EffectMeta(\"胡晓波真帅体\", False, \"7265611790313067069\", \"20379292\", \"4392c7918eaffa6dd9af883ef4b628e2\", [])\n    胡晓波骚包体         = EffectMeta(\"胡晓波骚包体\", False, \"7265611912849658429\", \"20379298\", \"6fd07e4a429f7ebe39c205aea5962ab6\", [])\n    芋圆体               = EffectMeta(\"芋圆体\", False, \"7039989971796628005\", \"1478272\", \"c47882a0a6781f00b6b152c456844413\", [])\n    花语手书             = EffectMeta(\"花语手书\", False, \"7081925028773630471\", \"1665069\", \"d79245bb807ef0f74165afdb07b5f952\", [])\n    芷云体               = EffectMeta(\"芷云体\", False, \"7290447317247726139\", \"25998979\", \"740074083cab996fa9115efb9ca63eaf\", [])\n    若烟体               = EffectMeta(\"若烟体\", False, \"7290445344557503033\", \"25999000\", \"001f25aa8dc71e9221433f2ff6c8e540\", [])\n    荔枝体               = EffectMeta(\"荔枝体\", False, \"6740498118342611464\", \"349483\", \"9beb006988541f18a560f8029d47defa\", [])\n    萌趣体               = EffectMeta(\"萌趣体\", False, \"7045186231122006535\", \"1494868\", \"005466971691f729c2a0927ffe6f81b7\", [])\n    萧疏体               = EffectMeta(\"萧疏体\", False, \"7290445832845791801\", \"25998989\", \"70729e571b7729a7be14828f525ce9ef\", [])\n    蒹葭体               = EffectMeta(\"蒹葭体\", False, \"7290443923556667959\", \"25999014\", \"04660ff6d07b1fd3437128caf3adfbb8\", [])\n    薯条少年             = EffectMeta(\"薯条少年\", False, \"7068530728467698213\", \"1589148\", \"8842c4ca3fde9cefeaa17fa5bb99a77b\", [])\n    蜡笔体               = EffectMeta(\"蜡笔体\", False, \"6932407677234450952\", \"1049208\", \"05791deed6ab491bbc32edba7af8fa2e\", [])\n    蝉影隶书             = EffectMeta(\"蝉影隶书\", False, \"7045186520738697742\", \"1494867\", \"afcec5248968e5b3fd7d7eb3a670eadc\", [])\n    蝶汐体               = EffectMeta(\"蝶汐体\", False, \"7290441304029270587\", \"25999007\", \"c45854a55e2d3320e47c299633df8c7f\", [])\n    装甲明朝             = EffectMeta(\"装甲明朝\", False, \"7265536455655559739\", \"20356625\", \"3f334186c4522694108e7ab9534201fd\", [])\n    解星テ_コール            = EffectMeta(\"解星デコール\", False, \"7236735801088807461\", \"20403335\", \"e87c0310b7f95ded9e9466ed5a038d23\", [])\n    谷槐体               = EffectMeta(\"谷槐体\", False, \"7290442552933618213\", \"25999006\", \"eb56bfc5c186158d60149372192b99ba\", [])\n    谷秋体               = EffectMeta(\"谷秋体\", False, \"7290442742822343205\", \"25999008\", \"233d1f80de91946da3c59527a61b1c87\", [])\n    超级战甲             = EffectMeta(\"超级战甲\", False, \"6970982657576407559\", \"1156412\", \"2872dab5c322f42ed7d1d9715013dc36\", [])\n    超重要体             = EffectMeta(\"超重要体\", False, \"7203638484752405048\", \"9893378\", \"d21f913df460b6a9332a1520f7fe2d0c\", [])\n    轻吟体               = EffectMeta(\"轻吟体\", False, \"7035927184275411464\", \"1459730\", \"205a76c590ab163af423468e7f416a91\", [])\n    轻烟体               = EffectMeta(\"轻烟体\", False, \"7290445091401896507\", \"25998992\", \"477c79ab3925eb7eacf381bbc5df9cf8\", [])\n    追光体               = EffectMeta(\"追光体\", False, \"7203638485666763325\", \"9893371\", \"5e0b49b0a3e33e04769cabbee228f6f4\", [])\n    造字工房朴月体       = EffectMeta(\"造字工房朴月体\", False, \"7174426619228983816\", \"7046698\", \"7e21275ffaeeacc4472580bad9a95b19\", [])\n    逸致拼音             = EffectMeta(\"逸致拼音\", False, \"7070430706689643038\", \"1600480\", \"e15bf3763fb346f8b60eebabf04bdeee\", [])\n    醉冬体               = EffectMeta(\"醉冬体\", False, \"7290447667463721531\", \"25998974\", \"03b90eec6b256b89377e9f0b2936a9fe\", [])\n    醉山体               = EffectMeta(\"醉山体\", False, \"7290447771503432250\", \"25998980\", \"593e3537fab3af2dee1cff9ef8272571\", [])\n    金陵体               = EffectMeta(\"金陵体\", False, \"7086699209738424840\", \"1698067\", \"599831579b8aa5b5f0608d5e7d4ec5ce\", [])\n    钟隶体               = EffectMeta(\"钟隶体\", False, \"7290447395433747002\", \"25998975\", \"986ea2205ab06bf06be49eff695633ab\", [])\n    锦瑟体               = EffectMeta(\"锦瑟体\", False, \"7290443998345302586\", \"25999022\", \"eb465dc5d9f045c5ff3ce34d480a2529\", [])\n    闘龍                 = EffectMeta(\"闘龍\", False, \"7246698168547561985\", \"20403941\", \"b2552e48bc11cb289ccdf4504e3b771f\", [])\n    陈森田               = EffectMeta(\"陈森田\", False, \"6740499585669534215\", \"349461\", \"2f460ce688c37123262d25a3cc01771c\", [])\n    雁兰体               = EffectMeta(\"雁兰体\", False, \"7290446084780855867\", \"25998990\", \"6198e5f40da27fec116ee785c23b837e\", [])\n    雅酷黑简             = EffectMeta(\"雅酷黑简\", False, \"7130640934366089758\", \"4010137\", \"35ddec41ffa518033484f219e324a6bd\", [])\n    霸燃手书             = EffectMeta(\"霸燃手书\", False, \"7045187409960505886\", \"1494865\", \"e4f6766608951c7184a5d2a56aa370fa\", [])\n    青松体               = EffectMeta(\"青松体\", False, \"7290444911940211237\", \"25998985\", \"f4e7026acbdb7edd1003d24561f2add7\", [])\n    青翼体               = EffectMeta(\"青翼体\", False, \"7290445024435638842\", \"25998995\", \"ed99664d2260c7ea5390f24d9f280a69\", [])\n    风铃悠悠             = EffectMeta(\"风铃悠悠\", False, \"6903832640005083655\", \"979898\", \"6bec0d77ab4770d730f03611e9ae7f3d\", [])\n    风雅宋               = EffectMeta(\"风雅宋\", False, \"7208056673317950011\", \"10379505\", \"c4624c3d535a1801e0992ccb25de6ac4\", [])\n    飒爽手写             = EffectMeta(\"飒爽手写\", False, \"7054125855676568095\", \"1530070\", \"86756c9b0c71fd513bcc163893b56d7e\", [])\n    飞扬行书             = EffectMeta(\"飞扬行书\", False, \"7035922620969128479\", \"1459678\", \"0532175b5a7a61e379d6b1f23c212f43\", [])\n    飞驰体               = EffectMeta(\"飞驰体\", False, \"7045186745100407310\", \"1494866\", \"1e9478384005377f087abf035cdffe64\", [])\n    高字标志黑           = EffectMeta(\"高字标志黑\", False, \"7268259518427959866\", \"20885841\", \"4843f24f22c8d22c984533e347be275a\", [])\n    高字湘黑体           = EffectMeta(\"高字湘黑体\", False, \"7268259657167147577\", \"20885842\", \"2f0c093261b368846aae47cf8a8f74ba\", [])\n    魏碑体               = EffectMeta(\"魏碑体\", False, \"7035925927364137480\", \"1459722\", \"86169b46ad4dc73060f2a0b8d4f85a48\", [])\n    鲁迅行书             = EffectMeta(\"鲁迅行书\", False, \"6852191147230499341\", \"814917\", \"f1e089b61ff8c80ae89a929480c29f9e\", [])\n    鸿朗体               = EffectMeta(\"鸿朗体\", False, \"7290443206641062456\", \"25999020\", \"f5c0a418632780b008ec6d06476f3a3c\", [])\n    鸿潮榜书             = EffectMeta(\"鸿潮榜书\", False, \"7080096689553412615\", \"1654206\", \"9bbd5d67cabab4f174289af1c1efbe4c\", [])\n    黄令东齐伋复刻体     = EffectMeta(\"黄令东齐伋复刻体\", False, \"7265535655105532476\", \"20356605\", \"e7830741b741962e5c43105ea25e3612\", [])\n    黄油体               = EffectMeta(\"黄油体\", False, \"7265594455246246456\", \"20373099\", \"8d461ee41e8ffba2b77eae73f0a81d77\", [])\n    黄金时代             = EffectMeta(\"黄金时代\", False, \"7050010418932093471\", \"1511614\", \"269a3b6801b4e0b8e43d2d786f729da5\", [])\n    黎首体               = EffectMeta(\"黎首体\", False, \"7290444159842783803\", \"25999009\", \"ab6b6d28a350348b62613d3d0107096e\", [])\n    黒明朝               = EffectMeta(\"黒明朝\", False, \"7246698169310908930\", \"20404021\", \"4bc15cc4aac4d0cd44bb1949573d0cb7\", [])\n    默陌手写             = EffectMeta(\"默陌手写\", False, \"7025886295524119053\", \"1424938\", \"64b0eee1f99387b2d7a27f9c961e6bba\", [])\n    검                    = EffectMeta(\"검\", False, \"6841117522335371789\", \"20402365\", \"22104eb8b13bb33ff67be66a0a354723\", [])\n    검은_고딕체               = EffectMeta(\"검은 고딕체\", False, \"6808056243958059534\", \"20402283\", \"eb3c9a93c57d012275f863dc505cd599\", [])\n    고딕                   = EffectMeta(\"고딕\", False, \"6841143710177038856\", \"20402461\", \"4fa8d9e036b07cfb4903758f59f853f4\", [])\n    고딕체                  = EffectMeta(\"고딕체\", False, \"6808056385679397389\", \"20402279\", \"046f11d9049144aa80e3723b5ed93b7a\", [])\n    귀염                   = EffectMeta(\"귀염\", False, \"6841117240457171470\", \"20402361\", \"88e33d4c49ea8e0d3e2a34db33d5baf9\", [])\n    나눔_명조체               = EffectMeta(\"나눔 명조체\", False, \"6808057418866496014\", \"20402271\", \"98fa1cc813be2355fa176d7ccf67b785\", [])\n    낭만                   = EffectMeta(\"낭만\", False, \"6841119058838950414\", \"20402441\", \"9b3b62befefc316098b5e5dd9396ad25\", [])\n    로맨틱가이                = EffectMeta(\"로맨틱가이\", False, \"6808056744258834952\", \"20402275\", \"b393bd8032b9567e9111e28cf216156a\", [])\n    로봇                   = EffectMeta(\"로봇\", False, \"6841119449815192071\", \"20402445\", \"55dbee5dae1f9078477c7ecfc2a0be39\", [])\n    룬                    = EffectMeta(\"룬\", False, \"6841118098964091405\", \"20402401\", \"a029f910e187edc554df3f7945c7f022\", [])\n    버터                   = EffectMeta(\"버터\", False, \"6841119192150708744\", \"20402443\", \"c967a8d8bd3640d6e59f02a0277bb04b\", [])\n    성냥개비                 = EffectMeta(\"성냥개비\", False, \"6841118217641923085\", \"20402431\", \"7bfdd9c2dad08600a83f226db3149653\", [])\n    소나무                  = EffectMeta(\"소나무\", False, \"6841116992846434829\", \"20402359\", \"261086435afe50219a1156d1aa3b0004\", [])\n    시트콤                  = EffectMeta(\"시트콤\", False, \"6841116836445032974\", \"20402357\", \"f95108bc596583df9ddc9bfec7813e62\", [])\n    십대                   = EffectMeta(\"십대\", False, \"6841117356756832776\", \"20402363\", \"d589218d3c08ad6e0a4cb1de1bd00f03\", [])\n    아기                   = EffectMeta(\"아기\", False, \"6808056941458231815\", \"645451\", \"79273a8d31ec91b9f110243bd1096291\", [])\n    아이                   = EffectMeta(\"아이\", False, \"6841118486639415822\", \"20402433\", \"c9db70b65b984a4363c15343b2bd2573\", [])\n    유행                   = EffectMeta(\"유행\", False, \"6841117979371901454\", \"20402399\", \"009b2f822e20ece4ed7f2ae3df8e431f\", [])\n    이야기                  = EffectMeta(\"이야기\", False, \"6841118628025209358\", \"20402435\", \"cb58fd3d586a63998dd3a2a9b2c74441\", [])\n    전통                   = EffectMeta(\"전통\", False, \"6808056067201700360\", \"20402311\", \"113f70827a53eb347c4963008442f5e0\", [])\n    초승달                  = EffectMeta(\"초승달\", False, \"6841117705538376205\", \"20402369\", \"ef26b19722edb198afb05dbf1e6aaaf6\", [])\n    추사체                  = EffectMeta(\"추사체\", False, \"6808057229309121038\", \"20402301\", \"03f146063813fef4e276122ec2f9022c\", [])\n    커피                   = EffectMeta(\"커피\", False, \"6841118775186559495\", \"20402437\", \"7a1aae32d9c48be23d5ef99797977c68\", [])\n    필기                   = EffectMeta(\"필기\", False, \"6766523918946669069\", \"459288\", \"b393bd8032b9567e9111e28cf216156a\", [])\n    한드                   = EffectMeta(\"한드\", False, \"6841118889850442254\", \"20402439\", \"398d40463233dfad04e3419248a1f216\", [])\n    행복                   = EffectMeta(\"행복\", False, \"6841151352597385735\", \"20402465\", \"ced999c86d6916f621b8a5c0c2d325af\", [])\n    흑백만                  = EffectMeta(\"흑백만\", False, \"6841116695759688205\", \"20402327\", \"8626c3ab19bd1ea9e6a8cbbbb3ff48dd\", [])\n    ｱﾄﾞｺﾞｯｼｸ     = EffectMeta(\"ｱﾄﾞｺﾞｯｼｸ\", False, \"6841482093025825288\", \"20403099\", \"ca0367d4e28ad273f187747c45d27d57\", [])\n    ｵｰﾊﾞｰﾗｯﾌﾟ   = EffectMeta(\"ｵｰﾊﾞｰﾗｯﾌﾟ\", False, \"6841482806573404680\", \"20403059\", \"c771c84fc32ec5f969a8230a54453652\", [])\n    ｽｸﾘﾌﾟﾄ         = EffectMeta(\"ｽｸﾘﾌﾟﾄ\", False, \"6841483289438458381\", \"20403035\", \"516cd5ca0a4c4fb58e51023e76c95d94\", [])\n    ｾﾘﾌ太字           = EffectMeta(\"ｾﾘﾌ太字\", False, \"7020729846334493215\", \"1402800\", \"569bf7220b9170da8dd45c2241740140\", [])\n    ｾﾘﾌﾗｲﾄ         = EffectMeta(\"ｾﾘﾌﾗｲﾄ\", False, \"6841481513985380872\", \"20403113\", \"6448241a16c56d4c8dfa6ecb6b04c1c0\", [])\n    ﾓｰﾀﾞ太字         = EffectMeta(\"ﾓｰﾀﾞ太字\", False, \"6841481374243754510\", \"20403121\", \"e523f252c437fb3b707044a3a4492899\", [])\n    ﾓｰﾀﾞﾗｲﾄ       = EffectMeta(\"ﾓｰﾀﾞﾗｲﾄ\", False, \"6841480712739099150\", \"20403133\", \"d0ba57c8c707a5aee48cfbe5214017cf\", [])\n    ﾚｷﾞｭﾗｰ         = EffectMeta(\"ﾚｷﾞｭﾗｰ\", False, \"6841482701082464776\", \"20403061\", \"97c3fa9b7e660481c34e3991449e0886\", [])\n\n    # 付费特效\n    Aa之云体             = EffectMeta(\"Aa之云体\", True, \"7501533851718521394\", \"115474299\", \"c2d2b3f676344b6c60abb1c86490a81a\", [])\n    Aa乌日莫             = EffectMeta(\"Aa乌日莫\", True, \"7501234570835006003\", \"115375585\", \"3c3abd1d591cebc922f726ca6757bd83\", [])\n    Aa人间蹉跎           = EffectMeta(\"Aa人间蹉跎\", True, \"7501532931635024434\", \"115473709\", \"3cb617e2815bc9933189305a24d97c4d\", [])\n    Aa全息黑体           = EffectMeta(\"Aa全息黑体\", True, \"7497891126481785381\", \"114156127\", \"4e1d0e0a88ceac64b296c29fe0a39b3e\", [])\n    Aa刃黑体             = EffectMeta(\"Aa刃黑体\", True, \"7497895571210900005\", \"114159648\", \"6b49279ad89772018b28ca98a4c45253\", [])\n    Aa剑豪体             = EffectMeta(\"Aa剑豪体\", True, \"7501261456420114981\", \"115395999\", \"c348d6f9b504581f4eb1f3654272b4fb\", [])\n    Aa动员宋             = EffectMeta(\"Aa动员宋\", True, \"7501238408837075483\", \"115377308\", \"ebdb43b153a9ffad27012ac91380a2c8\", [])\n    Aa勘亭流             = EffectMeta(\"Aa勘亭流\", True, \"7501211609050649115\", \"115360771\", \"94d4d50001bfd5b803117535413066bc\", [])\n    Aa厚底黑             = EffectMeta(\"Aa厚底黑\", True, \"7174431250067755577\", \"7047541\", \"f3b0d37b587cc5b5ee33b5092802c5a7\", [])\n    Aa古线体             = EffectMeta(\"Aa古线体\", True, \"7501211793906209331\", \"115360774\", \"ddae3345190c1a093966c9c7e3fd63a2\", [])\n    Aa台灣漢字心動信號_简繁 = EffectMeta(\"Aa台灣漢字心動信號（简繁）\", True, \"7497889331973984805\", \"114154846\", \"6c4a38850eb3b3b52f5a68d682fa430a\", [])\n    Aa封神榜书           = EffectMeta(\"Aa封神榜书\", True, \"7501235311461012018\", \"115375582\", \"fd1dbebd76b8b781fa4472f4fc86f297\", [])\n    Aa小星星             = EffectMeta(\"Aa小星星\", True, \"7501533449530905114\", \"115474013\", \"a7543af068a34d006b9d245631c6ac14\", [])\n    Aa居酒屋             = EffectMeta(\"Aa居酒屋\", True, \"7501539460945809957\", \"115478734\", \"8b7c3464cb22da3b34b1366a3a9db35a\", [])\n    Aa巴洛克             = EffectMeta(\"Aa巴洛克\", True, \"7501235648557224498\", \"115375583\", \"27819df69cf24dea1b6680e172ff2383\", [])\n    Aa幻想               = EffectMeta(\"Aa幻想\", True, \"7501533252969042470\", \"115473869\", \"db640c840ec4a3ac277f82651d882a6a\", [])\n    Aa德古拉简           = EffectMeta(\"Aa德古拉简\", True, \"7497898575926399498\", \"114171804\", \"2b8c71449d9bd07af2b53e39649195aa\", [])\n    Aa放放隶书           = EffectMeta(\"Aa放放隶书\", True, \"7497890527145103881\", \"114155759\", \"df28a19f3fabcea1714983b641b74f04\", [])\n    Aa新华墨竹体         = EffectMeta(\"Aa新华墨竹体\", True, \"7497893640140755494\", \"114158131\", \"8f980bd172a4209dffdfe9607eb3479e\", [])\n    Aa新华惊马体         = EffectMeta(\"Aa新华惊马体\", True, \"7501238774051902002\", \"115377540\", \"6311492d22d45387cc0a7d33175f0509\", [])\n    Aa新怪谈             = EffectMeta(\"Aa新怪谈\", True, \"7501235484727710246\", \"115375584\", \"09588ce566b7a1e04b8d9e8dad5b9307\", [])\n    Aa方块黑             = EffectMeta(\"Aa方块黑\", True, \"7497893873037873714\", \"114158130\", \"c05e291a77ad65289700a642af2ac23a\", [])\n    Aa未央宫词           = EffectMeta(\"Aa未央宫词\", True, \"7497892647986532914\", \"114157130\", \"d09257691cd47c862d817b37a901c5ab\", [])\n    Aa杜康手书           = EffectMeta(\"Aa杜康手书\", True, \"7501262679810511370\", \"115396001\", \"9a2c0455cdb75dfd2c26cea7a3d2e33d\", [])\n    Aa欢乐堡             = EffectMeta(\"Aa欢乐堡\", True, \"7501235116673339954\", \"115375586\", \"a4dc41ffdc19e2943272ddd094977633\", [])\n    Aa水玉圆体           = EffectMeta(\"Aa水玉圆体\", True, \"7501211417521951270\", \"115360773\", \"2b4738a757bafc3a206443c6487eb98a\", [])\n    Aa浮梦体             = EffectMeta(\"Aa浮梦体\", True, \"7501212180285493787\", \"115360769\", \"91bc40daba8b5cd9c0297ef0e5c2faae\", [])\n    Aa海豹体             = EffectMeta(\"Aa海豹体\", True, \"7501212376713138698\", \"115360770\", \"24369b05f05fa1f8e503e7e164de413b\", [])\n    Aa清欢圆体           = EffectMeta(\"Aa清欢圆体\", True, \"7497893259797074441\", \"114158127\", \"0059c8befa5a7e0543e62a3cfb0961e7\", [])\n    Aa漆书               = EffectMeta(\"Aa漆书\", True, \"7497890203277726235\", \"114155607\", \"5cfd18f135307a803de983307f256203\", [])\n    Aa烈焰隶书           = EffectMeta(\"Aa烈焰隶书\", True, \"7501239212855792165\", \"115378827\", \"0e784d2d379a3cdefcd88e808df0c89c\", [])\n    Aa狂派手书           = EffectMeta(\"Aa狂派手书\", True, \"7501260939212100146\", \"115396002\", \"9f70fc1fb883f713d2aad9ec629f891d\", [])\n    Aa疏漫宋             = EffectMeta(\"Aa疏漫宋\", True, \"7497897887477535242\", \"114171805\", \"0491ac4f070fbe395856d0e19e4f1027\", [])\n    Aa百物语             = EffectMeta(\"Aa百物语\", True, \"7501234966815052339\", \"115375580\", \"db0dab0965562d57c7770c7d2778d5bb\", [])\n    Aa祝融隶             = EffectMeta(\"Aa祝融隶\", True, \"7501262524466074121\", \"115396000\", \"75791dafa1036a011a9d23b80c22402a\", [])\n    Aa简正隶黑           = EffectMeta(\"Aa简正隶黑\", True, \"7501238583911518729\", \"115377425\", \"9b00ec896d0655c5966a80ffb236f2fa\", [])\n    Aa芥末墩             = EffectMeta(\"Aa芥末墩\", True, \"7501234746416960050\", \"115375581\", \"8dbda4bb6f1f69d6e765aa773e0d93f3\", [])\n    Aa菊花体             = EffectMeta(\"Aa菊花体\", True, \"7497894073559159323\", \"114158129\", \"08cc7d09f863c337c66601564a73c9db\", [])\n    Aa融融宋             = EffectMeta(\"Aa融融宋\", True, \"7501238214691131930\", \"115377151\", \"d5ea45ee9325d5f5664d0b9955dfbad6\", [])\n    Aa西风手书           = EffectMeta(\"Aa西风手书\", True, \"7497891525213295114\", \"114156355\", \"6bfd89309c57db170a8058502ad2dd78\", [])\n    Aa跃然体             = EffectMeta(\"Aa跃然体\", True, \"7501262110492463625\", \"115395996\", \"0b729ba9eaebde7cffc63b285a55ed4e\", [])\n    Aa醒狮体             = EffectMeta(\"Aa醒狮体\", True, \"7501260756655018533\", \"115395997\", \"23ffea61da52f50710ad590525ef8b46\", [])\n    Aa金石体             = EffectMeta(\"Aa金石体\", True, \"7497891337044234789\", \"114156237\", \"f66ddc70f3a7e0b80af776d9b59b2df3\", [])\n    Aa锐智体             = EffectMeta(\"Aa锐智体\", True, \"7501238022352933413\", \"115377035\", \"41a8ad1e053a994d062f45c303d28855\", [])\n    Aa锐甲黑             = EffectMeta(\"Aa锐甲黑\", True, \"7497896024078291482\", \"114159647\", \"ce12950846b42d3ca7db007b2702f892\", [])\n    Aa锐雅体             = EffectMeta(\"Aa锐雅体\", True, \"7497896536597074483\", \"114159649\", \"8d1884ec7380f5aa0c5ed0d6ed248419\", [])\n    Aa镁宋               = EffectMeta(\"Aa镁宋\", True, \"7497898052825387530\", \"114171803\", \"91ba8555000f2047c56714f96e0129bd\", [])\n    Aa闲云体             = EffectMeta(\"Aa闲云体\", True, \"7501261128207438386\", \"115396003\", \"38adf19d88cb05a6704ba4885eb44a12\", [])\n    Aa霸道楷             = EffectMeta(\"Aa霸道楷\", True, \"7501210878839099930\", \"115360768\", \"14d529c19ff5422c2a71c02d2f0942a5\", [])\n    Aa顽宋               = EffectMeta(\"Aa顽宋\", True, \"7497896719514866203\", \"114159645\", \"b82001265d8c3b358793d30b9a2f501e\", [])\n    Aa鲸潮体             = EffectMeta(\"Aa鲸潮体\", True, \"7501261289486815795\", \"115395998\", \"ed1adf6e49aa98e72824bf0acd575865\", [])\n    Aa鹅卵石             = EffectMeta(\"Aa鹅卵石\", True, \"7497894333161411098\", \"114158128\", \"592312dab4297df570ca565b43c17dc1\", [])\n    Aa麟兰宋             = EffectMeta(\"Aa麟兰宋\", True, \"7497896347551404595\", \"114159646\", \"60b1d9a919f4b30922ce0f3accb15b5c\", [])\n    Aa龙象体             = EffectMeta(\"Aa龙象体\", True, \"7501211164332790298\", \"115360772\", \"24206940919ae94e22bb052739cfdafb\", [])\n    Atomic_Marker        = EffectMeta(\"Atomic-Marker\", True, \"7490531359736205834\", \"111804574\", \"c3ddb0454628811c3562a03f256a126d\", [])\n    Awelier              = EffectMeta(\"Awelier\", True, \"7491984624688566835\", \"112259365\", \"0e869f12fca5b2af601afec79f64d4ad\", [])\n    CC_Captial           = EffectMeta(\"CC-Captial\", True, \"7418508570066424330\", \"84086581\", \"8ba811d327acd1516615259819da72a2\", [])\n    CC_Chubby            = EffectMeta(\"CC-Chubby\", True, \"7481130667518988850\", \"108570272\", \"7876d2d83e1e2b85bd87e0ba74274802\", [])\n    CC_Decocut           = EffectMeta(\"CC-Decocut\", True, \"7419969356659954214\", \"84566362\", \"bd7466b88b16c19833a1c1151303e016\", [])\n    CC_DerStil           = EffectMeta(\"CC-DerStil\", True, \"7481130779821478426\", \"108570258\", \"c6cc9a5326909d0ca63eac1ab3be6e3d\", [])\n    CC_Element           = EffectMeta(\"CC-Element\", True, \"7416649778416587274\", \"83388253\", \"1e7becc8521b658de14864db8fcbb389\", [])\n    CC_Fluffy            = EffectMeta(\"CC-Fluffy\", True, \"7412942953905132049\", \"82112759\", \"87954588501cc7c35de2789bfe23ab21\", [])\n    CC_Fusion            = EffectMeta(\"CC-Fusion\", True, \"7441202923708617227\", \"93510805\", \"a6e9ea208def5ea9fe2f8177fb03aa8f\", [])\n    CC_Glee              = EffectMeta(\"CC-Glee\", True, \"7428153662695805478\", \"87224070\", \"2f6e2cdb94c3b68451d68916fee6515b\", [])\n    CC_Loopy_Letters     = EffectMeta(\"CC-Loopy Letters\", True, \"7484186924291199526\", \"109692383\", \"898932311d059de4523acad926122499\", [])\n    CC_Manga             = EffectMeta(\"CC-Manga\", True, \"7484175941208379914\", \"109692410\", \"9d6a96d28565c511fc9a96b51c70f7f5\", [])\n    CC_Moderno           = EffectMeta(\"CC-Moderno\", True, \"7444152681741947403\", \"94915234\", \"3bd5f42349aa8b0d3d211b6d2a6c31d4\", [])\n    CC_MonoCut           = EffectMeta(\"CC-MonoCut\", True, \"7416261331872911881\", \"83245166\", \"45a1f04c1214f28081f2cd32c8814a39\", [])\n    CC_Piston            = EffectMeta(\"CC-Piston\", True, \"7414496688611529255\", \"82624536\", \"3b3026dc1324ff59c62f34b02b2d5822\", [])\n    CC_Rapid             = EffectMeta(\"CC-Rapid\", True, \"7434004568716874259\", \"89156910\", \"97e21584fc2f88a0473c3b6dd5abec25\", [])\n    CC_UltraMass         = EffectMeta(\"CC-UltraMass\", True, \"7481130884687467046\", \"108570236\", \"c82dd71f169384002fac0d6f1274b62d\", [])\n    CC_Vita              = EffectMeta(\"CC-Vita\", True, \"7419969457788817929\", \"84566385\", \"cab4d8408ed7788346c73f1237426184\", [])\n    CC_lemon             = EffectMeta(\"CC-lemon\", True, \"7484188078546883082\", \"109692355\", \"0014e25d1ed87857d83f9f46fd8644c1\", [])\n    Clostan              = EffectMeta(\"Clostan\", True, \"7491985061500162598\", \"112259661\", \"499772addc34d3c0c57d0db12a4f3836\", [])\n    Gildan               = EffectMeta(\"Gildan\", True, \"7491984485504782874\", \"112260846\", \"b64a233d2273b4424e3498357764756d\", [])\n    Gildan_It            = EffectMeta(\"Gildan-It\", True, \"7491984248069427750\", \"112259122\", \"2d59c5411a396be79a972abb62bcef23\", [])\n    JYruantang           = EffectMeta(\"JYruantang\", True, \"7451897289527792178\", \"98222876\", \"af78243f78f27dfa80aca4e82c77eb1d\", [])\n    JYshiduo             = EffectMeta(\"JYshiduo\", True, \"7451897058371310117\", \"98222874\", \"24fdaeb998c36d329b423561398ba4e3\", [])\n    JYzhuqingting        = EffectMeta(\"JYzhuqingting\", True, \"7451897479320048166\", \"98222875\", \"921ba2b753807a5fb0d56a967225a352\", [])\n    Mellow               = EffectMeta(\"Mellow\", True, \"7491984798026568218\", \"112259480\", \"7815b9c5cb6e7a5c6bbf9f95416170e7\", [])\n    Merry_Christmas      = EffectMeta(\"Merry Christmas\", True, \"7451574186692055578\", \"98103035\", \"2a8b0f3ec8be1bde50969620603553af\", [])\n    Morska               = EffectMeta(\"Morska\", True, \"7491984914565304870\", \"112259573\", \"5413dba12d4f3832a43d15038a19cdb8\", [])\n    MyFont凌渡哥哥简     = EffectMeta(\"MyFont凌渡哥哥简\", True, \"7316825302406009395\", \"36880890\", \"cc22c869da3e5aecae2c1ffaf27d3eda\", [])\n    MyFont凌渡猪猪简     = EffectMeta(\"MyFont凌渡猪猪简\", True, \"7316826370200310298\", \"36880879\", \"991bae1ed498bc17c16056935b73fa9b\", [])\n    Railway_Gank         = EffectMeta(\"Railway-Gank\", True, \"7490534157064344074\", \"111805300\", \"b4f6d043abc325eb5ba55a79d3c8266c\", [])\n    Sugary               = EffectMeta(\"Sugary\", True, \"7491984099733672485\", \"112259022\", \"2dba8f998289f81f20658ad407c4732d\", [])\n    Sugary_Dreams_Italic = EffectMeta(\"Sugary-Dreams-Italic\", True, \"7490531151350600219\", \"111804589\", \"2dba8f998289f81f20658ad407c4732d\", [])\n    Thinker_Alt1         = EffectMeta(\"Thinker-Alt1\", True, \"7490531314752295450\", \"111804584\", \"7b5044afab06e051cc2d70a75988e18a\", [])\n    Ugly_Dave_Alternates = EffectMeta(\"Ugly-Dave-Alternates\", True, \"7490531414392181258\", \"111804564\", \"aa46d2672cecc9d16c4184c804c85d23\", [])\n    Vogue                = EffectMeta(\"Vogue\", True, \"7491983297870828058\", \"112258561\", \"a891f2a60d48be581685f9136e9418ca\", [])\n    ZY_Amity             = EffectMeta(\"ZY Amity\", True, \"7311977316970664449\", \"34200643\", \"d6723285163f5230adc9bab0063530ae\", [])\n    ZY_Balloonbillow     = EffectMeta(\"ZY Balloonbillow\", True, \"7353574360667394561\", \"55106512\", \"f6405bfdefb032ab060c05d9a1a7038a\", [])\n    ZY_Blossom           = EffectMeta(\"ZY Blossom\", True, \"7304640684311450113\", \"30910322\", \"0435212aa54de0bbd8797b877eed75b4\", [])\n    ZY_Brief             = EffectMeta(\"ZY Brief\", True, \"7311977774799917570\", \"34200651\", \"85952d2387016574cb2630d7f6760f4a\", [])\n    ZY_Classical         = EffectMeta(\"ZY Classical\", True, \"7311977840574992897\", \"34200639\", \"65a5e2bf53c01be6ab002d281f2b917d\", [])\n    ZY_Concise           = EffectMeta(\"ZY Concise\", True, \"7317175365288333826\", \"37544776\", \"e1727e1559ea44eef5a79f4d2e0f0901\", [])\n    ZY_Coruscant         = EffectMeta(\"ZY Coruscant\", True, \"7302355236243378689\", \"30000836\", \"13b25f0cefddbd9674fa37821a864ad2\", [])\n    ZY_Courage           = EffectMeta(\"ZY Courage\", True, \"7304640798488793602\", \"30910326\", \"902c396d8481367784495d73620b1a90\", [])\n    ZY_Daisy             = EffectMeta(\"ZY Daisy\", True, \"7302355415038169601\", \"30000858\", \"5694276489bf9e70db025e6f19277508\", [])\n    ZY_Dots_Art          = EffectMeta(\"ZY Dots Art\", True, \"7407288650473411088\", \"80464454\", \"6cf134f84322facd5a889b4cdfd8dde3\", [])\n    ZY_Elegant_Black     = EffectMeta(\"ZY Elegant-Black\", True, \"7324166053649453570\", \"40250742\", \"9ed1afc8f2ba9b8abdec694010254e7b\", [])\n    ZY_Elixir            = EffectMeta(\"ZY Elixir\", True, \"7302355533313348097\", \"30000844\", \"ebd4e8ef85eacc25860cd9c4c7d63d72\", [])\n    ZY_Fabulous          = EffectMeta(\"ZY Fabulous\", True, \"7302355634538680833\", \"30000832\", \"2f673e5e2e8d956e6a0c6d8b28203d05\", [])\n    ZY_Fantasy           = EffectMeta(\"ZY Fantasy\", True, \"7350189137770582529\", \"53177510\", \"09af030c4b206c3b895502f715c80d79\", [])\n    ZY_Flexible          = EffectMeta(\"ZY Flexible\", True, \"7320169752465248769\", \"38698722\", \"7db82031c43cd09a3eb2e4a8cefff9cc\", [])\n    ZY_Flourishing_Italic = EffectMeta(\"ZY Flourishing-Italic\", True, \"7330606083335000577\", \"43287756\", \"dca57209a301d9119b911bff090262a8\", [])\n    ZY_Fortitude         = EffectMeta(\"ZY Fortitude\", True, \"7330160852353421825\", \"43041469\", \"2db56cf21059b8a0c192f801555df245\", [])\n    ZY_Genial            = EffectMeta(\"ZY Genial\", True, \"7343835314105881090\", \"49626244\", \"880c71fe5718834d2af405079017a334\", [])\n    ZY_Harmony           = EffectMeta(\"ZY Harmony\", True, \"7311977407244669441\", \"34200663\", \"627c4a4271a14a2aaa50e99f55b55061\", [])\n    ZY_Ingenious         = EffectMeta(\"ZY Ingenious\", True, \"7332772999801606657\", \"44370268\", \"ff9c0fcb108f4f2c31521ebfdc4a924b\", [])\n    ZY_Kindly_Breeze     = EffectMeta(\"ZY Kindly Breeze\", True, \"7407289076090409489\", \"80464440\", \"a4e22dd23bf2aa6ae8ceda12400eb900\", [])\n    ZY_Loose             = EffectMeta(\"ZY Loose\", True, \"7311977919948001793\", \"34200631\", \"ee6834207df657453188eba97ee1f260\", [])\n    ZY_Loyalty           = EffectMeta(\"ZY Loyalty\", True, \"7371704099433091600\", \"66322554\", \"1e9b242443a9943a43ccf30604243978\", [])\n    ZY_Majestic          = EffectMeta(\"ZY Majestic\", True, \"7322744435404444161\", \"39631829\", \"5f9cf1ebd52e941a74774df029bd6499\", [])\n    ZY_Modern            = EffectMeta(\"ZY Modern\", True, \"7347670651626328577\", \"51844020\", \"5f5649ec5cd96f1311271d7f84e6151b\", [])\n    ZY_Multiplicity      = EffectMeta(\"ZY Multiplicity\", True, \"7371704261878485521\", \"66322523\", \"f9714cd361ad6ddb6ee5b255d1e8ee21\", [])\n    ZY_Pace              = EffectMeta(\"ZY Pace\", True, \"7311978000008876546\", \"34200623\", \"137b83eac18b26fb4ed9947cdc69f54d\", [])\n    ZY_Panacea           = EffectMeta(\"ZY Panacea\", True, \"7302355742936273410\", \"30000850\", \"dc33e6efcf20202d53ab1818c50216e2\", [])\n    ZY_Relax             = EffectMeta(\"ZY Relax\", True, \"7311977487469122049\", \"34200615\", \"4ac466f1249ffceb8ef9b6f366d42384\", [])\n    ZY_Rhythm            = EffectMeta(\"ZY Rhythm\", True, \"7311978076647199233\", \"34200633\", \"ba8aa30ec13b22027612010c12f6ef4d\", [])\n    ZY_Slender           = EffectMeta(\"ZY Slender\", True, \"7311977578821063170\", \"34200655\", \"bd7e086e303630912f12c4b75f93d139\", [])\n    ZY_Spunk             = EffectMeta(\"ZY Spunk\", True, \"7304640886703395329\", \"30910324\", \"8942384a7e78d2be8b650b0791afdd56\", [])\n    ZY_Squiggle          = EffectMeta(\"ZY Squiggle\", True, \"7371704357009494529\", \"66322535\", \"7b461311c3dae5726d9768969ff26ecf\", [])\n    ZY_Starry            = EffectMeta(\"ZY Starry\", True, \"7304640983893807618\", \"31942077\", \"8558a845c7f82bf81e5b27c654b413e2\", [])\n    ZY_Steady            = EffectMeta(\"ZY Steady\", True, \"7340237950094938625\", \"48055822\", \"2a7d2deb0d59c986f2b7dcec1ba5eafa\", [])\n    ZY_Tactful           = EffectMeta(\"ZY Tactful\", True, \"7343835205418881537\", \"49626266\", \"98526862d30f120428d722f0f482a535\", [])\n    ZY_Timing            = EffectMeta(\"ZY Timing\", True, \"7304641084833927682\", \"30910320\", \"95032638412a83a08c311a83bbcc85bb\", [])\n    ZY_Trend             = EffectMeta(\"ZY Trend\", True, \"7347670845185069569\", \"51844010\", \"0f62f8bfab9d76a74dc281c7f248ac23\", [])\n    ZY_Upright           = EffectMeta(\"ZY Upright\", True, \"7394802257847390737\", \"76415424\", \"7039078ff18119460a7475a4f0855c30\", [])\n    ZY_Vigour            = EffectMeta(\"ZY Vigour\", True, \"7340906771109646849\", \"48332840\", \"e3ec58ae48dacc61639cd3189782397f\", [])\n    ZY_Vision            = EffectMeta(\"ZY Vision\", True, \"7340906978828358145\", \"48332846\", \"d557c7127eb583608295e11d362c7db5\", [])\n    ZYLAA_Demure         = EffectMeta(\"ZYLAA Demure\", True, \"7313895257991549442\", \"35459490\", \"ce4f98f6b9b57daa44336c2489eff940\", [])\n    ZYLAA_Flechazo       = EffectMeta(\"ZYLAA Flechazo\", True, \"7313895610061427201\", \"35459194\", \"271dc59c2571611705199905a1e3720e\", [])\n    ZYLAA_Gambol         = EffectMeta(\"ZYLAA Gambol\", True, \"7313895522496942593\", \"35459480\", \"da0af3552b7d3a02852bb38492ebaf4e\", [])\n    ZYLAA_Infinity       = EffectMeta(\"ZYLAA Infinity\", True, \"7313895149266801153\", \"35459464\", \"89cb2458a15d287b1700e19da8992e6b\", [])\n    ZYLAA_Serein         = EffectMeta(\"ZYLAA Serein\", True, \"7313895348269748738\", \"35459448\", \"e2b7df96431748f6a111df6fa01bd0f2\", [])\n    ZYLAA_lavender       = EffectMeta(\"ZYLAA lavender\", True, \"7313895433011466754\", \"35459252\", \"e5cb066306e46ffbc15dc08eb70bc175\", [])\n    一笔壹画加油体       = EffectMeta(\"一笔壹画加油体\", True, \"7390218575979483659\", \"74697345\", \"f3020b0f6e2995f787a4fab6faef0e33\", [])\n    一笔壹画潮黑体       = EffectMeta(\"一笔壹画潮黑体\", True, \"7390218461990883876\", \"74696981\", \"97a3a570222328a8dd97b3921d3716bd\", [])\n    三极云隶体中         = EffectMeta(\"三极云隶体中\", True, \"7312720330986885642\", \"34549534\", \"6f587feaf3648f708c4da91616e340fd\", [])\n    三极力量体简_粗      = EffectMeta(\"三极力量体简-粗\", True, \"7405555944769196595\", \"79942352\", \"4c26fb32e20e6796d98a3ee30dfb5635\", [])\n    三极古拙楷书         = EffectMeta(\"三极古拙楷书\", True, \"7410300778998403610\", \"81318534\", \"03580936bf93675062e50d273fea559d\", [])\n    三极妙漫体           = EffectMeta(\"三极妙漫体\", True, \"7405556011081142822\", \"79942353\", \"d4ea5fbd89d90037a8d6500469023d96\", [])\n    三极宋黑体超粗       = EffectMeta(\"三极宋黑体超粗\", True, \"7312720224510284326\", \"34549526\", \"8b847b757e21edd8f0189782f8dd97b4\", [])\n    三极拙墨体           = EffectMeta(\"三极拙墨体\", True, \"7405556255906861605\", \"79942349\", \"8096b3c9dc67f62af7715b1d266ae1c7\", [])\n    三极拙隶简体         = EffectMeta(\"三极拙隶简体\", True, \"7312720520011584038\", \"34549528\", \"b53e4ba7b8a1a275b290dc427127296d\", [])\n    三极极宋超粗         = EffectMeta(\"三极极宋超粗\", True, \"7494187329054052901\", \"112957135\", \"f8122ed54493f8f66c8ebf6c422e6df2\", [])\n    三极榜楷简体         = EffectMeta(\"三极榜楷简体\", True, \"7410300778990015027\", \"81318537\", \"1b1aadca917f42578fb41d5d95c6539c\", [])\n    三极欢乐体           = EffectMeta(\"三极欢乐体\", True, \"7405555876368486939\", \"79942350\", \"e4acf0240f647779c23d3cd70452df5b\", [])\n    三极正雅黑粗         = EffectMeta(\"三极正雅黑粗\", True, \"7312720421177004571\", \"34549517\", \"705aa06a0c64ac4348cf575e3921faf9\", [])\n    三极气泡体           = EffectMeta(\"三极气泡体\", True, \"7405556128832033317\", \"79942351\", \"f1120030bd9df3fc5e58adfb2be96c26\", [])\n    三极泼墨体           = EffectMeta(\"三极泼墨体\", True, \"7405556071848219186\", \"79942347\", \"ecbcf36e6184d1306dc75dcc9391f4b7\", [])\n    三极活力黑简体_粗    = EffectMeta(\"三极活力黑简体 粗\", True, \"7410300778994209307\", \"81318539\", \"6125db74e7f1c5d73848a5359ac0303f\", [])\n    三极浓密仙粗         = EffectMeta(\"三极浓密仙粗\", True, \"7312720141865718282\", \"34549529\", \"d65312a270f2f970f94b453b0e05949f\", [])\n    三极湘乡体           = EffectMeta(\"三极湘乡体\", True, \"7410300778994209289\", \"81318538\", \"c817812de4b4be06462070c0af0e9ab0\", [])\n    三极纯真体粗         = EffectMeta(\"三极纯真体粗\", True, \"7312719708283736627\", \"34549518\", \"c847816a7221cc0d5864e30de0612177\", [])\n    三极罗丽黑简体_粗    = EffectMeta(\"三极罗丽黑简体-粗\", True, \"7410300778994209290\", \"81318535\", \"4950c4b06f6e7e882374bdd60add5bda\", [])\n    三极萌喵简体         = EffectMeta(\"三极萌喵简体\", True, \"7410300778994225674\", \"81318536\", \"d56f4a0c1c39de0bc7d5c9fb6e9b1400\", [])\n    三极行楷简体_粗      = EffectMeta(\"三极行楷简体-粗\", True, \"7405556194279952905\", \"79942348\", \"e901f6b29261b596fc8e7f85b1ea572b\", [])\n    三极铿锵体           = EffectMeta(\"三极铿锵体\", True, \"7312720059191792154\", \"34549521\", \"9a5cdcda6b00d26af0ecfa9b79250c54\", [])\n    三极黑宋体中粗       = EffectMeta(\"三极黑宋体中粗\", True, \"7312719852194501158\", \"34549520\", \"4577355bc0adeb1763ad581f05e7c5ea\", [])\n    云书法三行魏碑体     = EffectMeta(\"云书法三行魏碑体\", True, \"7316822178538721830\", \"36880893\", \"8d1f5570b333f80196ec40fde68fd190\", [])\n    云书法手书建刚静心楷简 = EffectMeta(\"云书法手书建刚静心楷简\", True, \"7316823183905002010\", \"36880886\", \"5b5b4250553e98394d9e01644ec47320\", [])\n    云书法生如夏花简     = EffectMeta(\"云书法生如夏花简\", True, \"7316822784103944713\", \"36880894\", \"460bd3cafc980d468c35c960dd50a2d3\", [])\n    云书法罗西硬笔楷书体 = EffectMeta(\"云书法罗西硬笔楷书体\", True, \"7316819473019703859\", \"36880892\", \"a8554d938efd7655890ddb5c413b1d47\", [])\n    云书法萨瓦迪卡简     = EffectMeta(\"云书法萨瓦迪卡简\", True, \"7316821586038755877\", \"36880889\", \"b504036de8a8db8ada2082bfaeb6b497\", [])\n    亦然体               = EffectMeta(\"亦然体\", True, \"7290457372814742073\", \"26003134\", \"a4922f5c3dbd6998261cbbf9dcb51139\", [])\n    仓耳丝柔体           = EffectMeta(\"仓耳丝柔体\", True, \"7423616269384946186\", \"85757836\", \"4cc0c3a634c7888ada2991778315963c\", [])\n    仓耳丰黑             = EffectMeta(\"仓耳丰黑\", True, \"7423616269397545499\", \"85757844\", \"efb2ad14a082b876427a3fb696918927\", [])\n    仓耳体               = EffectMeta(\"仓耳体\", True, \"7423616268759994890\", \"85757842\", \"7d450c06b110c67f359ddbb2a6377ae4\", [])\n    仓耳力士             = EffectMeta(\"仓耳力士\", True, \"7423616269326225946\", \"85757837\", \"e29302f3d11350964083cc128799dd8e\", [])\n    仓耳明黑             = EffectMeta(\"仓耳明黑\", True, \"7423616269552718345\", \"85757841\", \"910023dbaae2f88ee799e9893e73ab14\", [])\n    仓耳曙黑             = EffectMeta(\"仓耳曙黑\", True, \"7423616268755800603\", \"85757840\", \"2d77715e09de6fdcddadaddeee6f21a9\", [])\n    仓耳榜黑             = EffectMeta(\"仓耳榜黑\", True, \"7423616269313643035\", \"85757838\", \"da389dd735bb6b52d42cf349374a8a82\", [])\n    仓耳状元楷           = EffectMeta(\"仓耳状元楷\", True, \"7423616268764189222\", \"85757849\", \"d8ca77c9003f4b2dd29cdae84d5f0556\", [])\n    仓耳视频体           = EffectMeta(\"仓耳视频体\", True, \"7423616269338808841\", \"85757847\", \"406d8ff6e6989818b85510428b118951\", [])\n    仓耳趣黑             = EffectMeta(\"仓耳趣黑\", True, \"7423616269397529115\", \"85757839\", \"c9472a60029f4de40b7352723b6d645b\", [])\n    仓耳酷黑             = EffectMeta(\"仓耳酷黑\", True, \"7423616268759994930\", \"85757853\", \"18f24dbd9ac9df2aa5fcce0be1864f68\", [])\n    优设书华体           = EffectMeta(\"优设书华体\", True, \"7438524730103042599\", \"91065725\", \"3dc2297c2b116a9da29a5cb0ab3d894d\", [])\n    优设字由棒棒体       = EffectMeta(\"优设字由棒棒体\", True, \"7311914390259765811\", \"34131538\", \"60db6d16ba870996309056ecb1e315b1\", [])\n    优设字美体           = EffectMeta(\"优设字美体\", True, \"7438524940153786934\", \"91065726\", \"b1cab3de325e719f0e2d446cfa11c99f\", [])\n    优设招牌体           = EffectMeta(\"优设招牌体\", True, \"7438524840576815627\", \"91065727\", \"fd59ad69d28b184ae30ef8b3571ec38a\", [])\n    修羽体               = EffectMeta(\"修羽体\", True, \"7290456770160366139\", \"26003131\", \"72f61f22f5ef19cfcadc4995934aa063\", [])\n    凌丝体               = EffectMeta(\"凌丝体\", True, \"7290455877864133157\", \"26003145\", \"92fc337d10907e56437c0da3f6d10a78\", [])\n    利飞体               = EffectMeta(\"利飞体\", True, \"7423616268764189193\", \"85757848\", \"b269aadd970b3705e5aaa54d0343117d\", [])\n    剪映专辑             = EffectMeta(\"剪映专辑\", True, \"7479022906626806298\", \"107789541\", \"56896a93f56d85f79ed19a07c52d4de7\", [])\n    剪映云迹             = EffectMeta(\"剪映云迹\", True, \"7502335387969262130\", \"115815828\", \"7269f0ee6bcdd0cf8a1184618f65cbba\", [])\n    剪映半山海           = EffectMeta(\"剪映半山海\", True, \"7497171321915183625\", \"113931114\", \"0597492b4816d447e85e057852c7c038\", [])\n    剪映印章             = EffectMeta(\"剪映印章\", True, \"7499001991096439347\", \"114520924\", \"93edc0c6b3926ec19bc249779fe0a91a\", [])\n    剪映团子             = EffectMeta(\"剪映团子\", True, \"7494617559677800970\", \"113096610\", \"fa201c52ba126f103a453b9668f6f442\", [])\n    剪映圆隶             = EffectMeta(\"剪映圆隶\", True, \"7497162943239295539\", \"113927430\", \"4666460830ba95be46fee85812b702f6\", [])\n    剪映手书             = EffectMeta(\"剪映手书\", True, \"7486448265496367625\", \"110450154\", \"2e85dc679048a1da139661e050438ec2\", [])\n    剪映新年体           = EffectMeta(\"剪映新年体\", True, \"7463380715107783206\", \"102584862\", \"259e955ebb6238cf8b3a70e160fc26f9\", [])\n    剪映春日部           = EffectMeta(\"剪映春日部\", True, \"7481618551309079077\", \"108780445\", \"f6ab639c8895f9778f0b83a231c1126c\", [])\n    剪映狗爬体           = EffectMeta(\"剪映狗爬体\", True, \"7485673940988203558\", \"110206413\", \"c2090467a91f15c333bcb983403ebac6\", [])\n    剪映细毛笔           = EffectMeta(\"剪映细毛笔\", True, \"7502351067770786341\", \"115825070\", \"ea98039f50c8807e396522ae2317124f\", [])\n    剪映香蕉             = EffectMeta(\"剪映香蕉\", True, \"7497163735652373018\", \"113927966\", \"f3f9766b7909e4c92b07a65cdbcbef8b\", [])\n    励字俊林简           = EffectMeta(\"励字俊林简\", True, \"7316745865731772955\", \"36825422\", \"5f7e14d8bc6853e8d2b38abb9f930495\", [])\n    励字勇敢黑简_大黑    = EffectMeta(\"励字勇敢黑简 大黑\", True, \"7316817704143295003\", \"36880884\", \"0580e68e5ec975b80ebd9d9d2806cbf8\", [])\n    励字大黑简繁         = EffectMeta(\"励字大黑简繁\", True, \"7316745335257174578\", \"36825420\", \"78f653837bfd529904d56cfd77521eee\", [])\n    励字姚体简繁         = EffectMeta(\"励字姚体简繁\", True, \"7316817407664722441\", \"36880881\", \"22b55c6dc66142309168297e2633ec9b\", [])\n    励字小怪兽简         = EffectMeta(\"励字小怪兽简\", True, \"7316747164716110345\", \"36825428\", \"b33b2fc025a61087d99bd6aaa664dcc1\", [])\n    励字志向黑简_特粗    = EffectMeta(\"励字志向黑简 特粗\", True, \"7316819223840297481\", \"36880880\", \"ba409eae71d9d99f370175f283002307\", [])\n    励字憨憨简           = EffectMeta(\"励字憨憨简\", True, \"7316745679055884837\", \"36825429\", \"b316a0c93d766f2bcefb9962ebb92f46\", [])\n    励字敲可爱简_中粗    = EffectMeta(\"励字敲可爱简 中粗\", True, \"7316746541820023306\", \"36825430\", \"e7226d59672ac424570ad6504c8241a0\", [])\n    励字星宜简           = EffectMeta(\"励字星宜简\", True, \"7316747352956473882\", \"36825423\", \"9154d1fb2fc607f0fc1c182ed810a8c1\", [])\n    励字玉树临风简       = EffectMeta(\"励字玉树临风简\", True, \"7316818084935766565\", \"36880878\", \"01db7f1ab40c6daa77271d9a19d90be8\", [])\n    励字行楷简繁         = EffectMeta(\"励字行楷简繁\", True, \"7316817018030658075\", \"36880877\", \"63abf61c61a93772e2a0feff194c1785\", [])\n    励字趣石简           = EffectMeta(\"励字趣石简\", True, \"7316746949489594931\", \"36825427\", \"e2dc9006d5e08c9c3714b9107568bddd\", [])\n    励字趣黑简繁         = EffectMeta(\"励字趣黑简繁\", True, \"7316746727430558234\", \"36825424\", \"393ae2f90543245b132d69f25639e375\", [])\n    励字逆反差圆舞简_超级黑 = EffectMeta(\"励字逆反差圆舞简 超级黑\", True, \"7316746365185298981\", \"36825426\", \"4d7e99c776b2ed6df04889c6ba0136c5\", [])\n    励字造梦简_特粗      = EffectMeta(\"励字造梦简 特粗\", True, \"7316818766493389339\", \"36880891\", \"a21754e4d75eaa9ea07f12512f0a1df1\", [])\n    励字隶书简繁         = EffectMeta(\"励字隶书简繁\", True, \"7316746076373914139\", \"36825425\", \"28d5ed8c5392b325a5f22823917e2aa7\", [])\n    华书体               = EffectMeta(\"华书体\", True, \"7290455554504266298\", \"26003140\", \"2854f0774cf3b780304708ee46625fa9\", [])\n    听露体               = EffectMeta(\"听露体\", True, \"7290456595102700089\", \"26003132\", \"adfad625c852fca682e02463bd7d0bbc\", [])\n    唧唧国王             = EffectMeta(\"唧唧国王\", True, \"7312719555653014053\", \"34549532\", \"b978210e888a28fd7f6b1ac6e864cc03\", [])\n    壮楷体               = EffectMeta(\"壮楷体\", True, \"7441547528874496539\", \"93697432\", \"1b486bea4bad28409070e70c8d0e10f0\", [])\n    妙如体               = EffectMeta(\"妙如体\", True, \"7290456177559736889\", \"26003137\", \"d8cdbaf5501f5ec0d2d88a294fafac17\", [])\n    字由爱驾公路体       = EffectMeta(\"字由爱驾公路体\", True, \"7311912714970862107\", \"34131532\", \"2c6b6b843410224e98e99e3d1ab427e1\", [])\n    字语云黑宋           = EffectMeta(\"字语云黑宋\", True, \"7312719287796371978\", \"34549538\", \"a0594d2389cf544ca305f467ae7dd4ba\", [])\n    字语俊言体           = EffectMeta(\"字语俊言体\", True, \"7495685759022666278\", \"113453150\", \"723657e683658cd93c4615cc7b905fb6\", [])\n    字语叙黑体           = EffectMeta(\"字语叙黑体\", True, \"7495677959626297907\", \"113448754\", \"755374b6c5f1d1e826a4277f38593b2f\", [])\n    字语叙黑体_中粗      = EffectMeta(\"字语叙黑体-中粗\", True, \"7495667671212495386\", \"113443244\", \"befd16cb73dbaccd9505ecd6e0d5a662\", [])\n    字语叙黑体_常规      = EffectMeta(\"字语叙黑体-常规\", True, \"7495679051764339251\", \"113449404\", \"11aaa654400d5083897329713a9bb9e8\", [])\n    字语叙黑体_粗体      = EffectMeta(\"字语叙黑体-粗体\", True, \"7495676881946022451\", \"113448362\", \"d1c7cf4dd7c40614826d680ed5805cdd\", [])\n    字语叙黑体_细体      = EffectMeta(\"字语叙黑体-细体\", True, \"7495679735909847589\", \"113449788\", \"3b224152eaf416cbeaed7d39917e6fdf\", [])\n    字语叙黑体_超粗      = EffectMeta(\"字语叙黑体-超粗\", True, \"7495661432017523250\", \"113442102\", \"e8367550c6c832bf3c29b00bd7827cc0\", [])\n    字语古兰体           = EffectMeta(\"字语古兰体\", True, \"7312718551096234523\", \"34549527\", \"b1130cae36f0b2bad353e96af5850c78\", [])\n    字语古映体           = EffectMeta(\"字语古映体\", True, \"7495686582133854730\", \"113453641\", \"831fab960b2d97a5ecc8735031aaad2f\", [])\n    字语咏宋体           = EffectMeta(\"字语咏宋体\", True, \"7312719367769166386\", \"34549533\", \"12fe695be021ad4406276e85f32de4be\", [])\n    字语咏宏体           = EffectMeta(\"字语咏宏体\", True, \"7312719426845938203\", \"34549522\", \"28ed414e182f0fd35c9a3658d1999e57\", [])\n    字语咏楷体           = EffectMeta(\"字语咏楷体\", True, \"7312719210373714459\", \"34549530\", \"06ab9abe9d2e6f4d10152bafe691738c\", [])\n    字语嘟嘟体           = EffectMeta(\"字语嘟嘟体\", True, \"7312718329347576347\", \"34549523\", \"ce70e138b40294d5f159ddbdfd2f5e23\", [])\n    字语圆体             = EffectMeta(\"字语圆体\", True, \"7495689259223880202\", \"113454943\", \"f625722b0ce881a1182f8ae3d2fc7b9a\", [])\n    字语康宋体           = EffectMeta(\"字语康宋体\", True, \"7495657467548799515\", \"113436253\", \"8da8fafe9b3517714901f3fc88e7428c\", [])\n    字语康宋体繁体       = EffectMeta(\"字语康宋体繁体\", True, \"7495691210900640293\", \"113456064\", \"3150de1a5539e1981c6561342af25b88\", [])\n    字语文乐体           = EffectMeta(\"字语文乐体\", True, \"7495684286788407818\", \"113452362\", \"1f275305f825ffc7a578e1df43146ca4\", [])\n    字语文乐体_粗体      = EffectMeta(\"字语文乐体-粗体\", True, \"7495683757769232906\", \"113452063\", \"0fd32b402664816baecfab313cb6235f\", [])\n    字语文乐体_细体      = EffectMeta(\"字语文乐体-细体\", True, \"7495684762376344091\", \"113452597\", \"8031951a036455afe6bc05955b19b650\", [])\n    字语文刻体           = EffectMeta(\"字语文刻体\", True, \"7495683056359969306\", \"113451682\", \"ea6e2bb9b97f11fb1688a135f9c07688\", [])\n    字语文熙体           = EffectMeta(\"字语文熙体\", True, \"7495685451823452723\", \"113452995\", \"193086e7036a8379a7b54e3204944ddb\", [])\n    字语文酷体           = EffectMeta(\"字语文酷体\", True, \"7312718751328113162\", \"34549524\", \"df4da46440a5f0dc20316de2a38445f7\", [])\n    字语文雅体           = EffectMeta(\"字语文雅体\", True, \"7312718961991225894\", \"34549525\", \"bf9095c601719f1dcaa55eacc4c5d1bd\", [])\n    字语文韬体           = EffectMeta(\"字语文韬体\", True, \"7312718857334952498\", \"34549539\", \"dc992f2c580c264006a779732bc617b9\", [])\n    字语文韵体           = EffectMeta(\"字语文韵体\", True, \"7312719046229627402\", \"34549537\", \"bc5a66d2265466330a836fc862b0c518\", [])\n    字语漫雅手书         = EffectMeta(\"字语漫雅手书\", True, \"7495686373119103526\", \"113453534\", \"f7d92829d54324872f3aa70598dbe169\", [])\n    字语萌酱体           = EffectMeta(\"字语萌酱体\", True, \"7495690155840246298\", \"113455471\", \"09bb701167bffb3a7544fe31674bce62\", [])\n    字语软糖体           = EffectMeta(\"字语软糖体\", True, \"7312718629982704166\", \"34549535\", \"a126d5a78f08f65afdcea6f0b6d3928c\", [])\n    字语颖黑体           = EffectMeta(\"字语颖黑体\", True, \"7312719121404138021\", \"34549516\", \"2c43f4309b450a0fff1c547ec5e96003\", [])\n    宜宋                 = EffectMeta(\"宜宋\", True, \"7423616269825348122\", \"85757843\", \"6b5fdc1a70b0b3a461bff3db1ccbbae7\", [])\n    小可爱体             = EffectMeta(\"小可爱体\", True, \"7423616269267505691\", \"85757845\", \"0eb3ee4fdd0c5a415e73a7e82dd9dcd8\", [])\n    少年南波万           = EffectMeta(\"少年南波万\", True, \"7441547528870302258\", \"93697433\", \"fc594dc0e1764159fff35321944e907d\", [])\n    山雁体               = EffectMeta(\"山雁体\", True, \"7290456514370736698\", \"26003150\", \"c29a5195061ec2b2f72aa4fe97e04f43\", [])\n    幽梦体               = EffectMeta(\"幽梦体\", True, \"7290457477873668666\", \"26003126\", \"1f23a06aada2e64a9dc3cd490aadaf07\", [])\n    归雁体               = EffectMeta(\"归雁体\", True, \"7290455353756488247\", \"26003136\", \"5d364212ce7ad920f858d615448a3981\", [])\n    怜秋体               = EffectMeta(\"怜秋体\", True, \"7290455783932695100\", \"26003139\", \"bfdcaac20b0a81352e95996d7e1a6433\", [])\n    承英体               = EffectMeta(\"承英体\", True, \"7290455103704666679\", \"26003146\", \"247535da6392b2d1a96e5193fb5d1f03\", [])\n    星汉宋               = EffectMeta(\"星汉宋\", True, \"7423616268764189211\", \"85757834\", \"47383c4219eac3eaaef23cddd07f8203\", [])\n    景曜体               = EffectMeta(\"景曜体\", True, \"7290455645264810555\", \"26003133\", \"5320f82421f4ef64d62f27272241b8cf\", [])\n    月亮供电不足         = EffectMeta(\"月亮供电不足\", True, \"7312720704959418930\", \"34549519\", \"65bb1af80161acd665444de74af896d8\", [])\n    未光体               = EffectMeta(\"未光体\", True, \"7290456683027894839\", \"26003147\", \"2e77e4633f21a02e0a70b90977a7b01a\", [])\n    毛体行楷             = EffectMeta(\"毛体行楷\", True, \"7452649447441306121\", \"98548489\", \"06e8ecfb9262f12693c90d29dc501111\", [])\n    毛体行草             = EffectMeta(\"毛体行草\", True, \"7452649545395081755\", \"98548450\", \"35029f40e40fe5e66090c385ec28be0b\", [])\n    汉字之美棒棒糖粗简   = EffectMeta(\"汉字之美棒棒糖粗简\", True, \"7316732709747823114\", \"36795730\", \"296fc38d5559dba8cb8ed33daf6ea93f\", [])\n    汉字之美玉龙简       = EffectMeta(\"汉字之美玉龙简\", True, \"7316745091178041865\", \"36825421\", \"ff8a83fc65133df892ebb680a917d2c6\", [])\n    汉字之美郝刚牡丹体简 = EffectMeta(\"汉字之美郝刚牡丹体简\", True, \"7316816467062690330\", \"36880888\", \"1b67a99e701e335a08536e499dfe91ff\", [])\n    流苏体               = EffectMeta(\"流苏体\", True, \"7290455967735484987\", \"26003142\", \"8a3b67cce8e2f0e66c06600c2c6271cf\", [])\n    游乐体               = EffectMeta(\"游乐体\", True, \"7290457554574905914\", \"26003128\", \"987336c2aff7c968b5d019749a327998\", [])\n    点字佳楷             = EffectMeta(\"点字佳楷\", True, \"7311912796520714779\", \"34131531\", \"c218de2cbf3e51caf8b425bfaf174bbf\", [])\n    点字奇巧             = EffectMeta(\"点字奇巧\", True, \"7311913943188902427\", \"34131533\", \"b6ef0e1abe473dd27bde5fbdb12fa6f8\", [])\n    点字小隶书           = EffectMeta(\"点字小隶书\", True, \"7311914134109426203\", \"34131539\", \"adecd49c062bfd7c94790bf7ba0b16be\", [])\n    点字玄真宋           = EffectMeta(\"点字玄真宋\", True, \"7311914225767551498\", \"34131530\", \"eb6a86ba326391dc111882da9659f355\", [])\n    点字王者风范         = EffectMeta(\"点字王者风范\", True, \"7311914033571959333\", \"34131529\", \"db641a69aa72229967d82686d5af0a0f\", [])\n    点字艺圆             = EffectMeta(\"点字艺圆\", True, \"7311914298060575283\", \"34131536\", \"0cc2de74fd8ed8a72a0c0cbf3bb9b5ff\", [])\n    点字青花楷           = EffectMeta(\"点字青花楷\", True, \"7311913734081876506\", \"34131534\", \"8de5c66831c1c08a3a0db17abffdc090\", [])\n    点字青花隶           = EffectMeta(\"点字青花隶\", True, \"7311913858942112306\", \"34131535\", \"1c21f23c85ea5473322cfb2b856c686b\", [])\n    烟客体               = EffectMeta(\"烟客体\", True, \"7290457082921226811\", \"26003138\", \"b6c9e51a0caeda7546833874c4f6d3f4\", [])\n    爱你是无解命题       = EffectMeta(\"爱你是无解命题\", True, \"7311911945655816730\", \"34131537\", \"4d2d4673e42ced2e43c6e6d5d4a3d5d6\", [])\n    爱民小楷             = EffectMeta(\"爱民小楷\", True, \"7423616268760011314\", \"85757851\", \"e1e9bb52f3cc75124b4e668bbbeed5ab\", [])\n    玄鸟体               = EffectMeta(\"玄鸟体\", True, \"7290456889668670013\", \"26003129\", \"aa8b1188f865f250cce24a09f0105af8\", [])\n    知新体               = EffectMeta(\"知新体\", True, \"7423616268952932902\", \"85757852\", \"ab6662733ccf500d7de099211e31423c\", [])\n    章鱼小丸子           = EffectMeta(\"章鱼小丸子\", True, \"7423616269254922762\", \"85757850\", \"96c278e361b5bf39d0e75f50b299bf1d\", [])\n    竹言体               = EffectMeta(\"竹言体\", True, \"7423616269850513947\", \"85757835\", \"abf26da51a47d5dc399680cc09253f62\", [])\n    花锦体               = EffectMeta(\"花锦体\", True, \"7290455460186952251\", \"26003144\", \"202627efd4e86fcac13b028297319013\", [])\n    莫雪体               = EffectMeta(\"莫雪体\", True, \"7290456347177390629\", \"26003143\", \"e6df6d9922211e1b9cd907930569a320\", [])\n    蕴行体               = EffectMeta(\"蕴行体\", True, \"7441547528878690867\", \"93697435\", \"22d3f23e85385f5c62e0534ea30f9d59\", [])\n    造字侠今朝醉简       = EffectMeta(\"造字侠今朝醉简\", True, \"7316824086712160806\", \"36880876\", \"2b98cf117f555d4789b65c865d9f5f9a\", [])\n    造字侠寻味江湖简     = EffectMeta(\"造字侠寻味江湖简\", True, \"7316824437930594867\", \"36880883\", \"8335b615c4eb7b246b7aa564899c368d\", [])\n    造字侠昊仔简繁       = EffectMeta(\"造字侠昊仔简繁\", True, \"7316823873930924582\", \"36880885\", \"60e524ded7b66c88a3bf39f2a4adb898\", [])\n    造字侠永刚漆书简繁   = EffectMeta(\"造字侠永刚漆书简繁\", True, \"7316824945592373770\", \"36880882\", \"1ddb9f64db159a46fccaa243917e9bfc\", [])\n    造字侠陈坤风行简繁   = EffectMeta(\"造字侠陈坤风行简繁\", True, \"7316823545399480841\", \"36880887\", \"c266c8a01c258c85c5f7d022300015e0\", [])\n    锋舞九天             = EffectMeta(\"锋舞九天\", True, \"7423616268764205595\", \"85757854\", \"456729f9a73f699c04d708ee6c69fdc2\", [])\n    阳华体               = EffectMeta(\"阳华体\", True, \"7290457161887388219\", \"26003127\", \"6ec8135c696317264510d2725a6fc83a\", [])\n    阳煦体               = EffectMeta(\"阳煦体\", True, \"7290457267030200869\", \"26003130\", \"4622bd24edf2f817730e108e625b6e05\", [])\n    雅月体               = EffectMeta(\"雅月体\", True, \"7423616268764189234\", \"85757855\", \"0f70f20df8d9be821e294a862be67304\", [])\n    雅韵体               = EffectMeta(\"雅韵体\", True, \"7290456990571041340\", \"26003135\", \"99ceebeec763fb4f3a1a59e226b1cf22\", [])\n    青印体               = EffectMeta(\"青印体\", True, \"7290456429276697149\", \"26003149\", \"8ed939d6940890e3d4f77dff0091a52e\", [])\n    青春加糖体           = EffectMeta(\"青春加糖体\", True, \"7441547528874496538\", \"93697434\", \"50a5e54e72193f99e46ccbc2b594199b\", [])\n    青禾体               = EffectMeta(\"青禾体\", True, \"7423616269275894310\", \"85757846\", \"ab3917e6d6b6e57bdbdbdb9d052109f9\", [])\n    青鸟华光中长宋       = EffectMeta(\"青鸟华光中长宋\", True, \"7410326723805319706\", \"81332681\", \"e4d44cca5db89d96f63fd943ae948a32\", [])\n    青鸟华光书宋2        = EffectMeta(\"青鸟华光书宋2\", True, \"7410326723780153893\", \"81332684\", \"6850473b134099c8049bd646c990fe44\", [])\n    青鸟华光仿宋2        = EffectMeta(\"青鸟华光仿宋2\", True, \"7410326723327185435\", \"81332685\", \"96b32125bb5d11e8fe83565b5dc917fe\", [])\n    青鸟华光大标宋       = EffectMeta(\"青鸟华光大标宋\", True, \"7410326723322974746\", \"81332679\", \"8be414a44e65338d012f2b5493fbc005\", [])\n    青鸟华光报宋2        = EffectMeta(\"青鸟华光报宋2\", True, \"7410326723314586149\", \"81332677\", \"9f5b177fb5cc6863c9827d31945a068d\", [])\n    青鸟华光标题黑       = EffectMeta(\"青鸟华光标题黑\", True, \"7410326723318780467\", \"81332682\", \"3642da89ae583761117498dad3edff0b\", [])\n    青鸟华光楷体2        = EffectMeta(\"青鸟华光楷体2\", True, \"7410326723318780453\", \"81332676\", \"b2f9d6b81eff2e0e2eaef0f3a46890fd\", [])\n    青鸟华光粗黑         = EffectMeta(\"青鸟华光粗黑\", True, \"7410326723327169051\", \"81332680\", \"ae6c97d96b918637b249f559c665638f\", [])\n    青鸟华光细黑         = EffectMeta(\"青鸟华光细黑\", True, \"7410326723792736795\", \"81332678\", \"54e6e6a69da14b6a9a4a01e2bc3ba4fb\", [])\n    青鸟华光细黑1        = EffectMeta(\"青鸟华光细黑1\", True, \"7410326723796931109\", \"81332673\", \"1f764c651b8202f7dadc74fdefc92308\", [])\n    青鸟华光美黑         = EffectMeta(\"青鸟华光美黑\", True, \"7410326723327169034\", \"81332683\", \"184e84f286db37d6ea31502521740644\", [])\n    青鸟华光黑体         = EffectMeta(\"青鸟华光黑体\", True, \"7410326723331363337\", \"81332674\", \"ede3bbcf8e6eeb9149395e1117062c7e\", [])\n    青鸟华光黑变         = EffectMeta(\"青鸟华光黑变\", True, \"7410326723322991154\", \"81332672\", \"6ca836ce90531a01adfd2909d6d119e3\", [])\n    飞鸟集               = EffectMeta(\"飞鸟集\", True, \"7130643143719916069\", \"4010301\", \"1be94b984920e8ddd125b5c868521448\", [])\n    高字标志圆           = EffectMeta(\"高字标志圆\", True, \"7312720780599497225\", \"34549540\", \"b063783985f84f53748319de1532b926\", [])\n    鱼太闲躺平体         = EffectMeta(\"鱼太闲躺平体\", True, \"7312720611694875162\", \"34549531\", \"928979b4f0c9ba5ac430fc2990d0ea9d\", [])\n    鸣翠体               = EffectMeta(\"鸣翠体\", True, \"7290456267212984889\", \"26003148\", \"7028cfb924701fbb8112cab5ce2ccccd\", [])\n    鹿鸣体               = EffectMeta(\"鹿鸣体\", True, \"7290456058328257084\", \"26003141\", \"77a62272e2ded59547b213c20adec6ef\", [])\n    黑糖体               = EffectMeta(\"黑糖体\", True, \"7070430083919385119\", \"1600490\", \"c79b375905670f3012ae371583680109\", [])\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/mask_meta.py",
    "content": "\"\"\"视频蒙版元数据\"\"\"\n\nfrom .effect_meta import EffectEnum, MaskMeta\n\nclass MaskType(EffectEnum):\n    \"\"\"蒙版类型\"\"\"\n\n    线性 = MaskMeta(\"线性\", \"line\", \"6791652175668843016\", \"636071\", \"1f467b8b9bb94cecc46d916219b7940a\", 1.0)\n    \"\"\"默认遮挡下方部分\"\"\"\n    镜面 = MaskMeta(\"镜面\", \"mirror\", \"6791699060140020232\", \"636073\", \"b2c0516d1f737f4542fb9b2862907817\", 1.0)\n    \"\"\"默认保留两线之间部分\"\"\"\n    圆形 = MaskMeta(\"圆形\", \"circle\", \"6791700663249146381\", \"636075\", \"9a55eae0e99ee6d1ecbc6defaf0501ec\", 1.0)\n    矩形 = MaskMeta(\"矩形\", \"rectangle\", \"6791700809454195207\", \"636077\", \"ef361d96c456cd6077c76d737f98898d\", 1.0)\n    爱心 = MaskMeta(\"爱心\", \"geometric_shape\", \"6794051276482023949\", \"636079\", \"0bf09fa1e3a32464fed4f71e49a8ab01\", 1.115)\n    星形 = MaskMeta(\"星形\", \"geometric_shape\", \"6794051169434997255\", \"636081\", \"155612dee601d3f5422a3fbeabc7610c\", 1.05)\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/mix_mode_meta.py",
    "content": "\"\"\"混合模式元数据\"\"\"\n\nfrom .effect_meta import EffectEnum, EffectMeta\n\nclass MixModeType(EffectEnum):\n    \"\"\"混合模式类型\"\"\"\n\n    正片叠底 = EffectMeta(\"正片叠底\", False, \"6758325895519277582\", \"871333\", \"8001e07eefc5d8b69572b977ca14bef9\", [])\n    颜色减淡 = EffectMeta(\"颜色减淡\", False, \"6758325800031752712\", \"871334\", \"f979dd10def50fad3ffb77c7f0df3db7\", [])\n    颜色加深 = EffectMeta(\"颜色加深\", False, \"6758325724848853518\", \"871335\", \"b76087cda4833f553cf09e82fb81c463\", [])\n    线性加深 = EffectMeta(\"线性加深\", False, \"6758325619253056013\", \"871336\", \"655f3590dd07ece41209fb312348ffe9\", [])\n    柔光 = EffectMeta(\"柔光\", False, \"6758325439212556814\", \"871337\", \"042aa15b71b1e17bca0bd928eec6fba7\", [])\n    强光 = EffectMeta(\"强光\", False, \"6758325264670790152\", \"871338\", \"840ca85a1a33e6fc3ea78bbdb2db8f60\", [])\n    滤色 = EffectMeta(\"滤色\", False, \"6758325170760323597\", \"871339\", \"d9c1d4ca7ab91df4f48d12b339f2da88\", [])\n    叠加 = EffectMeta(\"叠加\", False, \"6758324989931295240\", \"871340\", \"e6a48579910dfe831ba53a6acc6737f9\", [])\n    变亮 = EffectMeta(\"变亮\", False, \"6758324919789949453\", \"871341\", \"b0e90c43dc266a317b05b0cd3ca5bfba\", [])\n    变暗 = EffectMeta(\"变暗\", False, \"6758324839670354445\", \"871342\", \"420c92a2b480dc8e402d9269a5f83515\", [])\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/speech_to_song.py",
    "content": "from .effect_meta import EffectEnum\nfrom .effect_meta import EffectMeta\n\nclass SpeechToSongType(EffectEnum):\n    \"\"\"剪映自带的音频“声音成曲”效果类型, 此类效果目前不能自动被剪映所识别\"\"\"\n\n    Lofi        = EffectMeta(\"Lofi\", False, \"7252917861948068410\", \"17345060\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    民谣        = EffectMeta(\"民谣\", False, \"7251868698170888759\", \"17046923\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    嘻哈        = EffectMeta(\"嘻哈\", True, \"7252918249036190245\", \"17344948\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    爵士        = EffectMeta(\"爵士\", True, \"7264413578860433978\", \"20120940\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    节奏蓝调    = EffectMeta(\"节奏蓝调\", True, \"7252918101958726200\", \"17345046\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    雷鬼        = EffectMeta(\"雷鬼\", True, \"7264413386962637368\", \"20120864\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/text_intro.py",
    "content": "\"\"\"文字入场动画元数据\"\"\"\n\nfrom .effect_meta import EffectEnum, AnimationMeta\n\nclass TextIntro(EffectEnum):\n    \"\"\"文字入场动画, 默认时长为0.5秒\"\"\"\n\n    # 免费特效\n    冲屏位移             = AnimationMeta(\"冲屏位移\", False, 0.500, \"7078181271393800711\", \"1643884\", \"fd73ffc26a3f02fa6d957a94b590623a\")\n    卡拉OK               = AnimationMeta(\"卡拉OK\", False, 0.500, \"6771294855785091588\", \"1558840\", \"46c913b531dcc84e23a2f56003d1daef\")\n    变色输入             = AnimationMeta(\"变色输入\", False, 0.800, \"7397306443147252233\", \"77035159\", \"e0e29d6ea015f0d1d38b4a852a1b6202\")\n    右上弹入             = AnimationMeta(\"右上弹入\", False, 0.500, \"7074854080388010532\", \"1621978\", \"932ea0a91ca337bc1fd566aa17cb9aa7\")\n    右下擦开             = AnimationMeta(\"右下擦开\", False, 0.500, \"7088576340361744903\", \"1715294\", \"70a3ffbff2b02ede796ee38d95b38db2\")\n    向上擦除             = AnimationMeta(\"向上擦除\", False, 0.500, \"6774625910067827212\", \"1644272\", \"ee74a3a8afb2167f4403dee957338afe\")\n    向上滑动             = AnimationMeta(\"向上滑动\", False, 0.500, \"6763470111253729803\", \"1644267\", \"22030c473076074288fd01b17d1c6174\")\n    向上翻转             = AnimationMeta(\"向上翻转\", False, 0.500, \"7194703971498332727\", \"8945307\", \"0cf2050093a2bbe736ab4b2ee9002dcf\")\n    向上重叠             = AnimationMeta(\"向上重叠\", False, 0.500, \"7077500533040222756\", \"1639676\", \"b3ea1be4937b7cd032f1775d98b1f06e\")\n    向上露出             = AnimationMeta(\"向上露出\", False, 0.500, \"7163514358935327268\", \"5925717\", \"3786ff3fcc9795eead5fd5629ff7e4e9\")\n    向下擦除             = AnimationMeta(\"向下擦除\", False, 0.500, \"6774626192990409224\", \"1644273\", \"bfe1add2d59ee32449a979257d4a3448\")\n    向下滑动             = AnimationMeta(\"向下滑动\", False, 0.500, \"6724921985282871816\", \"1644268\", \"f5506a1b5ebcf9d0636d7809bf3cb81a\")\n    向下露出             = AnimationMeta(\"向下露出\", False, 0.500, \"7163514502128865823\", \"5925716\", \"a7b05a11c6bdc7010cc4dc7f1d276407\")\n    向下飞入             = AnimationMeta(\"向下飞入\", False, 0.500, \"7088942186561016356\", \"1719670\", \"4ee5a7a4d9ab7bbd7dd2ad4d8b80db78\")\n    向右擦除             = AnimationMeta(\"向右擦除\", False, 0.500, \"6771288500240126478\", \"1644271\", \"b4a5ba027822ca3e1c9d83d2f5a58a08\")\n    向右滑动             = AnimationMeta(\"向右滑动\", False, 0.500, \"6724920136056181256\", \"1644266\", \"fa1d0bc4290f058d0175ee4b4fb5501f\")\n    向右缓入             = AnimationMeta(\"向右缓入\", False, 0.500, \"7043778124760224292\", \"1488722\", \"2d751bb706b38a030ab7eb3382b2d248\")\n    向右集合             = AnimationMeta(\"向右集合\", False, 0.500, \"7081206983461704199\", \"1661186\", \"5a78f1024ecdc9a6b69220eac58a0963\")\n    向右露出             = AnimationMeta(\"向右露出\", False, 0.500, \"7163514730525495839\", \"5925714\", \"6f8e0a5cd98c44b79f9ec09b0b913059\")\n    向左擦除             = AnimationMeta(\"向左擦除\", False, 0.500, \"6774626830038077960\", \"1644270\", \"4db856992dc60d1220664165d4130042\")\n    向左滑动             = AnimationMeta(\"向左滑动\", False, 0.500, \"6763470195894784525\", \"1644277\", \"13c954ed3bc583f87e9f79a2325b8e84\")\n    向左露出             = AnimationMeta(\"向左露出\", False, 0.500, \"7163514612690719269\", \"5925715\", \"b4119cf3405c71bc556e1c5562e22d01\")\n    圆形扫描             = AnimationMeta(\"圆形扫描\", False, 0.500, \"6840689010034086407\", \"1644280\", \"ac77daf80de65a4beb1164ce44c500c5\")\n    复古打字机           = AnimationMeta(\"复古打字机\", False, 0.800, \"7253888335163167291\", \"17639720\", \"a69db3276f15fa2affcd98f2236c873d\")\n    居中打字             = AnimationMeta(\"居中打字\", False, 0.500, \"7265222187286532667\", \"20303987\", \"40f484d3b77321b38d53b30d94c2dce1\")\n    左上弹入             = AnimationMeta(\"左上弹入\", False, 0.500, \"7078586233030447629\", \"1646760\", \"6467514ec2a8740953d29c3915364a31\")\n    左移弹动             = AnimationMeta(\"左移弹动\", False, 1.000, \"7313890082040058406\", \"35176342\", \"c21d4019453137cd76e0d847d5d8af96\")\n    开幕                 = AnimationMeta(\"开幕\", False, 0.500, \"6835571502050447879\", \"1644279\", \"c26a12a1cacc6b85f8439a0bc600335d\")\n    弹入                 = AnimationMeta(\"弹入\", False, 0.500, \"6887482184844710413\", \"1644313\", \"0533e3aeb2cda562cdd8a86693815443\")\n    弹弓                 = AnimationMeta(\"弹弓\", False, 0.500, \"6862897343176380942\", \"1644305\", \"f9300b314e5bd7df573063b15a1ab081\")\n    弹性伸缩             = AnimationMeta(\"弹性伸缩\", False, 0.500, \"6872642189260755463\", \"1644311\", \"7d23b7a68a1bf21c7692a35ffa6ddcdc\")\n    弹簧                 = AnimationMeta(\"弹簧\", False, 0.500, \"6884154692398486023\", \"1644312\", \"34d74f1bf451dac1a23158380a5be322\")\n    彩色映射             = AnimationMeta(\"彩色映射\", False, 0.500, \"7039655272222036516\", \"1476514\", \"46f37098540b9250abdad9bb1282ec83\")\n    打字机_I             = AnimationMeta(\"打字机 I\", False, 0.500, \"6724920249654710791\", \"1644275\", \"7c7cfe92aa22a8e131c94d20f44e97df\")\n    打字机_II            = AnimationMeta(\"打字机 II\", False, 0.500, \"6724920636403094028\", \"1644276\", \"1c500e93b3b8bdee3cbe1095db5d01ff\")\n    打字机_III           = AnimationMeta(\"打字机 III\", False, 0.500, \"6724920521462387207\", \"1644335\", \"1b21dfb54b0ccd50e50f383f01d0a193\")\n    打字机IV             = AnimationMeta(\"打字机IV\", False, 2.000, \"7237409385092223525\", \"14235879\", \"6828d67634e66ace1e76c4eb7cc2f8e6\")\n    扭曲模糊             = AnimationMeta(\"扭曲模糊\", False, 0.500, \"7089261793406620197\", \"1722114\", \"40a9fd02e81930bc0289aeb692c382f6\")\n    拖尾                 = AnimationMeta(\"拖尾\", False, 0.500, \"7244102915239973432\", \"15259479\", \"5d0dbb4e66c3261576b47f8766e3eb14\")\n    收拢                 = AnimationMeta(\"收拢\", False, 0.500, \"6779879712261935619\", \"1644261\", \"b173da2fb68d5f8e7dbb2cc000a50bdd\")\n    放大                 = AnimationMeta(\"放大\", False, 0.500, \"6724919499042066958\", \"1644264\", \"cf0f072aa31d3884ba90362af063f55a\")\n    故障打字机           = AnimationMeta(\"故障打字机\", False, 0.500, \"6870061463243854350\", \"1644308\", \"b4536942105b69e637dabef4c3ebfc6d\")\n    旋入                 = AnimationMeta(\"旋入\", False, 0.500, \"6763873859402732039\", \"1644265\", \"dc3a54158c51f45a0033a16f5763e047\")\n    日出                 = AnimationMeta(\"日出\", False, 0.500, \"6779084126457696776\", \"1644269\", \"9e39257e0d8b60598d1c09bb31fbc62a\")\n    晕开                 = AnimationMeta(\"晕开\", False, 0.500, \"7088531060341871141\", \"1714696\", \"2f7aebf0f525ef21f8b00070c17d2fc2\")\n    模糊                 = AnimationMeta(\"模糊\", False, 0.500, \"6923094735116571150\", \"1644338\", \"0e57ec99758f1e12636a73c6ec4fb6f5\")\n    水墨晕开             = AnimationMeta(\"水墨晕开\", False, 1.200, \"7278295995362841145\", \"22734325\", \"5c970b17e18e3441b917a7bcba4d043b\")\n    水平翻转             = AnimationMeta(\"水平翻转\", False, 0.500, \"7051512227353858590\", \"1644340\", \"9403a81925b4886589f745130a67cb05\")\n    波浪弹入             = AnimationMeta(\"波浪弹入\", False, 0.500, \"6917178744775905806\", \"1644316\", \"301272b44278c3b5ebe228e8baa8d984\")\n    渐显                 = AnimationMeta(\"渐显\", False, 0.500, \"6724916044072227332\", \"1644304\", \"40859aa05ff9f3e3a3f0de7bfead1c42\")\n    溶解                 = AnimationMeta(\"溶解\", False, 0.500, \"6872642398095151629\", \"1644310\", \"b126b2989904ce12e8889a58df8447fc\")\n    滑动上升             = AnimationMeta(\"滑动上升\", False, 1.500, \"7275687883011265083\", \"22226771\", \"9ab223e5e9a0b9611b04062048173de9\")\n    生长                 = AnimationMeta(\"生长\", False, 0.500, \"6869302248103481869\", \"1644307\", \"b0f76f716f571ecde209056995e96978\")\n    甩出                 = AnimationMeta(\"甩出\", False, 0.900, \"7244102679851438650\", \"15261071\", \"97162e8faa56cf163b8f2c1bfd5ad6e0\")\n    站起                 = AnimationMeta(\"站起\", False, 0.800, \"7265288917279052344\", \"20324364\", \"6f322d7bb7fe6b443197c2bf5d64dd8b\")\n    缩小                 = AnimationMeta(\"缩小\", False, 0.500, \"6724921217721045515\", \"1644263\", \"0b58ad7d0d7cc93080e7bedfd0caa222\")\n    缩小_II              = AnimationMeta(\"缩小 II\", False, 0.500, \"7041836555903701540\", \"1644341\", \"ae803da2a5d2292e0f8be3c8ab3b3788\")\n    羽化向右擦开         = AnimationMeta(\"羽化向右擦开\", False, 0.500, \"6897084405781631496\", \"1644314\", \"d330712b8f96ce33d450489ea6e459a3\")\n    羽化向左擦开         = AnimationMeta(\"羽化向左擦开\", False, 0.500, \"6897084292908716557\", \"1644315\", \"a4eefe0afe41cd05acd1beb3d2615b23\")\n    翻动                 = AnimationMeta(\"翻动\", False, 1.000, \"7308278898330964489\", \"32283659\", \"ba570ec241b336204d882fe35f128d5d\")\n    轻微放大             = AnimationMeta(\"轻微放大\", False, 0.500, \"6763469998330483213\", \"1644262\", \"6f5ec0bb82bfd24a72706e2006c0e806\")\n    逐字旋转             = AnimationMeta(\"逐字旋转\", False, 0.500, \"7111643562676064805\", \"3114660\", \"17a78b3b5c193a3e30431946a8cbd696\")\n    逐字显影             = AnimationMeta(\"逐字显影\", False, 0.500, \"7038882772450021896\", \"1644339\", \"2f250516dcea1a591656dabc9c40684f\")\n    逐字翻转             = AnimationMeta(\"逐字翻转\", False, 0.500, \"7112241904216969765\", \"3138860\", \"cdf2df541dea807f4bcb29ede73dd766\")\n    闪动                 = AnimationMeta(\"闪动\", False, 0.500, \"7035902226602136071\", \"1644322\", \"8a1581c846a5933e8a90204219504892\")\n    随机弹跳             = AnimationMeta(\"随机弹跳\", False, 0.500, \"7021831463867781662\", \"1644321\", \"d49f117c117e7d6b4dcb53bbe9b5ed4a\")\n    随机飞入             = AnimationMeta(\"随机飞入\", False, 0.500, \"6872642542765085191\", \"1644309\", \"d9ad3796df2b0881ea144f8dfa44e0b1\")\n\n    # 付费特效\n    乱码故障             = AnimationMeta(\"乱码故障\", True, 1.000, \"7325648367747338802\", \"40877554\", \"00b40103690bfb45e0125592b6ec0f5c\")\n    二段缩放             = AnimationMeta(\"二段缩放\", True, 0.900, \"7238519092997526074\", \"14394713\", \"a4cba6840c1bf92bc73bb1bcacf7b76e\")\n    便利贴               = AnimationMeta(\"便利贴\", True, 0.800, \"7307207886843679283\", \"31819229\", \"4e9265ea4703be87feaf640d79b23f7c\")\n    倒数                 = AnimationMeta(\"倒数\", True, 1.800, \"7314303157360661018\", \"35401566\", \"814df0b29746943fe165ae9b16719cc2\")\n    兔子弹跳             = AnimationMeta(\"兔子弹跳\", True, 0.500, \"7187785892382118461\", \"8398145\", \"5d157129853f479ea15f75075c1ef070\")\n    冰雪飘动             = AnimationMeta(\"冰雪飘动\", True, 1.500, \"7314291622525538843\", \"35395178\", \"6e3e4d697d85de5b23b3f243a35b7f26\")\n    发光模糊             = AnimationMeta(\"发光模糊\", True, 0.500, \"7054482687297327630\", \"1644342\", \"ba83061e43e95969f5a19cfa236120b7\")\n    发光闪入             = AnimationMeta(\"发光闪入\", True, 1.800, \"7308272157442707978\", \"32278776\", \"c30f989a97cddbdc64e43ba96d901b71\")\n    叠影并入             = AnimationMeta(\"叠影并入\", True, 1.000, \"7259634012774208059\", \"19101418\", \"8358578022cd14c6232a99ddee035824\")\n    向上弹入             = AnimationMeta(\"向上弹入\", True, 0.500, \"7123116334677758501\", \"3704299\", \"28d9145ead32c23742082a37e511370e\")\n    向下溶解             = AnimationMeta(\"向下溶解\", True, 0.500, \"7028458557058060831\", \"1644318\", \"09fde2de891d18c74949e025bc0dca07\")\n    向右模糊_II          = AnimationMeta(\"向右模糊 II\", True, 0.500, \"7254503374622560828\", \"17830700\", \"6b3c54ef781f16f20204d766b799abec\")\n    向左模糊             = AnimationMeta(\"向左模糊\", True, 0.500, \"7112368349257929230\", \"3147126\", \"f99acc8cc6b3fcd2b4ea661670c4c048\")\n    吸入                 = AnimationMeta(\"吸入\", True, 0.300, \"7120438380453696031\", \"3576973\", \"42a0c7e42275986d92a2d3bbe55dd816\")\n    呐喊声波             = AnimationMeta(\"呐喊声波\", True, 0.500, \"7199943069385364005\", \"9432429\", \"6f5992c1f47cac9d33468c5e60725d0b\")\n    喷绘                 = AnimationMeta(\"喷绘\", True, 0.500, \"7120131223036367367\", \"3563651\", \"77633d8638e177488dcce84086018c8a\")\n    圆柱体滚动           = AnimationMeta(\"圆柱体滚动\", True, 1.200, \"7179035729043919397\", \"7548913\", \"7ce47010b9b736d12d264cf73f6c294e\")\n    圣诞帽弹跳           = AnimationMeta(\"圣诞帽弹跳\", True, 0.500, \"7169419861158793759\", \"6492065\", \"e5de917f45c938a685b73a9e0bb464e1\")\n    圣诞树弹跳II         = AnimationMeta(\"圣诞树弹跳II\", True, 0.500, \"7174706243267727930\", \"7080877\", \"c9be0fbb72056234cdc5f8e082f32c40\")\n    弹入跳动             = AnimationMeta(\"弹入跳动\", True, 0.500, \"7184797276181631546\", \"8058189\", \"7a2b94056fe6c1cba19e27a986cdcb64\")\n    弹性伸缩_II          = AnimationMeta(\"弹性伸缩 II\", True, 0.500, \"7308272646913790490\", \"32279178\", \"9b0bdc149bbc541e93cddaf94b1dcaa0\")\n    心动瞬间             = AnimationMeta(\"心动瞬间\", True, 1.650, \"7332519885999706663\", \"44271866\", \"2438d9132c7b04552762ae54066f7d94\")\n    慢速放大             = AnimationMeta(\"慢速放大\", True, 60.000, \"7205177922280231479\", \"10063675\", \"33d85f938bd55928fa16bede8cf7a26b\")\n    打字光标             = AnimationMeta(\"打字光标\", True, 2.000, \"7237411357514011192\", \"14235878\", \"12196518b89652860631d196d19b6f45\")\n    抖动甩入             = AnimationMeta(\"抖动甩入\", True, 0.500, \"7301945752278798885\", \"29825712\", \"8e49d8dde0112aaf071d41e8a56527e1\")\n    折叠                 = AnimationMeta(\"折叠\", True, 0.500, \"7125298122011447816\", \"3779439\", \"9f65c45595fa8c0002f7f49a61637ff2\")\n    描边填充             = AnimationMeta(\"描边填充\", True, 0.900, \"7308269965453300262\", \"32278219\", \"cb8300f18fdf8b9aab7c1eacd33e92c9\")\n    放大震动             = AnimationMeta(\"放大震动\", True, 0.500, \"7267849370727354936\", \"20801300\", \"e6f8542e114dcb8b7aea821b1c954941\")\n    故障闪动             = AnimationMeta(\"故障闪动\", True, 2.000, \"7244101806710592057\", \"15261571\", \"f0c64727504b3975b4656ee2b10760fb\")\n    新年打字机           = AnimationMeta(\"新年打字机\", True, 1.000, \"7272754730684650045\", \"21711818\", \"a5aa35ae2b69f85c944074dfeadd6c89\")\n    旋转缩放             = AnimationMeta(\"旋转缩放\", True, 1.600, \"7243633588493619773\", \"15140845\", \"cef0ccebe3406f4c53b64f39825b7bfa\")\n    旋转飞入             = AnimationMeta(\"旋转飞入\", True, 0.500, \"6775803763652301326\", \"1644274\", \"21984d5e90731f925fc58a59fef355ee\")\n    星光闪闪             = AnimationMeta(\"星光闪闪\", True, 1.500, \"7309036302962266675\", \"32665781\", \"269e1b23d766c0a3c5c9f792dedfd1a9\")\n    星光闪闪_II          = AnimationMeta(\"星光闪闪 II\", True, 1.000, \"7319873264375829001\", \"38428077\", \"8cddcc9ff610948afbd705259cec8fa9\")\n    星星弹跳             = AnimationMeta(\"星星弹跳\", True, 1.100, \"7307189517562155547\", \"31799385\", \"e5a1520dee5dd3700da60c62743111e4\")\n    模糊发光             = AnimationMeta(\"模糊发光\", True, 1.800, \"7301535952101446170\", \"29690460\", \"ea9d91ad5b58f1f9a1e95264f77e9a15\")\n    模糊滚动             = AnimationMeta(\"模糊滚动\", True, 0.800, \"7264501462187643450\", \"20154968\", \"3eaa7038a9148548a6b2cc6673f77944\")\n    模糊缩小             = AnimationMeta(\"模糊缩小\", True, 1.500, \"7294147761765618186\", \"27144470\", \"7226ef3bab9d89a32e8becb2dcc5faac\")\n    汇聚                 = AnimationMeta(\"汇聚\", True, 0.500, \"6986931575199896094\", \"5529369\", \"2774ee332a759084eaa558bad0cb3a44\")\n    波浪弹跳             = AnimationMeta(\"波浪弹跳\", True, 1.000, \"7317536986691015218\", \"37303562\", \"e5b79c83b4a12edb15d2389a83c51476\")\n    流光扩散             = AnimationMeta(\"流光扩散\", True, 2.000, \"7314566361642963493\", \"35505526\", \"ee3e3d741c85017b94b5f2139edb7177\")\n    滚入                 = AnimationMeta(\"滚入\", True, 0.500, \"7026674824537707038\", \"1644320\", \"d631585b87e866b31fe20fa8d578b7cd\")\n    激光雕刻             = AnimationMeta(\"激光雕刻\", True, 3.000, \"7244102612700631589\", \"15261101\", \"affa14b4f89ceb4dd01a69a24b42651f\")\n    爱心弹跳             = AnimationMeta(\"爱心弹跳\", True, 0.500, \"6845191009861636616\", \"1644337\", \"711434e690c1a1d7ebca4f13b1712f85\")\n    玩雪                 = AnimationMeta(\"玩雪\", True, 60.000, \"7304943429962699290\", \"30904546\", \"501ea62f0702ab65569aa0e923bd8182\")\n    环绕滑入             = AnimationMeta(\"环绕滑入\", True, 1.000, \"7261858654561767973\", \"19562189\", \"672aae4e963ac36d9b898cb32c964995\")\n    生长_II              = AnimationMeta(\"生长 II\", True, 0.800, \"7210312869282320933\", \"10659499\", \"562300bfab6b00c4853118b058f429a2\")\n    电光                 = AnimationMeta(\"电光\", True, 1.500, \"7296051582246851109\", \"27769111\", \"5fbc2c019454b3420c8e8c6c0a42dad5\")\n    电光_II              = AnimationMeta(\"电光 II\", True, 1.000, \"7299364098788037171\", \"28928614\", \"8c30a310e9ce5bf2b7b5a324c9426b7c\")\n    碰碰车               = AnimationMeta(\"碰碰车\", True, 0.600, \"7338602211041088027\", \"47157536\", \"ce6822887e702ad1a4b762e267148e38\")\n    空翻                 = AnimationMeta(\"空翻\", True, 0.500, \"6865175746420150792\", \"1644306\", \"c16d544824d736ad0be1a5e109aafc04\")\n    缤纷冲屏             = AnimationMeta(\"缤纷冲屏\", True, 2.000, \"7116829842271638053\", \"3894473\", \"f6b8859c215e255b61f70cdbcc239b98\")\n    缩放_III             = AnimationMeta(\"缩放 III\", True, 1.600, \"7211036012401660473\", \"10743073\", \"d625a4ef458b7e8c5928cdf04ab952ac\")\n    翻页II               = AnimationMeta(\"翻页II\", True, 1.200, \"7170343439832191519\", \"6599721\", \"69d372ee41a3c968e0a7b55382eb23ff\")\n    背景滑入             = AnimationMeta(\"背景滑入\", True, 1.500, \"7306794354255860250\", \"31601883\", \"69c170b50c062f8106c01b37682fe19f\")\n    色散拖影             = AnimationMeta(\"色散拖影\", True, 1.100, \"7340513927651922458\", \"48159236\", \"422b57c27cfd659d0756303189e11599\")\n    螺旋上升             = AnimationMeta(\"螺旋上升\", True, 0.500, \"6799873891352187406\", \"1644278\", \"d3e255df67130866e0d2de42a703637c\")\n    跃进                 = AnimationMeta(\"跃进\", True, 1.200, \"7220685840442200634\", \"11996999\", \"40bdc1263417f53c712c54cb32438008\")\n    跳跳捣蛋鬼           = AnimationMeta(\"跳跳捣蛋鬼\", True, 1.800, \"7200340219109839419\", \"9503089\", \"897a0c194e07ace6813a2eba797ac22f\")\n    跳跳糖               = AnimationMeta(\"跳跳糖\", True, 1.267, \"7329815894933115432\", \"42866461\", \"c8ecf2f107002df92dcefec6ea988843\")\n    辉光                 = AnimationMeta(\"辉光\", True, 1.000, \"7258179345192063525\", \"18786330\", \"5bf3d95b86ac00f59c51dd3822d2b569\")\n    辉光扫描             = AnimationMeta(\"辉光扫描\", True, 1.800, \"7316878401590006323\", \"36927710\", \"f9a2c9ae931b916a81f204a1b9c31f7c\")\n    逐字弹跳             = AnimationMeta(\"逐字弹跳\", True, 0.500, \"7197615431673188921\", \"9195301\", \"52b151b0021d9fa91a42e65c2a392517\")\n    逐字旋入             = AnimationMeta(\"逐字旋入\", True, 1.500, \"7229520427196879421\", \"13137035\", \"9838c6772ddbd48126f30baf74200f99\")\n    金粉飘落             = AnimationMeta(\"金粉飘落\", True, 2.000, \"7330561002922054196\", \"43242964\", \"2add1c3882b2aaab841070f7bfd5ae66\")\n    镂空跳入             = AnimationMeta(\"镂空跳入\", True, 1.200, \"7311620091060163082\", \"33984693\", \"cb98c7b01005954ba9cc4bc78a4c59a7\")\n    闪烁集合             = AnimationMeta(\"闪烁集合\", True, 1.500, \"7267886380439573029\", \"20805754\", \"6d86be731c4d735a5e612a45b0c8631a\")\n    随机上升             = AnimationMeta(\"随机上升\", True, 1.500, \"7233662263805088314\", \"13720553\", \"98142c53838b5a382f79cc2d89e30c04\")\n    随机弹跳_II          = AnimationMeta(\"随机弹跳 II\", True, 0.500, \"7114189305781686797\", \"3241034\", \"ff0761c602fa5ec8cc31c48ce57ea003\")\n    随机打字机           = AnimationMeta(\"随机打字机\", True, 0.500, \"6926718978064650760\", \"1644317\", \"e1f7899554d34dfa3e1e4924f82acc69\")\n    随机落下             = AnimationMeta(\"随机落下\", True, 1.200, \"7231443875406025275\", \"13416707\", \"a3aa7aa5991ef3c6a3d83a2e1fc6b748\")\n    随机集合             = AnimationMeta(\"随机集合\", True, 2.500, \"7223959789175312954\", \"12416139\", \"4d1fa3b7aac9aeab107743db10372029\")\n    雪光模糊             = AnimationMeta(\"雪光模糊\", True, 1.200, \"7314614905196253705\", \"35545508\", \"cb35d22175f67f734290b48bdaf93dd6\")\n    音符弹跳             = AnimationMeta(\"音符弹跳\", True, 0.500, \"6841115718172283406\", \"1644336\", \"86c6e9061b14fd43049b6232ffc113fa\")\n    顶出                 = AnimationMeta(\"顶出\", True, 1.100, \"7268221856618910264\", \"20880936\", \"7fd6da0e6ff8a46276648dc43faa4f95\")\n    预览打字             = AnimationMeta(\"预览打字\", True, 0.800, \"7268152375536259639\", \"20853726\", \"964a6cb51a01c0ddeb839010765023a6\")\n    飞入                 = AnimationMeta(\"飞入\", True, 0.500, \"7029231035007111710\", \"1644319\", \"9980148af0641a8501561320ec8f967b\")\n    鼠标点击             = AnimationMeta(\"鼠标点击\", True, 1.650, \"7350128013637325353\", \"53149407\", \"1ba2fbaaeb30f7756ecd92e0121b7ac0\")\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/text_loop.py",
    "content": "\"\"\"文字循环动画元数据\"\"\"\n\nfrom .effect_meta import EffectEnum, AnimationMeta\n\nclass TextLoopAnim(EffectEnum):\n    \"\"\"文字循环动画\"\"\"\n\n    # 免费特效\n    VHS                  = AnimationMeta(\"VHS\", False, 2.000, \"7399879467457319463\", \"77851352\", \"f82d0f25b2cc4f0696dce7d97c7b02be\")\n    上弧                 = AnimationMeta(\"上弧\", False, 0.500, \"7075224569421763079\", \"1626238\", \"a0362ebaa2f5016487abfab05d47605b\")\n    刷屏                 = AnimationMeta(\"刷屏\", False, 0.500, \"7308280358691148315\", \"32284703\", \"e92c576feca5efb75feda14004b269c5\")\n    发光模糊多行         = AnimationMeta(\"发光模糊多行\", False, 0.800, \"7397688001356108339\", \"77132594\", \"ee68176782c8b62a207c04f4a979957a\")\n    吹泡泡               = AnimationMeta(\"吹泡泡\", False, 0.500, \"7045155566003425823\", \"1644539\", \"6db3746838af18903d01968e6af07185\")\n    吹泡泡_II            = AnimationMeta(\"吹泡泡 II\", False, 0.500, \"7052257626897256968\", \"1644528\", \"b378734fd7a0e8ec78e53987823fad79\")\n    呐喊                 = AnimationMeta(\"呐喊\", False, 0.500, \"7119024816480326157\", \"4002167\", \"04933b5e575c54cbf09c57c5e933f0ec\")\n    复古涂鸦             = AnimationMeta(\"复古涂鸦\", False, 1.000, \"7400234025392017956\", \"77997810\", \"4bc57fba68e0cce14e2ea8ab652dabc2\")\n    字体变换             = AnimationMeta(\"字体变换\", False, 0.800, \"7402185694732358170\", \"78763194\", \"06c685c00a9c1a7a484c7841ac45742a\")\n    弹幕滚动             = AnimationMeta(\"弹幕滚动\", False, 0.500, \"6790247082155315719\", \"1644518\", \"4ca7b3a27da98849561b21c9c6d964fc\")\n    彩虹                 = AnimationMeta(\"彩虹\", False, 0.500, \"6908592625406710280\", \"990096\", \"fac0ebef55c57c31b3142f5840299b03\")\n    彩虹_情人节          = AnimationMeta(\"彩虹-情人节\", False, 0.500, \"6916820108211917325\", \"1012617\", \"c45282c8e30b8639a71345769060f3d5\")\n    彩虹_新年            = AnimationMeta(\"彩虹-新年\", False, 0.500, \"6916820045519655432\", \"1012618\", \"dd9fcbbcfc17cad31ab42e886769c66e\")\n    彩虹_马卡龙          = AnimationMeta(\"彩虹-马卡龙\", False, 0.500, \"6921528300573561358\", \"1022790\", \"a614b3dd7d4b852f1a126afe4c5ee50f\")\n    扫光                 = AnimationMeta(\"扫光\", False, 0.500, \"7051843475892867598\", \"1520868\", \"0495742cdb3a26ff28dfabf7f8ef236b\")\n    投影颤抖_II          = AnimationMeta(\"投影颤抖 II\", False, 0.500, \"7070332370963927559\", \"1599696\", \"673aa54d5519360162ea8ec38986ea1c\")\n    折叠                 = AnimationMeta(\"折叠\", False, 0.500, \"7064823078542381581\", \"1567212\", \"c9b3ef10e455a3916dbef47a7f711eaa\")\n    拼贴纹理             = AnimationMeta(\"拼贴纹理\", False, 0.800, \"7399983060806013479\", \"77918388\", \"922ca4e87c7eed7e60d062c18e928bc6\")\n    描边粉笔             = AnimationMeta(\"描边粉笔\", False, 2.000, \"7399879712140431883\", \"77851433\", \"05c3c10997b885c71ed0dd64aff14dd2\")\n    摇摆                 = AnimationMeta(\"摇摆\", False, 0.500, \"6724920869363126795\", \"1644515\", \"8af4da60a802e3ca6c9fe2184fbe22d0\")\n    摇荡                 = AnimationMeta(\"摇荡\", False, 0.500, \"6840710593289130503\", \"1644523\", \"61f24344eb8bf86582d6140ad985ef14\")\n    故障闪动             = AnimationMeta(\"故障闪动\", False, 0.500, \"6857714281136263687\", \"1644524\", \"51d9ee83fbaf2dfa049885676ec2d5d9\")\n    旋转                 = AnimationMeta(\"旋转\", False, 0.500, \"6763900973946507784\", \"1644510\", \"151421d4de4d49e65b050cb413482cd5\")\n    晃动                 = AnimationMeta(\"晃动\", False, 0.500, \"6790246693674684942\", \"1644520\", \"383dabd75d7fe7985d990ebb34d63732\")\n    爆闪                 = AnimationMeta(\"爆闪\", False, 0.500, \"7308279705252139530\", \"32284413\", \"61951bd303975761bc99f187bdb8fdab\")\n    环绕                 = AnimationMeta(\"环绕\", False, 0.500, \"6980916124976157220\", \"1644542\", \"e81fcebf0885fa5d698f6ca7d027a556\")\n    翻转                 = AnimationMeta(\"翻转\", False, 0.500, \"6763897586328801805\", \"1644511\", \"e4983ce92d02628087780832ef631c7d\")\n    色差故障             = AnimationMeta(\"色差故障\", False, 0.500, \"6835878163575214605\", \"1644522\", \"e0295a9f4f19fe21692c405f7c00d1e5\")\n    蓝黄滑动             = AnimationMeta(\"蓝黄滑动\", False, 2.000, \"7398492769628459539\", \"77383265\", \"bb717e125d34532ec904d1bc01ec25da\")\n    超强晃动             = AnimationMeta(\"超强晃动\", False, 0.500, \"7065208406633615909\", \"1568854\", \"b129b0e6bed4f9835f871848db646763\")\n    超强晃动_II          = AnimationMeta(\"超强晃动 II\", False, 0.500, \"7069965879437431303\", \"1597286\", \"daec618afd4429f3f97085d3b7029bcc\")\n    超强波浪             = AnimationMeta(\"超强波浪\", False, 0.500, \"6857036499389518349\", \"872098\", \"87f7332abda9ac46d5dc81f69c48daab\")\n    超强波浪_II          = AnimationMeta(\"超强波浪 II\", False, 0.500, \"7065219379687854623\", \"1568964\", \"bdd007527d0eda9d64bfbf6aef103e97\")\n    跳动                 = AnimationMeta(\"跳动\", False, 0.500, \"6724920002958332420\", \"1644512\", \"784250e657b472a46a3b3ce0a838e4f7\")\n    轻微跳动             = AnimationMeta(\"轻微跳动\", False, 0.500, \"6884155832838132231\", \"1644525\", \"ac5c4160fae860fd74e5b7ab6d053252\")\n    钟摆                 = AnimationMeta(\"钟摆\", False, 0.500, \"6724921579517514248\", \"1644516\", \"320b71150105629f7ab1b318716181eb\")\n    闪烁                 = AnimationMeta(\"闪烁\", False, 0.500, \"6724921437930394120\", \"1644514\", \"6fe3f0fcd14e11e70b7510f42444b86c\")\n    雨刷                 = AnimationMeta(\"雨刷\", False, 0.500, \"6799874389669057037\", \"1644521\", \"6a4c40e24db5027cb42892d8ade9df38\")\n    频闪边框             = AnimationMeta(\"频闪边框\", False, 0.500, \"7308280718302384690\", \"32284883\", \"36184bd37eae10c2d8247fb5bd59c6f2\")\n    颤抖                 = AnimationMeta(\"颤抖\", False, 0.500, \"6764189482871689742\", \"1644509\", \"9d16d8998abe172511399c3158bddddd\")\n    颤抖_III             = AnimationMeta(\"颤抖 III\", False, 0.500, \"7070036604429013535\", \"1598082\", \"c6f744d4c3d208abf97a3af3afe9d356\")\n\n    # 付费特效\n    加字符               = AnimationMeta(\"加字符\", True, 0.800, \"7441532971082846758\", \"93688629\", \"f9c72d34da0c6e7b2b4263a37892ae6c\")\n    喷涌                 = AnimationMeta(\"喷涌\", True, 0.500, \"7134190113780666887\", \"4175399\", \"76cc53a7bb20385d208c858a13cf06fd\")\n    喷绘                 = AnimationMeta(\"喷绘\", True, 0.500, \"7110160318529016350\", \"2999942\", \"fbd35399a1880d2637731d20eb619d29\")\n    圆形涂鸦             = AnimationMeta(\"圆形涂鸦\", True, 0.800, \"7276420462131810874\", \"22362181\", \"696d3b443b4c6ed8b9f0f28825c08a8c\")\n    声波震动             = AnimationMeta(\"声波震动\", True, 2.000, \"7239526343833031223\", \"14518651\", \"9098085cd316045cf912e54a73d845a4\")\n    字幕滚动             = AnimationMeta(\"字幕滚动\", True, 0.500, \"6790246884683289102\", \"1644519\", \"9aa4e0d045c61892c2b2e3fdfaf1b093\")\n    尾巴摇摆             = AnimationMeta(\"尾巴摇摆\", True, 1.600, \"7212897307782550053\", \"10967121\", \"c1585ff28130b111d0458c6490d20ef2\")\n    弹幕                 = AnimationMeta(\"弹幕\", True, 0.500, \"7107592133472686606\", \"2795622\", \"8d0a44c1f51ea9cd7a8174f72751d2b7\")\n    弹幕_II              = AnimationMeta(\"弹幕 II\", True, 0.500, \"7096375845773644318\", \"1826548\", \"11bcd8965488f2c70e27c8dc5112c6cb\")\n    强调三遍             = AnimationMeta(\"强调三遍\", True, 0.500, \"7129767866894651917\", \"3966601\", \"f34d9d771c836c5e4e836d4789788a82\")\n    彩色切换             = AnimationMeta(\"彩色切换\", True, 1.500, \"7303430211519910451\", \"30322872\", \"e2c7f4ec20555abe1e50c1920e81a0f9\")\n    彩色火焰             = AnimationMeta(\"彩色火焰\", True, 0.500, \"7308278472541999654\", \"32283417\", \"94dd9722a4b46d248c5e1d3d4b7c71fb\")\n    影像叠加             = AnimationMeta(\"影像叠加\", True, 0.500, \"7193989785319379515\", \"8882439\", \"018a39f66ba7ceb39f4d61e4446624f8\")\n    心跳                 = AnimationMeta(\"心跳\", True, 1.500, \"7210283971316290085\", \"10650869\", \"3c2c6a7f6b8b102e9ae5f918600f83c0\")\n    急了                 = AnimationMeta(\"急了\", True, 2.400, \"7134634461588623909\", \"4200435\", \"4f01b8c42b2d4a26a89aa528e6cc1544\")\n    悸动                 = AnimationMeta(\"悸动\", True, 1.200, \"7229526981807706680\", \"13139395\", \"dc1aa28b54954465640c40928fae55f7\")\n    情绪加载             = AnimationMeta(\"情绪加载\", True, 2.200, \"7130142075995034119\", \"3983735\", \"6293429c9f4e12407d38089ee43b77cd\")\n    扩音器               = AnimationMeta(\"扩音器\", True, 1.200, \"7277870806552547895\", \"22619881\", \"ba24954b91039982fabf75ad533e7ff1\")\n    扭动                 = AnimationMeta(\"扭动\", True, 0.500, \"7123093247672455711\", \"3733565\", \"5380b570671074788541d13e389daa4f\")\n    投影颤抖             = AnimationMeta(\"投影颤抖\", True, 0.500, \"7070332284934558245\", \"1599698\", \"4f4bebc9ab74f05801dca7b9b2ffa047\")\n    抖动故障             = AnimationMeta(\"抖动故障\", True, 0.800, \"7283103017526628921\", \"23998441\", \"55749de55fe55fc230a31952790142f3\")\n    拉住                 = AnimationMeta(\"拉住\", True, 1.200, \"7221747595884892731\", \"12135594\", \"98db2339ea77225948ed8b7f8d72fc36\")\n    拉开                 = AnimationMeta(\"拉开\", True, 60.000, \"7223675733606928957\", \"12390761\", \"41f672adaa1cdccdb81c8d0b2b1124a4\")\n    排队入场             = AnimationMeta(\"排队入场\", True, 1.000, \"7225496399817740855\", \"12628547\", \"0a7a9cb49305092f638d65888f149348\")\n    摇摆_I               = AnimationMeta(\"摇摆 I\", True, 0.500, \"6908281696253121038\", \"1520478\", \"ea2f688a517d18a9de5912fa09f3bd56\")\n    放大缩小             = AnimationMeta(\"放大缩小\", True, 0.500, \"7224077152587616805\", \"12453543\", \"3e1538ad9a9f723238bb922423e20aed\")\n    放大镜               = AnimationMeta(\"放大镜\", True, 0.800, \"7272339163142165050\", \"21635790\", \"e9f8437306ec0f948c1eb485f09692a3\")\n    文字泛光             = AnimationMeta(\"文字泛光\", True, 0.500, \"7124226995231134239\", \"3740251\", \"879231435782ed4b72f278290070f20a\")\n    波浪                 = AnimationMeta(\"波浪\", True, 0.500, \"6724927688047333891\", \"1644517\", \"176a075543ef82c04df1dd40d181ac5b\")\n    波浪_II              = AnimationMeta(\"波浪 II\", True, 0.500, \"7067046171381862919\", \"1576246\", \"62245c9799544b75258689eb1ff222bb\")\n    波浪_III             = AnimationMeta(\"波浪 III\", True, 0.500, \"7067812686557352456\", \"1583302\", \"b57dd58b3c8090eae268bae843655c79\")\n    流光                 = AnimationMeta(\"流光\", True, 1.600, \"7308277700492268042\", \"32283005\", \"fd7091c4e298df2433e9433c8d58a427\")\n    涂鸦手绘             = AnimationMeta(\"涂鸦手绘\", True, 0.500, \"7276407256965452346\", \"22361305\", \"1ae8ceff3f65dd62f36b3eb43baff6b4\")\n    涂鸦手绘_II          = AnimationMeta(\"涂鸦手绘 II\", True, 0.500, \"7276407576625943100\", \"22361304\", \"f72282b1f43b0d5e59144bbca7fbeda8\")\n    渐变拖尾             = AnimationMeta(\"渐变拖尾\", True, 0.800, \"7308277117622424090\", \"32282151\", \"950687cffad02a7b17bc9b672c9585f2\")\n    漂浮                 = AnimationMeta(\"漂浮\", True, 1.500, \"7213291988500615738\", \"11017729\", \"451fbb332b33ec6ba683dc9d22055810\")\n    漩涡                 = AnimationMeta(\"漩涡\", True, 0.500, \"7099419657290912286\", \"1936778\", \"416be3d42ae0d037597209d2a2f843c4\")\n    环形滚动             = AnimationMeta(\"环形滚动\", True, 1.200, \"7179135028343870012\", \"7564487\", \"e167e03db93ab98c4917ff53f59162c1\")\n    环绕_II              = AnimationMeta(\"环绕 II\", True, 0.500, \"7114181846086193701\", \"3240866\", \"6df622ca3b91909a8d23ae24f1c2a675\")\n    甜甜圈               = AnimationMeta(\"甜甜圈\", True, 0.500, \"7070415354656199181\", \"1600378\", \"23a8cee8851ad7e169a094cee8ca9513\")\n    福袋炸开             = AnimationMeta(\"福袋炸开\", True, 1.500, \"7047088638932292127\", \"1531460\", \"2646a21f26faeb4103acacaa74c171f6\")\n    空间翻转_I           = AnimationMeta(\"空间翻转 I\", True, 1.500, \"7163896186972148261\", \"5965291\", \"540b96331793d162cf80a099cd00dc55\")\n    空间翻转_II          = AnimationMeta(\"空间翻转 II\", True, 1.100, \"7163901901589713444\", \"5966503\", \"ce769779dfa1d9c69eb593318bf1bc28\")\n    空间翻转_III         = AnimationMeta(\"空间翻转 III\", True, 0.500, \"7163892769176424991\", \"5964737\", \"f9c82b94ebd990e6734ddef5ebba68cb\")\n    竖向渐变             = AnimationMeta(\"竖向渐变\", True, 2.200, \"7430669972088558090\", \"87963946\", \"db87c31a4c3252000f04f61d814e96d0\")\n    翻页I                = AnimationMeta(\"翻页I\", True, 1.200, \"7168819879183651359\", \"6443365\", \"6f49e16f12b0518b2c3b38a12d07466d\")\n    调皮                 = AnimationMeta(\"调皮\", True, 0.500, \"6917143282690560526\", \"1644527\", \"b832fcbb8ea3bcc64ddbd70c56166956\")\n    逐字放大             = AnimationMeta(\"逐字放大\", True, 0.500, \"6908592686781960717\", \"1644526\", \"4cd5a5c4144a3a713469043722579306\")\n    错位                 = AnimationMeta(\"错位\", True, 3.000, \"7243633488249754173\", \"15140783\", \"cc869e81ac3b5d769afa6836bab5937b\")\n    随机弹跳             = AnimationMeta(\"随机弹跳\", True, 0.500, \"7045150354672980516\", \"1644538\", \"8656e9848f862adf1adfa30c26113a80\")\n    颤抖_II              = AnimationMeta(\"颤抖 II\", True, 0.500, \"6986920909927879199\", \"1446098\", \"8c985874e1b508c4bfb9552735228143\")\n    飘起                 = AnimationMeta(\"飘起\", True, 3.000, \"7211060597352305189\", \"10749797\", \"1ab6d9a8761c108da6989633b933647e\")\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/text_outro.py",
    "content": "\"\"\"文字出场动画元数据\"\"\"\n\nfrom .effect_meta import EffectEnum, AnimationMeta\n\nclass TextOutro(EffectEnum):\n    \"\"\"文字出场动画, 默认时长为0.5秒\"\"\"\n\n    # 免费特效\n    右上弹出             = AnimationMeta(\"右上弹出\", False, 0.500, \"7076006676951732767\", \"1631524\", \"7b65a6e8a2ef7015dc780dec3524af60\")\n    右下擦除             = AnimationMeta(\"右下擦除\", False, 0.500, \"7090146831836910110\", \"1729286\", \"5e99fcba0a90d5bde52a85e034469aea\")\n    向上擦除             = AnimationMeta(\"向上擦除\", False, 0.500, \"6774625752794010115\", \"1644609\", \"d9b04e37f86d6b5cf456f396648e11d4\")\n    向上溶解             = AnimationMeta(\"向上溶解\", False, 0.500, \"7026619708627489293\", \"1644655\", \"7422f3de89f894522a0b45f3f2196131\")\n    向上滑动             = AnimationMeta(\"向上滑动\", False, 0.500, \"6763873533115240968\", \"1644605\", \"bbec5aa1ddf8df26276b99cfd9996d76\")\n    向下擦除             = AnimationMeta(\"向下擦除\", False, 0.500, \"6774626081791021576\", \"1644610\", \"4dafd6a7cbde862044fcbc543ecd818a\")\n    向下滑动             = AnimationMeta(\"向下滑动\", False, 0.500, \"6724919284893487619\", \"1644606\", \"4b1190ca81551d872f1d6b0e2ce5db2b\")\n    向右擦除             = AnimationMeta(\"向右擦除\", False, 0.500, \"6783908820176343566\", \"1644615\", \"a48325fce55a7a419b351c8a9826c7a0\")\n    向右滑动             = AnimationMeta(\"向右滑动\", False, 0.500, \"6724920744431587853\", \"1644614\", \"4026a211f18b0fc6ab9e10d09c8922ba\")\n    向右缓出             = AnimationMeta(\"向右缓出\", False, 0.500, \"7023684632591733284\", \"1451688\", \"59d06eeae650eb154920e1d07ef6b123\")\n    向左擦除             = AnimationMeta(\"向左擦除\", False, 0.500, \"6774626748177846791\", \"1644608\", \"1160d9bcc8a158a65441bcfc9603bd00\")\n    向左滑动             = AnimationMeta(\"向左滑动\", False, 0.500, \"6763873602476446221\", \"1644613\", \"a193ecedf73b2b27616ee7da4f599b9b\")\n    向左解散             = AnimationMeta(\"向左解散\", False, 0.500, \"7083752251742753287\", \"1674332\", \"46b117e1d9fc552e574958fcde072a53\")\n    圆形扫描             = AnimationMeta(\"圆形扫描\", False, 0.500, \"6840698265277567496\", \"1644617\", \"84c8a6772ba3199c3fdba0c171f0f2fc\")\n    居中打字             = AnimationMeta(\"居中打字\", False, 0.500, \"7265222263174074937\", \"20304017\", \"39cf0ff875a8825a82377a11e8b89d6a\")\n    展开                 = AnimationMeta(\"展开\", False, 0.500, \"6779879836916650509\", \"1644599\", \"cc9805cb2f96e99eec6c0f1978b03f70\")\n    左上弹出             = AnimationMeta(\"左上弹出\", False, 0.500, \"7078587337998864926\", \"1646758\", \"6cb5717740976cd9e65544d93bb8a8be\")\n    左移弹动             = AnimationMeta(\"左移弹动\", False, 1.000, \"7313890212529050138\", \"35176386\", \"26cd4509db97923ac2fb11eca5947750\")\n    弹出                 = AnimationMeta(\"弹出\", False, 0.500, \"6887482090351235592\", \"1644648\", \"ee214499310cb2a55d2370534fd0c02b\")\n    弹弓                 = AnimationMeta(\"弹弓\", False, 0.500, \"6862897350478664200\", \"1644618\", \"45f66e1fa1a3b79968b3749275bab10c\")\n    弹性伸缩             = AnimationMeta(\"弹性伸缩\", False, 0.500, \"6872642084977775118\", \"1644646\", \"f2882bcfc0abc3b0c53b39649a2c4224\")\n    弹簧                 = AnimationMeta(\"弹簧\", False, 0.500, \"6884154487246688776\", \"1644647\", \"15c4e6b0a27360bab5d6f5d421bbbe1e\")\n    打字机_I             = AnimationMeta(\"打字机 I\", False, 0.500, \"6763469696260903435\", \"1644611\", \"19a09f5625ae9001db6ce17d850da691\")\n    打字机_II            = AnimationMeta(\"打字机 II\", False, 0.500, \"6763469767555682823\", \"1644612\", \"f3ab4aa9eefc616bd928de6ca9936fb3\")\n    打字机_III           = AnimationMeta(\"打字机 III\", False, 0.500, \"6763469838368117256\", \"1644664\", \"3f77a87e46ee1b50cd0ac207809c4c24\")\n    扭曲模糊             = AnimationMeta(\"扭曲模糊\", False, 0.500, \"7090122015603954189\", \"1729226\", \"2e58579b330dbccc4491c5f0a8cf4a8a\")\n    拖尾                 = AnimationMeta(\"拖尾\", False, 0.500, \"7244102819731477049\", \"15260277\", \"178d1715bc49ea8303d3a9831e14ea84\")\n    放大                 = AnimationMeta(\"放大\", False, 0.500, \"6724919767200698884\", \"1644603\", \"e818fb0699073a734ecead7c2768d827\")\n    放大_II              = AnimationMeta(\"放大 II\", False, 0.500, \"7042278078415901192\", \"1644666\", \"1d6882ba11b67fff13c98493bc644027\")\n    故障打字机           = AnimationMeta(\"故障打字机\", False, 0.500, \"6870061326698287624\", \"1644643\", \"71a23656184bc8438f4fa22425192185\")\n    旋出                 = AnimationMeta(\"旋出\", False, 0.500, \"6763873732143354376\", \"1644604\", \"ffc35db86b29aee7a0a4342ea5ed059f\")\n    日落                 = AnimationMeta(\"日落\", False, 0.500, \"6779084194392838670\", \"1644607\", \"662eea25ba7d450d9a91febf43f22f7f\")\n    晕开                 = AnimationMeta(\"晕开\", False, 0.500, \"7090059095134179877\", \"1727994\", \"3f2770aa65e01746967c8289e193021b\")\n    模糊                 = AnimationMeta(\"模糊\", False, 0.500, \"6923094772907250189\", \"1644652\", \"72f73d5e9fd970ccee4918008b5a9d9a\")\n    水墨晕开             = AnimationMeta(\"水墨晕开\", False, 1.200, \"7278296130432012857\", \"22734371\", \"2705529afbf57f101c042d3a96ca2795\")\n    水平翻转             = AnimationMeta(\"水平翻转\", False, 0.500, \"7052633346936934942\", \"1644667\", \"8719853b159397ea64fc2102c61e52e4\")\n    波浪弹出             = AnimationMeta(\"波浪弹出\", False, 0.500, \"6917178803521327630\", \"1644651\", \"c60021c62c10eab0aa4f408ed602405c\")\n    渐隐                 = AnimationMeta(\"渐隐\", False, 0.500, \"6724919382104871427\", \"1644600\", \"11004616098603d847593ce9ede05a62\")\n    溶解                 = AnimationMeta(\"溶解\", False, 0.500, \"6872642354898014728\", \"1644645\", \"46389f9f5f72e1b58020a0b8293a23b9\")\n    滑动下落             = AnimationMeta(\"滑动下落\", False, 1.500, \"7270726693277405733\", \"21330850\", \"fa4aaf84b182425eed4e330ac03ecdbd\")\n    生长                 = AnimationMeta(\"生长\", False, 0.500, \"6869302139584254477\", \"1644642\", \"e6ae4e1fc5ade7bd8765ef6d918f5f6f\")\n    缩小                 = AnimationMeta(\"缩小\", False, 0.500, \"6724921351385125387\", \"1644602\", \"6c679c75b88d8c69335c9faefbcd635a\")\n    羽化向右擦除         = AnimationMeta(\"羽化向右擦除\", False, 0.500, \"6897085341811872270\", \"1644649\", \"9d4c77cbae673b97c629890c6687bc71\")\n    羽化向左擦除         = AnimationMeta(\"羽化向左擦除\", False, 0.500, \"6897085246206906893\", \"1644650\", \"865d4874f9e21f104881bd3f1f1e02fa\")\n    翻动                 = AnimationMeta(\"翻动\", False, 1.000, \"7308279288061497865\", \"32283993\", \"04cba0b253ac17aba55979be72a1a322\")\n    躺下                 = AnimationMeta(\"躺下\", False, 0.800, \"7265288999470633509\", \"20324365\", \"dc012ae6bfd6482bb0e52d02328016c8\")\n    轻微放大             = AnimationMeta(\"轻微放大\", False, 0.500, \"6763469915518145032\", \"1644601\", \"1e293df954586a261a11576481dd8454\")\n    闪动                 = AnimationMeta(\"闪动\", False, 0.500, \"7039245189638001183\", \"1644658\", \"6b16591d61fa6ee68eef9148dbf0aa31\")\n    闭幕                 = AnimationMeta(\"闭幕\", False, 0.500, \"6834511218552607239\", \"1644616\", \"02a28db581b74aac8547c2479cb219bc\")\n    随机弹跳             = AnimationMeta(\"随机弹跳\", False, 0.500, \"7026617357300666893\", \"1644665\", \"c260caa85b16e7d471ddeb2015cdf3f3\")\n    随机飞出             = AnimationMeta(\"随机飞出\", False, 0.500, \"6872642497013617159\", \"1644644\", \"d1292de2cfc57d0ca12fdbafb4e0bca2\")\n\n    # 付费特效\n    二段缩放             = AnimationMeta(\"二段缩放\", True, 1.500, \"7238519014866031162\", \"14394793\", \"bc54fc23dff39b105104f5bb15043ff9\")\n    发光闪出             = AnimationMeta(\"发光闪出\", True, 1.800, \"7308275717505028617\", \"32281161\", \"980fe827d603f3785e69854b6e5967a4\")\n    叠影并出             = AnimationMeta(\"叠影并出\", True, 1.000, \"7259634082760364603\", \"19101496\", \"1cc4801fbe64f100872abd1d502ac121\")\n    向上飞出             = AnimationMeta(\"向上飞出\", True, 0.500, \"7090139631861109278\", \"1730928\", \"3513093fd914fcccfa87cb98a410062e\")\n    向下弹出             = AnimationMeta(\"向下弹出\", True, 0.500, \"7127158940151845390\", \"3859743\", \"751b7e005e3ec297f5d3d2c40664f585\")\n    向下翻转             = AnimationMeta(\"向下翻转\", True, 0.500, \"7198395913948107301\", \"9282213\", \"860c71ba47b9cf749ac977cb437ae1a8\")\n    向左模糊             = AnimationMeta(\"向左模糊\", True, 0.500, \"7112703727336690189\", \"3176752\", \"2115519d6d8226853c4c7faf8ad61b18\")\n    向左模糊_II          = AnimationMeta(\"向左模糊 II\", True, 0.500, \"7254503584732025381\", \"17830676\", \"b01dbbd36097f1d37e4dde2fd4380a13\")\n    吸出                 = AnimationMeta(\"吸出\", True, 0.300, \"7121986743141667358\", \"3647465\", \"27d43c1a8f3bb21f88f25fadfd74e113\")\n    喷绘                 = AnimationMeta(\"喷绘\", True, 0.500, \"7120131305303446029\", \"3563649\", \"a2efafd9407094f2706c38b5ea2867c0\")\n    复古打字机           = AnimationMeta(\"复古打字机\", True, 0.800, \"7252619798108967484\", \"17250228\", \"38ce74d50ed5abdebf4ba9cff80f644c\")\n    弹出跳动             = AnimationMeta(\"弹出跳动\", True, 0.500, \"7184797189627974200\", \"8058215\", \"dffb8966b47b6eae5fb9ef0e0fe6e6b9\")\n    弹性伸缩_II          = AnimationMeta(\"弹性伸缩 II\", True, 0.500, \"7308276711039177225\", \"32281815\", \"9b225f4fafa2341876eec98ba91c89ee\")\n    打字光标             = AnimationMeta(\"打字光标\", True, 2.000, \"7237411511755346491\", \"14235852\", \"1285f4e58d3989468cc7c7679145e155\")\n    打字机IV             = AnimationMeta(\"打字机IV\", True, 2.000, \"7237411448303915557\", \"14235853\", \"3f2d4916f48390652f4abaff69742c0b\")\n    折叠                 = AnimationMeta(\"折叠\", True, 0.500, \"7124961998919438884\", \"3769517\", \"ccce629bcf7f98a8de4d4e1a2228d11a\")\n    描边填充             = AnimationMeta(\"描边填充\", True, 0.900, \"7308273254127374874\", \"32279531\", \"9dc334dd67a2ace030c8d0f0d01ecede\")\n    收缩震动             = AnimationMeta(\"收缩震动\", True, 0.500, \"7268214314022998588\", \"20877442\", \"c95da61de0632a74d061f03806a8ea9b\")\n    故障                 = AnimationMeta(\"故障\", True, 0.500, \"7091567288385540622\", \"1789138\", \"b106b2d684134a06b033aa2ba70baea2\")\n    故障闪动             = AnimationMeta(\"故障闪动\", True, 2.000, \"7244102414377161276\", \"15261509\", \"ba766fab0ea8b838f1c64973aee2b54b\")\n    旋转缩放             = AnimationMeta(\"旋转缩放\", True, 1.600, \"7243633648237285949\", \"15140857\", \"37af568e3f004232b19507b24d5438c1\")\n    旋转飞出             = AnimationMeta(\"旋转飞出\", True, 0.500, \"6775804032318444045\", \"1644639\", \"802b2078b18d70ecd073ffacff59c1d8\")\n    模糊发光             = AnimationMeta(\"模糊发光\", True, 1.800, \"7301536173959156274\", \"29690520\", \"a21891cf3eff128b2a5190cad5356d69\")\n    模糊滚动             = AnimationMeta(\"模糊滚动\", True, 0.800, \"7264501549240422949\", \"20154980\", \"9c07a1d5d75f675d32f8917dc76f7381\")\n    波浪弹跳             = AnimationMeta(\"波浪弹跳\", True, 1.000, \"7317637880799564297\", \"37396324\", \"17dc7c4e6498440fcafc56dfbe3fb4fe\")\n    消散                 = AnimationMeta(\"消散\", True, 0.500, \"7155790075794559525\", \"5323563\", \"21888446c8d15d56c60864985328652b\")\n    滚出                 = AnimationMeta(\"滚出\", True, 0.500, \"7023684709737566728\", \"1644656\", \"f25af0cdef9584d588584b3765350f64\")\n    激光雕刻             = AnimationMeta(\"激光雕刻\", True, 1.200, \"7244102529573720635\", \"15261103\", \"bb0ab89c7396d11d5663b0071296f27d\")\n    炸开                 = AnimationMeta(\"炸开\", True, 0.500, \"7142816577971294734\", \"4577477\", \"15ced8e31e8d57f8932820fe99f96391\")\n    炸开_II              = AnimationMeta(\"炸开 II\", True, 0.500, \"7148309755121898015\", \"4834739\", \"bff4571b77bca8598b6ce8ba65d93252\")\n    炸开_Ⅲ               = AnimationMeta(\"炸开 Ⅲ\", True, 1.200, \"7308274161992864266\", \"32280237\", \"0060b15237436dc553a3a050825d18a6\")\n    环绕滑出             = AnimationMeta(\"环绕滑出\", True, 1.000, \"7261858590808347193\", \"19562193\", \"c88f30f314faade1a6e71884234a380b\")\n    甩回                 = AnimationMeta(\"甩回\", True, 0.600, \"7244102747698500156\", \"15261069\", \"0203e194e3bcf10f7f96fde73dc350f3\")\n    空翻                 = AnimationMeta(\"空翻\", True, 0.500, \"6865176065514410503\", \"1644641\", \"f578720479df7746fa067199a1e4ea8b\")\n    螺旋下降             = AnimationMeta(\"螺旋下降\", True, 0.500, \"6799874105710481927\", \"1644640\", \"e6e1a2239d894b408e41341a6ca578ca\")\n    逐字旋出             = AnimationMeta(\"逐字旋出\", True, 1.500, \"7229520513586958908\", \"13137113\", \"3df3f26182ac9c6359be95dfb443d5da\")\n    逐字旋转             = AnimationMeta(\"逐字旋转\", True, 0.500, \"7112021029085516319\", \"3129838\", \"ee29d8b9e06a471972f36734c53dbea8\")\n    逐字翻转             = AnimationMeta(\"逐字翻转\", True, 0.500, \"7112274846326723086\", \"3139394\", \"ffc81a4b0c44427fbfd60984f7ddcdc2\")\n    逐字虚影             = AnimationMeta(\"逐字虚影\", True, 0.500, \"7034717113130422791\", \"1644657\", \"fe2cfbc08c330517caa8b602187ced07\")\n    镂空跳出             = AnimationMeta(\"镂空跳出\", True, 1.200, \"7312331703903588902\", \"34383204\", \"9ee4277be6f23033bf1b80fd0e6e8d27\")\n    闪烁散开             = AnimationMeta(\"闪烁散开\", True, 1.000, \"7268169968204649020\", \"20860262\", \"b58f8939e94946a70c35188819a65a78\")\n    随机弹跳_II          = AnimationMeta(\"随机弹跳 II\", True, 0.500, \"7114191629346411016\", \"3241116\", \"0f0b492622513301a7cd8f30b035a056\")\n    随机打字机           = AnimationMeta(\"随机打字机\", True, 0.500, \"6926719087158497806\", \"1644653\", \"9db48fc9916b5b8554ce7262bb90f18f\")\n    顶出                 = AnimationMeta(\"顶出\", True, 1.100, \"7268231069768356408\", \"20882164\", \"98ad0ec3b5980352e4709158def77960\")\n    预览打字             = AnimationMeta(\"预览打字\", True, 0.800, \"7268216065337856572\", \"20878188\", \"360d883bb43dab551defd1e94b9730d6\")\n    飞出                 = AnimationMeta(\"飞出\", True, 0.500, \"7029522072724312612\", \"1644654\", \"324c695abdd43e1ec3506364fce0a087\")\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/tone_effect.py",
    "content": "from .effect_meta import EffectEnum\nfrom .effect_meta import EffectMeta, EffectParam\n\nclass ToneEffectType(EffectEnum):\n    \"\"\"剪映自带的音频“音色”效果类型\"\"\"\n\n    # 免费\n    台湾小哥    = EffectMeta(\"台湾小哥\", False, \"7255565276819755576\", \"18149602\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    圣诞精灵    = EffectMeta(\"圣诞精灵\", False, \"7310059412062736946\", \"33214695\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    圣诞老人    = EffectMeta(\"圣诞老人\", False, \"7310059178133819930\", \"33214489\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    广告男声    = EffectMeta(\"广告男声\", False, \"7328088579811316263\", \"42060748\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    港普男声    = EffectMeta(\"港普男声\", False, \"7328087687548637732\", \"42060743\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    老婆婆      = EffectMeta(\"老婆婆\", False, \"7328089253114548799\", \"42060746\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    解说小帅    = EffectMeta(\"解说小帅\", False, \"7332473259369173540\", \"44254166\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    大叔        = EffectMeta(\"大叔\", False, \"7020344898033291790\", \"2672760\", \"2509bbd71e127b04a29f52a54e82c53c\", [\n                                    EffectParam(\"音调\", 0.834, 0.000, 1.000),\n                                    EffectParam(\"音色\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n        - 音调: 默认0.83, 0.00 ~ 1.00\n        - 音色: 默认1.00, 0.00 ~ 1.00\n    \"\"\"\n    女生        = EffectMeta(\"女生\", False, \"7020345715901600270\", \"2672757\", \"0ce1aade5958506c97bffea150772b6e\", [\n                                    EffectParam(\"音调\", 0.834, 0.000, 1.000),\n                                    EffectParam(\"音色\", 0.334, 0.000, 1.000)])\n    \"\"\"参数:\n        - 音调: 默认0.83, 0.00 ~ 1.00\n        - 音色: 默认0.33, 0.00 ~ 1.00\n    \"\"\"\n    怪物        = EffectMeta(\"怪物\", False, \"7020344978794615327\", \"2672759\", \"2130ffa21e5980196e014ec0baade179\", [\n                                    EffectParam(\"音调\", 0.650, 0.000, 1.000),\n                                    EffectParam(\"音色\", 0.780, 0.000, 1.000)])\n    \"\"\"参数:\n        - 音调: 默认0.65, 0.00 ~ 1.00\n        - 音色: 默认0.78, 0.00 ~ 1.00\n    \"\"\"\n    机器人      = EffectMeta(\"机器人\", False, \"7018011705414259213\", \"2672750\", \"4b87db25aecd2f6f71927930110c4a1e\", [\n                                    EffectParam(\"强弱\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n        - 强弱: 默认1.00, 0.00 ~ 1.00\n    \"\"\"\n    男生        = EffectMeta(\"男生\", False, \"7020345085233467917\", \"2672758\", \"ffd7a609207fd849efc9f63bf31697b1\", [\n                                    EffectParam(\"音调\", 0.375, 0.000, 1.000),\n                                    EffectParam(\"音色\", 0.250, 0.000, 1.000)])\n    \"\"\"参数:\n        - 音调: 默认0.38, 0.00 ~ 1.00\n        - 音色: 默认0.25, 0.00 ~ 1.00\n    \"\"\"\n    花栗鼠      = EffectMeta(\"花栗鼠\", False, \"7018011553081332231\", \"2672752\", \"e30b1922b8300423f21f9f84eff41ced\", [\n                                    EffectParam(\"音调\", 0.500, 0.000, 1.000),\n                                    EffectParam(\"音色\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n        - 音调: 默认0.50, 0.00 ~ 1.00\n        - 音色: 默认0.50, 0.00 ~ 1.00\n    \"\"\"\n    萝莉        = EffectMeta(\"萝莉\", False, \"7020345789599715848\", \"2672756\", \"00b7ed2ccfe4d6076f78c8d751347a53\", [\n                                    EffectParam(\"音调\", 0.750, 0.000, 1.000),\n                                    EffectParam(\"音色\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n        - 音调: 默认0.75, 0.00 ~ 1.00\n        - 音色: 默认0.60, 0.00 ~ 1.00\n    \"\"\"\n\n\n    # 付费\n    TVB女声     = EffectMeta(\"TVB女声\", True, \"7260024060417937978\", \"19186454\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    东厂公公    = EffectMeta(\"东厂公公\", True, \"7328092524612948491\", \"42060742\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    云龙哥      = EffectMeta(\"云龙哥\", True, \"7376558114830553612\", \"68856989\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    侠客        = EffectMeta(\"侠客\", True, \"7328089134331859468\", \"42060738\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    做作夹子音  = EffectMeta(\"做作夹子音\", True, \"7367676929496846911\", \"63231108\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    八戒        = EffectMeta(\"八戒\", True, \"7265891792766112314\", \"20427371\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    军事解说    = EffectMeta(\"军事解说\", True, \"7328092289480266252\", \"42060734\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    动漫小新    = EffectMeta(\"动漫小新\", True, \"7360901047662940708\", \"58979441\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    动漫海绵    = EffectMeta(\"动漫海绵\", True, \"7367676859883983379\", \"63231109\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    咆哮哥      = EffectMeta(\"咆哮哥\", True, \"7332473122605503039\", \"44254278\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    商务殷语    = EffectMeta(\"商务殷语\", True, \"7328085477267870249\", \"42060747\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    四郎        = EffectMeta(\"四郎\", True, \"7250403044414722621\", \"16627073\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    太白        = EffectMeta(\"太白\", True, \"7328091247308968484\", \"42060736\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    如来佛祖    = EffectMeta(\"如来佛祖\", True, \"7376558174049931830\", \"68856990\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    姜饼人      = EffectMeta(\"姜饼人\", True, \"7310059267384414747\", \"33214539\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    容嬷嬷      = EffectMeta(\"容嬷嬷\", True, \"7332472945366798860\", \"44254320\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    小孩        = EffectMeta(\"小孩\", True, \"7262648951948448315\", \"19716244\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    强势妹      = EffectMeta(\"强势妹\", True, \"7328091624427229759\", \"42060740\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    快板        = EffectMeta(\"快板\", True, \"7328088454183522827\", \"42060741\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    恐怖电影    = EffectMeta(\"恐怖电影\", True, \"7325710953247412787\", \"40932465\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    悬疑解说    = EffectMeta(\"悬疑解说\", True, \"7325711304390349362\", \"40932811\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    懒小羊      = EffectMeta(\"懒小羊\", True, \"7332473035116515859\", \"44254304\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    搞笑解说    = EffectMeta(\"搞笑解说\", True, \"7262648842238038584\", \"19716150\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    文艺女声    = EffectMeta(\"文艺女声\", True, \"7379565719991620132\", \"70562787\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    樱桃丸子    = EffectMeta(\"樱桃丸子\", True, \"7325709643332719113\", \"40931609\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    樱花小哥    = EffectMeta(\"樱花小哥\", True, \"7328091741678998055\", \"42060735\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    武则天      = EffectMeta(\"武则天\", True, \"7328088300474864167\", \"42060744\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    沉稳解说    = EffectMeta(\"沉稳解说\", True, \"7367676791164506636\", \"63231110\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    温柔姐姐    = EffectMeta(\"温柔姐姐\", True, \"7379565769190806079\", \"70562785\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    熊二        = EffectMeta(\"熊二\", True, \"7250403222798471740\", \"16627311\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    猴哥        = EffectMeta(\"猴哥\", True, \"7236944659547689531\", \"14477015\", \"4f6a1fbc0000e178c724d355efea1d9f\", [])\n    甜美悦悦    = EffectMeta(\"甜美悦悦\", True, \"7325710673978069530\", \"40932253\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    生活小妙招  = EffectMeta(\"生活小妙招\", True, \"7328092409525441065\", \"42060737\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    电竞解说    = EffectMeta(\"电竞解说\", True, \"7325711893551649330\", \"40933559\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    电视广告    = EffectMeta(\"电视广告\", True, \"7360901109667336743\", \"58979440\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    紫薇        = EffectMeta(\"紫薇\", True, \"7281175506391667257\", \"23475307\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    舌尖解说    = EffectMeta(\"舌尖解说\", True, \"7328091500753982015\", \"42060739\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    蜡笔小妮    = EffectMeta(\"蜡笔小妮\", True, \"7379565670398169619\", \"70562786\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    语音助手    = EffectMeta(\"语音助手\", True, \"7325710335455793714\", \"40931973\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    那姐        = EffectMeta(\"那姐\", True, \"7369177370873303587\", \"64206631\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    锤子哥      = EffectMeta(\"锤子哥\", True, \"7328091348098093580\", \"42060745\", \"f554735f65a98cc4da17a1c53ef6a886\", [])\n    顾姐        = EffectMeta(\"顾姐\", True, \"7250403134923608631\", \"16627197\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n    黛玉        = EffectMeta(\"黛玉\", True, \"7255565592093004343\", \"18149634\", \"8dd8889045e6c065177df791ddb3dfb8\", [])\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/transition_meta.py",
    "content": "\"\"\"转场效果元数据\"\"\"\n\nfrom .effect_meta import EffectEnum, TransitionMeta\n\nclass TransitionType(EffectEnum):\n    \"\"\"转场类型\"\"\"\n\n    # 免费特效\n    _3D空间              = TransitionMeta(\"3D空间\", False, \"7049979667406656014\", \"1506926\", \"aaecc038f6543411f601608fc5539f0b\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    上下翻页             = TransitionMeta(\"上下翻页\", False, \"7397337005387944457\", \"77055399\", \"091f7995a43fc66fd0a95b2a6b88834f\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    上移                 = TransitionMeta(\"上移\", False, \"6724846395116753416\", \"2917279\", \"df9bc16697464de201a4924de49234a2\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    下移                 = TransitionMeta(\"下移\", False, \"6724849276100284942\", \"2917280\", \"9c042543d4846e7c17e8f950ce6f91c2\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    中心旋转             = TransitionMeta(\"中心旋转\", False, \"6858191434294497805\", \"878914\", \"b43f5b2e59f966a3b110222773c2942d\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    云朵                 = TransitionMeta(\"云朵\", False, \"6955722927161479694\", \"2912469\", \"283bb4bbe729f19f933cb705024a0983\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    倒影                 = TransitionMeta(\"倒影\", False, \"6748313807031898627\", \"369691\", \"0ee10b771dc0443c41a90bb9fd6b3c25\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    冰雪结晶             = TransitionMeta(\"冰雪结晶\", False, \"6919369228701143559\", \"1017910\", \"a0fd9d6eb0cb5596cac4f54d0ba59eaf\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    冲鸭                 = TransitionMeta(\"冲鸭\", False, \"7030714241359286821\", \"1441672\", \"784b284f040f61ae95f4e8e660f3a873\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    分割                 = TransitionMeta(\"分割\", False, \"6968372308419285540\", \"4211683\", \"ca45695f29bacf2dc29a6eb959e9e968\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    分割_II              = TransitionMeta(\"分割 II\", False, \"6969782622868214302\", \"4211740\", \"5ba1cb89bcf4a0898f86494864348e13\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    分割_III             = TransitionMeta(\"分割 III\", False, \"6969793843403166215\", \"4211739\", \"942fd71d67ca576384b2cd068157ca45\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    分割_IV              = TransitionMeta(\"分割 IV\", False, \"6969793934356648455\", \"4211738\", \"62d08c08542fe62e6a8429f9501e76fa\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    前后对比_II          = TransitionMeta(\"前后对比 II\", False, \"7299290706277831218\", \"28895844\", \"64e8f4a060901fd4349301f97fbdd172\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    动漫云朵             = TransitionMeta(\"动漫云朵\", False, \"6777178865119793678\", \"2911876\", \"e835cbc7fa7b15af90a2a7090bbf68c3\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    动漫漩涡             = TransitionMeta(\"动漫漩涡\", False, \"6858191448827761160\", \"878913\", \"fa7ba99b13036c0ff167ea3b7d5c31a2\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    动漫火焰             = TransitionMeta(\"动漫火焰\", False, \"6777178765643485709\", \"2911875\", \"8e7c247c5ebd58aa5c3582273e9c840b\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    动漫闪电             = TransitionMeta(\"动漫闪电\", False, \"6777178696609436174\", \"2911874\", \"3fd5d0c7c48668ba5305c57ac0b5d596\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    压缩                 = TransitionMeta(\"压缩\", False, \"6751618376780485133\", \"4212466\", \"337d4cd9be4e1860bd1e7e50a9a93841\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    叠加                 = TransitionMeta(\"叠加\", False, \"6914112332205396488\", \"1003369\", \"4f7e4bd421e382860b49e3e34eb4e4aa\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    叠化                 = TransitionMeta(\"叠化\", False, \"6724845717472416269\", \"322577\", \"2d641adc4bb63e37e3a0067d8c8cc3c3\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    右移                 = TransitionMeta(\"右移\", False, \"6726711296063967748\", \"2917287\", \"4cfd965c25e33c7df9b2c1b3b4cbdf31\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    向上                 = TransitionMeta(\"向上\", False, \"6724227090872275463\", \"359459\", \"349746a951e130fe896415f51c9eb36a\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    向上擦除             = TransitionMeta(\"向上擦除\", False, \"6724849456891564557\", \"2917281\", \"9a2e4ebf7309c80be332e3c62594dcd6\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    向下                 = TransitionMeta(\"向下\", False, \"6724227330190873100\", \"359449\", \"9c263958ef3b5762db6ffd94a665f9e8\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    向下擦除             = TransitionMeta(\"向下擦除\", False, \"6724849752921346573\", \"2917282\", \"ce1fb8739d1fbff3d86498fc18321933\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    向下流动             = TransitionMeta(\"向下流动\", False, \"6858191469807669773\", \"878912\", \"45f28ed2995ca15cfe027784b55d34f2\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    向右                 = TransitionMeta(\"向右\", False, \"6724227599616184836\", \"359527\", \"55af58a9b04ff458c3a9ae3ddb358152\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    向右上               = TransitionMeta(\"向右上\", False, \"6724227870559834635\", \"359567\", \"19d72649fe9bc3b272e1d874a93a0e9b\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    向右下               = TransitionMeta(\"向右下\", False, \"6724228621742903815\", \"359537\", \"4291e21aefc6d87a232441d38cabacc5\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    向右拉伸             = TransitionMeta(\"向右拉伸\", False, \"6987299127025472031\", \"4211782\", \"6c3d17aa182e6238ee3a48c2fdf4a627\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    向右擦除             = TransitionMeta(\"向右擦除\", False, \"6724849898857959950\", \"2917284\", \"a10153bd2b569c49ddd7c055e8c9eba9\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    向右流动             = TransitionMeta(\"向右流动\", False, \"6858191483573375495\", \"878911\", \"8d3508f6e570dc73d3e771d234796cb8\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    向左                 = TransitionMeta(\"向左\", False, \"6724227717195108867\", \"359529\", \"323fadc45da03741e6b393b3e3b34e75\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    向左上               = TransitionMeta(\"向左上\", False, \"6724230442679013902\", \"359533\", \"4ed73d43829eb496f6885ac0b882a391\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    向左下               = TransitionMeta(\"向左下\", False, \"6724230577211314695\", \"359535\", \"c76650d4ea9bc4e3b0530c9b9f05f28e\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    向左拉伸             = TransitionMeta(\"向左拉伸\", False, \"6987201429622493732\", \"4211781\", \"b0dd96c3c203104a2df46d83dd91b7bd\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    向左擦除             = TransitionMeta(\"向左擦除\", False, \"6724849999336706573\", \"2917283\", \"316c2a1c1783f51505c793b13381b445\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    吸入                 = TransitionMeta(\"吸入\", False, \"7246288124110705209\", \"15653345\", \"fb75bf696e19a04795ae9a06b43a09f2\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    回忆下滑             = TransitionMeta(\"回忆下滑\", False, \"7309840407406318117\", \"33106283\", \"7e8f1b10bb9979d7ed184d29f301b93d\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    圆形分割_II          = TransitionMeta(\"圆形分割 II\", False, \"7317206886053319194\", \"37127313\", \"05017adee9a3798b4fb207bb3206187e\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    圆形扫描             = TransitionMeta(\"圆形扫描\", False, \"6851775006418932238\", \"813992\", \"0260ab98d7a840c3344cb5b3e70b7d4b\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    圆形遮罩             = TransitionMeta(\"圆形遮罩\", False, \"6725767129519362573\", \"2916676\", \"a7eb1d47f97049b17f49669622d07f3d\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    圆形遮罩_II          = TransitionMeta(\"圆形遮罩 II\", False, \"6724850215364334083\", \"2916675\", \"2772ad7c8c7e30c6421be7c2e5dd3f15\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    复古放映             = TransitionMeta(\"复古放映\", False, \"7237068402945167909\", \"14192091\", \"44c3d405f4961d843c74c69e241df643\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    岁月的痕迹           = TransitionMeta(\"岁月的痕迹\", False, \"6982750240663147044\", \"1185194\", \"0b228af1ebde4909bb6ff545ddd89023\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    左下角_II            = TransitionMeta(\"左下角 II\", False, \"7304868316252738098\", \"30874190\", \"e0296196f0ec6666a33b33fead4f63d6\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    左移                 = TransitionMeta(\"左移\", False, \"6726711499676455435\", \"2917286\", \"9562c0ea301229d43f9dca6f6590f306\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    开幕                 = TransitionMeta(\"开幕\", False, \"6750893890712113677\", \"391781\", \"d5f097e701ddaa984a590249896fc51a\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    弹幕转场             = TransitionMeta(\"弹幕转场\", False, \"7028877116259176974\", \"1433950\", \"7b5385070a42a218f194d9daddb59f32\", 4.000, False)\n    \"\"\"默认时长: 4.00s\"\"\"\n    弹跳                 = TransitionMeta(\"弹跳\", False, \"6747865141120864779\", \"368205\", \"4b3b8b53bc1f947d57a30489d81387eb\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    打板转场_I           = TransitionMeta(\"打板转场 I\", False, \"7028143517570437668\", \"1432322\", \"355d5c4df581f6c4940c9b999e010f81\", 4.000, False)\n    \"\"\"默认时长: 4.00s\"\"\"\n    打板转场_II          = TransitionMeta(\"打板转场 II\", False, \"7029592645538157086\", \"1437264\", \"021dfc9a6541d8d08bac631749f9e87d\", 4.000, False)\n    \"\"\"默认时长: 4.00s\"\"\"\n    抖动                 = TransitionMeta(\"抖动\", False, \"7252544245444121148\", \"17223925\", \"a1b79bbc99afca7c9e5372cd050ad61d\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    抖动_II              = TransitionMeta(\"抖动 II\", False, \"7252544309830881851\", \"17223924\", \"37319b02a398332e7159f323ea93ba88\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    抠像旋转             = TransitionMeta(\"抠像旋转\", False, \"7386584387128660506\", \"73423370\", \"290a8f067f8039b1060df3d1e8d07ca0\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    拉伸                 = TransitionMeta(\"拉伸\", False, \"7231391397717217851\", \"13402655\", \"4fd21b4a2e6382ee8851c51c8f65ed73\", 1.200, True)\n    \"\"\"默认时长: 1.20s\"\"\"\n    拉伸_II              = TransitionMeta(\"拉伸 II\", False, \"7259735372039459389\", \"19137130\", \"d28fee612c51edf28da804983d220f8d\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    拉远                 = TransitionMeta(\"拉远\", False, \"6724226338418332167\", \"359365\", \"9661d5321722495c0a98959a0d617b0f\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    拍摄器               = TransitionMeta(\"拍摄器\", False, \"7100849808784495135\", \"2057168\", \"b64bebe75d492161875d4fd54725b31d\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    推近                 = TransitionMeta(\"推近\", False, \"6724226861666144779\", \"359359\", \"4d5a316f2eae582e7d0604b47feb8c32\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    撕纸拉屏             = TransitionMeta(\"撕纸拉屏\", False, \"7254847807465460280\", \"17934952\", \"c500d2310388b63f3a4e66ff0b15f6dc\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    放射                 = TransitionMeta(\"放射\", False, \"6724239584663704071\", \"4212630\", \"06cc8d49c558d57e21207f68a6a7dbc0\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    故障                 = TransitionMeta(\"故障\", False, \"6725771847444468236\", \"2918080\", \"7bec08ae5dae8806e3ba0c66622d0fd3\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    故障拼贴             = TransitionMeta(\"故障拼贴\", False, \"7397337004507140618\", \"77055395\", \"305fc94470ded4f5b633c80fb4112582\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    斜向分割             = TransitionMeta(\"斜向分割\", False, \"7085250093527339557\", \"4211687\", \"6ae9eb3ee4b08afa67e3d079a2ece505\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    星星                 = TransitionMeta(\"星星\", False, \"6751564373317128708\", \"2916678\", \"5ad3a484b1784e3f5391bf3fa7b188f4\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    星星_II              = TransitionMeta(\"星星 II\", False, \"6789847494898487822\", \"2916679\", \"16a4697aef243c1524e9581fb2f038c9\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    模糊                 = TransitionMeta(\"模糊\", False, \"6911569618171597320\", \"4212596\", \"fc1352435f88c6f284b6c6dce8552ffe\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    横向分割             = TransitionMeta(\"横向分割\", False, \"7083771238564237861\", \"4211685\", \"aa0aa4a72fc236611d3fd4bf75a12ca3\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    横向拉幕             = TransitionMeta(\"横向拉幕\", False, \"6724492948144132621\", \"2917278\", \"de63aa2d5225bb6a65b5bab8702aa1f5\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    横向模糊             = TransitionMeta(\"横向模糊\", False, \"7450031573958660645\", \"97482744\", \"38f584c24f4383e9d10037ad4ce6fa00\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    横线                 = TransitionMeta(\"横线\", False, \"6724845810892149251\", \"2918076\", \"36c1c8edb0171ea082c98d38ffa8bd36\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    气泡转场             = TransitionMeta(\"气泡转场\", False, \"7028880945671311903\", \"1433968\", \"66489506132d1314f3c7264bcd947cad\", 4.000, False)\n    \"\"\"默认时长: 4.00s\"\"\"\n    水墨                 = TransitionMeta(\"水墨\", False, \"6789847231873683976\", \"521328\", \"d1dd3dd8905f0b96be756bd34be1a84d\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    水波卷动             = TransitionMeta(\"水波卷动\", False, \"6858191497280360973\", \"878910\", \"cf9bac91349a227a6155eca9d94a8af8\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    水波向右             = TransitionMeta(\"水波向右\", False, \"6858191510865711629\", \"878909\", \"e9301bacebc6dc444aa4e6f835dd4a31\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    水波向左             = TransitionMeta(\"水波向左\", False, \"6858191524312650248\", \"878908\", \"6b6499879310b6d29e9595799829cb15\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    泛光                 = TransitionMeta(\"泛光\", False, \"6914112263645303303\", \"4202527\", \"c978e2e22e9a9768813f5fd8d486b792\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    泛白                 = TransitionMeta(\"泛白\", False, \"6949828109663212045\", \"4202528\", \"1bf6b83628ff6416a4d87865107b739e\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    波点向右             = TransitionMeta(\"波点向右\", False, \"6858191541706428941\", \"878907\", \"74c13e6250cdff7a4e860625d1098e0c\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    渐变擦除             = TransitionMeta(\"渐变擦除\", False, \"6919369138800431629\", \"1017911\", \"2fff9b60c929559bce574ab8ef2c14a7\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    滑动                 = TransitionMeta(\"滑动\", False, \"6757982416649851399\", \"4212349\", \"b99916e2936aeb2e56892ca617888694\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    漩涡                 = TransitionMeta(\"漩涡\", False, \"6851810799510360583\", \"4211780\", \"31d2de43e6711a9eeb831d60529d0393\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    烟雾转场             = TransitionMeta(\"烟雾转场\", False, \"7450031574923350555\", \"97482746\", \"67dc647cf7b1c45ada91d32bebc2bde7\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    爱心                 = TransitionMeta(\"爱心\", False, \"6748289440130535947\", \"2916677\", \"2382e2096918b63a0f8e75f720d7d892\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    爱心_II              = TransitionMeta(\"爱心 II\", False, \"6789846472343949837\", \"2916682\", \"0c04684566638932cb6f6d86cdfabda6\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    爱心上升             = TransitionMeta(\"爱心上升\", False, \"6789846246069637640\", \"2916681\", \"2a3c5439ce79e6113843a2b7135bd21a\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    电视故障_I           = TransitionMeta(\"电视故障 I\", False, \"7046293801123451405\", \"2918081\", \"feaf2e85b909a123ea71728f9b61fb03\", 1.600, True)\n    \"\"\"默认时长: 1.60s\"\"\"\n    电视故障_II          = TransitionMeta(\"电视故障 II\", False, \"7042278078415901192\", \"2918082\", \"a082bdaea1122bbf1aba730278d50250\", 1.600, True)\n    \"\"\"默认时长: 1.60s\"\"\"\n    画笔擦除             = TransitionMeta(\"画笔擦除\", False, \"6789846828788486664\", \"2912467\", \"4fafb5343d5c9e726278e90b5e0c1c93\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    白光快闪             = TransitionMeta(\"白光快闪\", False, \"7343136487182963211\", \"49272367\", \"c1f7073a94d22565ace1ab3023d1c154\", 0.400, True)\n    \"\"\"默认时长: 0.40s\"\"\"\n    白色墨花             = TransitionMeta(\"白色墨花\", False, \"6858191556055142919\", \"878906\", \"775ccf71576e2b8fb075f0e61e980923\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    白色烟雾             = TransitionMeta(\"白色烟雾\", False, \"6885646856672514567\", \"947664\", \"9b679b32ec03c42932fa37b10c141bda\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    百叶窗               = TransitionMeta(\"百叶窗\", False, \"6789847331060584974\", \"521326\", \"9f37c3f6f5e84b37b3a0560803a16c30\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    眨眼                 = TransitionMeta(\"眨眼\", False, \"6864867302936941064\", \"2917719\", \"bf695506c8091f7a01ee7b1323a4d601\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    矩形分割             = TransitionMeta(\"矩形分割\", False, \"6858191571196580359\", \"878905\", \"82d6235324f8c5f830f8ccf7b1cc036b\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    窗格                 = TransitionMeta(\"窗格\", False, \"6747989545448378888\", \"368721\", \"cd6a7ff53319efa1c57690f61c8737a0\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    立方体               = TransitionMeta(\"立方体\", False, \"6785042367498949127\", \"519784\", \"be45578bb628a21eaae268a8d8df868f\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    竖向分割             = TransitionMeta(\"竖向分割\", False, \"7083771107706147364\", \"4211686\", \"7cc017d4e1b6ab58ec4b6900432522ff\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    竖向拉幕             = TransitionMeta(\"竖向拉幕\", False, \"6726711903684399619\", \"2917285\", \"84f91be5a43cc6a9d03505a465418206\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    竖向模糊             = TransitionMeta(\"竖向模糊\", False, \"7125661387568714247\", \"3796327\", \"cda4099e3f207ef1509f27d0b1ab01c1\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    竖向模糊_II          = TransitionMeta(\"竖向模糊 II\", False, \"7280837008421818936\", \"23404229\", \"85e381982a94778e003f3acc9527d5cf\", 0.660, True)\n    \"\"\"默认时长: 0.66s\"\"\"\n    竖线                 = TransitionMeta(\"竖线\", False, \"6724846536041173511\", \"2918077\", \"75019c1486b2366675d95602f58430e2\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    箭头向右             = TransitionMeta(\"箭头向右\", False, \"6858191587554365966\", \"878904\", \"fa0cfb9e822393af86c6df4a8477cd63\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    粒子                 = TransitionMeta(\"粒子\", False, \"6855565313715474952\", \"4212632\", \"389d08f0700dd3e646a1e92289d84d58\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    翻篇                 = TransitionMeta(\"翻篇\", False, \"7034446419641504264\", \"4212350\", \"e3a2c5e0bd63416b5f64e489beb8a702\", 1.300, True)\n    \"\"\"默认时长: 1.30s\"\"\"\n    翻页                 = TransitionMeta(\"翻页\", False, \"6747979085894390279\", \"368701\", \"2f157ee5d78c197efc26f8ed37490573\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    色差逆时针           = TransitionMeta(\"色差逆时针\", False, \"6940500629013926413\", \"1069274\", \"b235f0bc4c9eb6e090358c09c7b0ffb0\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    色差顺时针           = TransitionMeta(\"色差顺时针\", False, \"6940520116035523080\", \"1069374\", \"8661a7a8b19762d35506cd6513d8ed3e\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    色彩溶解             = TransitionMeta(\"色彩溶解\", False, \"6724846004274729480\", \"322583\", \"b5f962a334dcc141bbc3dae0f5777564\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    色彩溶解_II          = TransitionMeta(\"色彩溶解 II\", False, \"6724866927933526542\", \"322625\", \"8179e342f9b24dd1817c56f7ef1f8f9b\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    色彩溶解_III         = TransitionMeta(\"色彩溶解 III\", False, \"6724867032312975875\", \"322627\", \"293a03bd140d09b0c616f879bda235e1\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    蓝色线条             = TransitionMeta(\"蓝色线条\", False, \"6858191605384352263\", \"878903\", \"d4d2996c3f6cf97fb8602f825d98a4da\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    逆时针旋转           = TransitionMeta(\"逆时针旋转\", False, \"6724226603372515853\", \"359437\", \"048170ae8df06f9d6964691b1e472c6a\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    逆时针旋转_II        = TransitionMeta(\"逆时针旋转 II\", False, \"7252544659245765179\", \"17224251\", \"1b2c634ea54e81de34cb6d31848908af\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    镜像翻转             = TransitionMeta(\"镜像翻转\", False, \"6848792278710882824\", \"2917288\", \"1109c08965141f90b9174c38e85c8cab\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    闪白                 = TransitionMeta(\"闪白\", False, \"6724845376098013708\", \"322575\", \"9732e719b858a6dbb648d4fb459fde08\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    闪白_II              = TransitionMeta(\"闪白 II\", False, \"7306818286413419017\", \"31619869\", \"9a1089fc9fefe2a79a71c37c1bc5831a\", 0.300, True)\n    \"\"\"默认时长: 0.30s\"\"\"\n    闪黑                 = TransitionMeta(\"闪黑\", False, \"6724239388189921806\", \"321493\", \"3bca53e9f3dfa2c184fbee96438ea097\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    雪花故障             = TransitionMeta(\"雪花故障\", False, \"6724866446842663431\", \"2918079\", \"71cabe836d9c88afd44f43654ba67fa7\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    雾化                 = TransitionMeta(\"雾化\", False, \"7216171159589491259\", \"11387229\", \"945e1560e2c65277b4bd4127cd479746\", 1.200, True)\n    \"\"\"默认时长: 1.20s\"\"\"\n    震动                 = TransitionMeta(\"震动\", False, \"7198100561235808825\", \"9261771\", \"e46204ca1e4fcf76d1b1c86e852e862d\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    顺时针旋转           = TransitionMeta(\"顺时针旋转\", False, \"6724226684721041932\", \"359421\", \"d6d0c76fb82ca2a355de138d94a94780\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    顺时针旋转_II        = TransitionMeta(\"顺时针旋转 II\", False, \"7252544556799889975\", \"17224317\", \"5e81c58bf217a2bdaf479275e412ea93\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    频闪                 = TransitionMeta(\"频闪\", False, \"7083767957662208549\", \"1674710\", \"35a76b77dd0812f7012911109db35799\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    风车                 = TransitionMeta(\"风车\", False, \"6748286529921094157\", \"369485\", \"367b8b51b2eeb63eb2009bf5b356bc2f\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    马赛克               = TransitionMeta(\"马赛克\", False, \"6724866519022440967\", \"4212631\", \"eed93b26d9cd6296b10d2f5065ee396e\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    黑色块               = TransitionMeta(\"黑色块\", False, \"6724866346569437710\", \"2918078\", \"357e865f3bb0c6529ee882ebf279d7c6\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    黑色烟雾             = TransitionMeta(\"黑色烟雾\", False, \"6885647017452769805\", \"947663\", \"fa02f80c28a9671a206c2ccf17b41c58\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n\n    # 付费特效\n    _2024回忆流          = TransitionMeta(\"2024回忆流\", True, \"7448898555617481225\", \"97032533\", \"e21c31c4d68bb535ab10905af32a8486\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    X形震闪              = TransitionMeta(\"X形震闪\", True, \"7403208545111380531\", \"79087478\", \"07f3707be8fced05b149f16252c3aabc\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    万花筒               = TransitionMeta(\"万花筒\", True, \"7257806429086552632\", \"18722268\", \"0aa1d28fdb90725586089436e6ccd243\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    三屏放大             = TransitionMeta(\"三屏放大\", True, \"7320254175466492467\", \"38586528\", \"b59a3df958aeeba78f1ceb075be189f0\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    三屏滑入             = TransitionMeta(\"三屏滑入\", True, \"7312438185261273650\", \"34443818\", \"09dc4fee56acca3e6f1c104277b8695d\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    三屏闪切             = TransitionMeta(\"三屏闪切\", True, \"7252599996254523959\", \"17242682\", \"2bc234d945f15d93f3d292e64042d69d\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    下滑                 = TransitionMeta(\"下滑\", True, \"7309694074015977993\", \"32998125\", \"9c54ccb7b27ab98f7c3bb03a5d4acc4b\", 0.550, True)\n    \"\"\"默认时长: 0.55s\"\"\"\n    中心切开             = TransitionMeta(\"中心切开\", True, \"7450031574931739146\", \"97482739\", \"bd58325fc11ddc0a5b865da741d48215\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    二次元烟效           = TransitionMeta(\"二次元烟效\", True, \"7436273714729062921\", \"90037010\", \"e4a8dcb9c3a3244f38fbafd54df1875d\", 1.920, True)\n    \"\"\"默认时长: 1.92s\"\"\"\n    云朵_II              = TransitionMeta(\"云朵 II\", True, \"6955760408737092132\", \"2912470\", \"5a8914a3658f88265bbeda060a7c79aa\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    亮点模糊             = TransitionMeta(\"亮点模糊\", True, \"7123135366504124936\", \"3705757\", \"b48f47c097e83842d1c0f919d9c67af6\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    便利贴               = TransitionMeta(\"便利贴\", True, \"7302023728441856549\", \"29871972\", \"a5a04de1e339c4d4907e26ff6b229563\", 1.100, True)\n    \"\"\"默认时长: 1.10s\"\"\"\n    信号故障             = TransitionMeta(\"信号故障\", True, \"7288149307197231676\", \"25265947\", \"f23f60f3bee4fac6368268a1406ccaf7\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    信号故障_II          = TransitionMeta(\"信号故障 II\", True, \"7342791345162949183\", \"49094731\", \"b5537d48d5d72d9707bb4641d51ecc73\", 0.670, False)\n    \"\"\"默认时长: 0.67s\"\"\"\n    倾斜拉伸             = TransitionMeta(\"倾斜拉伸\", True, \"7383960886131560960\", \"72481265\", \"c87e594192131b1b82e1c34cd383f807\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    倾斜拉开             = TransitionMeta(\"倾斜拉开\", True, \"7450031573958660646\", \"97482745\", \"5e528175496005ab698956e2ae692828\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    倾斜模糊             = TransitionMeta(\"倾斜模糊\", True, \"7355762441533264394\", \"56268173\", \"0b88f86366c21c3ebd2bcc8df140810d\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    像素冲屏             = TransitionMeta(\"像素冲屏\", True, \"6981689835534684702\", \"1182216\", \"b7f8e6cd03560d1f52e1270dcf7c9ba4\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    光束                 = TransitionMeta(\"光束\", True, \"6982127832042312206\", \"4202531\", \"84525ee78728b5cce44c8404d9f50b0d\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    全息投影             = TransitionMeta(\"全息投影\", True, \"7298230450768581129\", \"28518430\", \"95a2a049736e0843b5984e0090276f7b\", 0.400, True)\n    \"\"\"默认时长: 0.40s\"\"\"\n    六边形变焦           = TransitionMeta(\"六边形变焦\", True, \"7182413216276812346\", \"7824963\", \"faf521d87b90c79031bfd08d687df52a\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    冲屏扭曲             = TransitionMeta(\"冲屏扭曲\", True, \"7359133728313971227\", \"58099421\", \"2fb5734ab118c745bfa0596264533e54\", 0.900, True)\n    \"\"\"默认时长: 0.90s\"\"\"\n    几何分割             = TransitionMeta(\"几何分割\", True, \"7130139199394550303\", \"3985085\", \"4f6209fcc7e8746a7c1e43d8a1704827\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    几何滑动             = TransitionMeta(\"几何滑动\", True, \"7437386424036364837\", \"90546381\", \"954c56284f79c2d01b291802cc6449e1\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    分屏下滑             = TransitionMeta(\"分屏下滑\", True, \"7337974537683735080\", \"46873416\", \"eb4e4368773f40a8c807e77497acab4f\", 0.900, True)\n    \"\"\"默认时长: 0.90s\"\"\"\n    前后对比             = TransitionMeta(\"前后对比\", True, \"7205856572994490935\", \"10139297\", \"f38bc39938f58a4ee3f9c7bfcf4f524f\", 1.200, True)\n    \"\"\"默认时长: 1.20s\"\"\"\n    剧烈摇晃             = TransitionMeta(\"剧烈摇晃\", True, \"7367356130307084838\", \"63047898\", \"4ffdc4b55688e65262a229d5e7b987ca\", 0.900, True)\n    \"\"\"默认时长: 0.90s\"\"\"\n    卡片弹出             = TransitionMeta(\"卡片弹出\", True, \"7384334283659285032\", \"72605929\", \"67660fa9cdb387454a59d3a747cff6ef\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    发光变焦             = TransitionMeta(\"发光变焦\", True, \"7402999668767986191\", \"79046595\", \"9faeac55ef029bce5e933ff4022dfe1d\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    叠化扭曲             = TransitionMeta(\"叠化扭曲\", True, \"7439255870896083466\", \"92006146\", \"c0d00a409f16dab9ebe8a94802a3a757\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    可爱爆炸             = TransitionMeta(\"可爱爆炸\", True, \"7187674415268631101\", \"8375167\", \"75942cf09b7e84526a357898a47c18bb\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    可爱龙龙             = TransitionMeta(\"可爱龙龙\", True, \"7332697146929451546\", \"44314889\", \"9a498314d92e4fc192efe64608b40b60\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    吃掉                 = TransitionMeta(\"吃掉\", True, \"7372506069328728585\", \"66629623\", \"64b8f472cc109cccd9c50e210331af43\", 0.900, True)\n    \"\"\"默认时长: 0.90s\"\"\"\n    后台切换             = TransitionMeta(\"后台切换\", True, \"7320129407799005734\", \"38530921\", \"c5092413343f5e808ffc27ab8b02e7c4\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    向上波动             = TransitionMeta(\"向上波动\", True, \"7148734739807998495\", \"4861515\", \"69a520845b900b142b203cf2e677abd5\", 5.000, True)\n    \"\"\"默认时长: 5.00s\"\"\"\n    向下抖动             = TransitionMeta(\"向下抖动\", True, \"7338709911791997480\", \"47241669\", \"1a44879e265bc89746e30f59d2ff0245\", 1.300, True)\n    \"\"\"默认时长: 1.30s\"\"\"\n    向下拖拽             = TransitionMeta(\"向下拖拽\", True, \"7199528468244075067\", \"9382531\", \"f1d490e1e2a87013bee63a8aa4191f9f\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    向左拉屏             = TransitionMeta(\"向左拉屏\", True, \"7089311972235153950\", \"1722934\", \"21538bc8fa278603f8e944fc405a65c9\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    向左波动             = TransitionMeta(\"向左波动\", True, \"7126772940451877406\", \"3971081\", \"cbffe80a580575becb3beb3bcbd5cc09\", 5.000, True)\n    \"\"\"默认时长: 5.00s\"\"\"\n    喜欢                 = TransitionMeta(\"喜欢\", True, \"7070430644563612191\", \"1600478\", \"945ee55ddc4b7c9762b55c0ee302bdce\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    四屏转换             = TransitionMeta(\"四屏转换\", True, \"7337612480610308649\", \"46644610\", \"e7bd3aacd0daeafdf20d93d4a171a846\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    四格展开             = TransitionMeta(\"四格展开\", True, \"7412560964198863394\", \"81987893\", \"d204cd232ac137532ff751ff09b5d0a7\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    回忆                 = TransitionMeta(\"回忆\", True, \"6748220149284737550\", \"4211778\", \"48a73d2ca44a59d8faf88ab0c4bb39f6\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    回忆_II              = TransitionMeta(\"回忆 II\", True, \"6748220462746046989\", \"4211779\", \"bfb17d87ed3db6332a6e0855299809d9\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    回忆拉屏             = TransitionMeta(\"回忆拉屏\", True, \"7184682990901924410\", \"8027945\", \"3bc26bcea93ea43b349c60c28bea394f\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    回忆拉屏_II          = TransitionMeta(\"回忆拉屏 II\", True, \"7306440470119322139\", \"31456359\", \"2464d4afc9c5f43072935915c6a86c29\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    图片放大             = TransitionMeta(\"图片放大\", True, \"7434055685576348170\", \"89190525\", \"4974e799766ed1567d4e5bfafa79e14f\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    圆形分割             = TransitionMeta(\"圆形分割\", True, \"7083435788322476581\", \"4211684\", \"2bb3ad90a4eb3a2563b87c300e0ae8a1\", 1.500, False)\n    \"\"\"默认时长: 1.50s\"\"\"\n    圆盘旋转             = TransitionMeta(\"圆盘旋转\", True, \"7341334144485429810\", \"48516414\", \"835a263f9afbb614cfc5467343968642\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    圣诞光斑             = TransitionMeta(\"圣诞光斑\", True, \"7450334536455426569\", \"97572058\", \"431fcb4417f60f17fbc7f1e8ed95c33c\", 1.030, True)\n    \"\"\"默认时长: 1.03s\"\"\"\n    圣诞光斑II           = TransitionMeta(\"圣诞光斑II\", True, \"7451488401062105610\", \"98049569\", \"c98322f188fcf08cfe380380da7d4e3b\", 1.030, True)\n    \"\"\"默认时长: 1.03s\"\"\"\n    圣诞树               = TransitionMeta(\"圣诞树\", True, \"7302357935902954035\", \"29976594\", \"8c40262df8758d19446264aa5749008a\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    圣诞礼盒             = TransitionMeta(\"圣诞礼盒\", True, \"7447067834628182578\", \"96154390\", \"6da15163fec7a5af3ab7a25e44f94da9\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    复古叠影             = TransitionMeta(\"复古叠影\", True, \"7200638304591548985\", \"9529419\", \"078be6db2b8d8abded47cbd72f5635df\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    复古放映_II          = TransitionMeta(\"复古放映 II\", True, \"7240050497804046908\", \"14607947\", \"9891a08898646c3795cab650979bf0dc\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    复古漏光             = TransitionMeta(\"复古漏光\", True, \"7181752495150993957\", \"8104139\", \"0af78adb0da721bbe253b096b8152851\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    复古漏光_II          = TransitionMeta(\"复古漏光 II\", True, \"7287881053534949943\", \"25193261\", \"1789e06f18340fbcbd30e6757f10ba75\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    复古胶片             = TransitionMeta(\"复古胶片\", True, \"7261814111816651322\", \"19552395\", \"c5686c7e832a5e8c178c5cadb42d9ab4\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    多层环形             = TransitionMeta(\"多层环形\", True, \"7373523970538082866\", \"67116644\", \"cf6da6be1066054f86c4524fa6494d8e\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    多屏定格             = TransitionMeta(\"多屏定格\", True, \"7287860606395224613\", \"25184085\", \"c12aeac3828eb06fd5d0f865ee7041d1\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    大圆盘               = TransitionMeta(\"大圆盘\", True, \"7362104359682839055\", \"59713023\", \"9d6a02b47846369cec6d19a35826570d\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    大波浪               = TransitionMeta(\"大波浪\", True, \"7426688369653977638\", \"86769062\", \"e63143bff5e6394a018f2b802e1d832e\", 0.833, True)\n    \"\"\"默认时长: 0.83s\"\"\"\n    字母拼贴             = TransitionMeta(\"字母拼贴\", True, \"7314304549575987749\", \"35402126\", \"24be4f664fcf760c00d897362194e276\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    射灯                 = TransitionMeta(\"射灯\", True, \"7368775489445433883\", \"63886272\", \"23706ad60c2258a524da320eca564d12\", 1.600, True)\n    \"\"\"默认时长: 1.60s\"\"\"\n    小喇叭               = TransitionMeta(\"小喇叭\", True, \"7070430823597478407\", \"1600476\", \"3707101142d3069789f3d821cdb7bc35\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    小恶魔               = TransitionMeta(\"小恶魔\", True, \"7075598043252265509\", \"1628344\", \"c9a87dfafa58fbc0d401fc182fbaf6fc\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    左移弹动             = TransitionMeta(\"左移弹动\", True, \"7312690473108247078\", \"34525642\", \"fa3f7df94e7fc6a7dfaee203590aff47\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    幻影                 = TransitionMeta(\"幻影\", True, \"7218040359715082809\", \"11634125\", \"4a1a61e615eb94e37e2c198dd4602107\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    幻觉                 = TransitionMeta(\"幻觉\", True, \"7395044376621093391\", \"76465118\", \"cb9796c59a719185df8c9c5d1922b061\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    开心                 = TransitionMeta(\"开心\", True, \"7073053544839909919\", \"1610838\", \"0d80e7d2b7171236732668e91b849120\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    弹出                 = TransitionMeta(\"弹出\", True, \"7394709307842892303\", \"76381219\", \"5c7ab5f82d4253e2225b57ba734edd3a\", 0.900, True)\n    \"\"\"默认时长: 0.90s\"\"\"\n    弹动发光             = TransitionMeta(\"弹动发光\", True, \"7347897562436735503\", \"51950360\", \"31bdfcfe5852df71426d22fc02293698\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    彩色像素             = TransitionMeta(\"彩色像素\", True, \"7096015235953201701\", \"4212518\", \"d91c7ef4be8808bddec8a1a119f78da7\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    彩色滑片             = TransitionMeta(\"彩色滑片\", True, \"7437386424036381234\", \"90546380\", \"08a7fd3434943bdd3dc0c2f6d9714989\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    往上翻页             = TransitionMeta(\"往上翻页\", True, \"7461951141333439013\", \"102053853\", \"ef160e3ca5fdb97a5919130b278bd745\", 1.040, True)\n    \"\"\"默认时长: 1.04s\"\"\"\n    微抖动               = TransitionMeta(\"微抖动\", True, \"7368739347845091877\", \"63860874\", \"9870ae40f2c8a325debc06d25ef46895\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    心形叠化             = TransitionMeta(\"心形叠化\", True, \"7264829174601224764\", \"20224653\", \"24559e84f2cfae6bbfd86d47bb8f60f9\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    快涂擦除             = TransitionMeta(\"快涂擦除\", True, \"7450031573954466331\", \"97482742\", \"584bed7ede0c38de9d86fb5e9199ec29\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    快速缩放             = TransitionMeta(\"快速缩放\", True, \"7382154814144123392\", \"71890617\", \"bbedbf5ac1b865d1e1395d4d402ce5fa\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    快速震闪             = TransitionMeta(\"快速震闪\", True, \"7403364394404418074\", \"79172318\", \"5d1d93e09913898ffd9140351d7a9224\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    快门                 = TransitionMeta(\"快门\", True, \"6882983860615778823\", \"2917720\", \"2df569fefb5004c041af5509c10d6c53\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    惊悚屏闪             = TransitionMeta(\"惊悚屏闪\", True, \"7425528298395931187\", \"86397088\", \"7bad249a916e313a5e2f422291e9d4e9\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    手机屏放大           = TransitionMeta(\"手机屏放大\", True, \"7447351620649620005\", \"96240495\", \"47f7a2d93348de0cc3363f8bed9e27b8\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    扫光                 = TransitionMeta(\"扫光\", True, \"7106765945305043463\", \"4202535\", \"333aa7e9d8b24e358ea60784ce47b6fe\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    扭曲弹动             = TransitionMeta(\"扭曲弹动\", True, \"7402970650379293199\", \"79044291\", \"014956443b20f5c5e87edf79fe2aa5e3\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    扭曲旋入             = TransitionMeta(\"扭曲旋入\", True, \"7373640088091103763\", \"67190756\", \"2f0a8143624bfc061ae9db4cb785029f\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    扭曲溶解             = TransitionMeta(\"扭曲溶解\", True, \"7374259106502152741\", \"67617874\", \"756df14869da51538ed41e2bfac3b779\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    扭转弹动             = TransitionMeta(\"扭转弹动\", True, \"7344986966145896994\", \"50231600\", \"e5d36f065e3f0e8801c43a625a7d9947\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    抖动放大             = TransitionMeta(\"抖动放大\", True, \"7260415521852494397\", \"19272888\", \"e4cafc076ecab223a39a26fe6f05b6db\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    抖动缩小             = TransitionMeta(\"抖动缩小\", True, \"7291972229087105563\", \"26488746\", \"6e78a0c97c60562573a30342882a240f\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    抖动缩小_II          = TransitionMeta(\"抖动缩小  II\", True, \"7316783851206873651\", \"36841926\", \"137d3f03fbd4dddbc6a2a0dd1f371e17\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    折痕胶带             = TransitionMeta(\"折痕胶带\", True, \"7436273714733257225\", \"90037011\", \"949b5a139458534e713b4751f89cc366\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    抽象前景             = TransitionMeta(\"抽象前景\", True, \"7104215831919202853\", \"2459634\", \"88b3ead3e00313684cd868d51c1173c9\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    抽象前景_II          = TransitionMeta(\"抽象前景 II\", True, \"7108564115529929229\", \"2870170\", \"b8628f4b1d6fc27447dfad6a5f25beb4\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    拉开                 = TransitionMeta(\"拉开\", True, \"7384323685026370098\", \"72601002\", \"828b81127e669508f999900bff18cf2a\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    拉框入屏             = TransitionMeta(\"拉框入屏\", True, \"7297077423487586826\", \"28115429\", \"bfc8a51d2b304be3dd36a68331f8d0f8\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    拍摄器_II            = TransitionMeta(\"拍摄器 II\", True, \"7109727014780670495\", \"2958464\", \"5483f878a302c6d7879bd566cebab543\", 0.900, True)\n    \"\"\"默认时长: 0.90s\"\"\"\n    拍摄器_III           = TransitionMeta(\"拍摄器 III\", True, \"7107542030976291336\", \"2792048\", \"36c9b870a00e16365421398ac4e51652\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    挤压分屏             = TransitionMeta(\"挤压分屏\", True, \"7435897594074632713\", \"89895302\", \"ca0072e8c95318ca9babfa5a6d699cac\", 0.830, True)\n    \"\"\"默认时长: 0.83s\"\"\"\n    推近_II              = TransitionMeta(\"推近 II\", True, \"7290852476259930685\", \"26135688\", \"94815943a86e741a5fec1737fbb46d60\", 0.900, True)\n    \"\"\"默认时长: 0.90s\"\"\"\n    推远_II              = TransitionMeta(\"推远 II\", True, \"7360987817066893862\", \"59043083\", \"0a10553e75180add06fd336bf16fa8aa\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    摄像机               = TransitionMeta(\"摄像机\", True, \"7070047850960261668\", \"1598384\", \"bb0b9fa428e5a3fde828c03022b5082d\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    摇晃描边             = TransitionMeta(\"摇晃描边\", True, \"7372137986877559335\", \"66403340\", \"0a5449cf1ca4c9fb473ff664ea23185b\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    摇晃震动             = TransitionMeta(\"摇晃震动\", True, \"7343618757530489379\", \"49545855\", \"c911cc41c158afbd43636d1aa465e1d2\", 1.300, True)\n    \"\"\"默认时长: 1.30s\"\"\"\n    摇镜                 = TransitionMeta(\"摇镜\", True, \"7305969268259033609\", \"31254345\", \"f215c106100f76dcf6c550d0f8217ecb\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    撕纸                 = TransitionMeta(\"撕纸\", True, \"6875627914444935694\", \"2912468\", \"131ae40c737ab9f5c79e35e3639a4bad\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    撕纸掉落             = TransitionMeta(\"撕纸掉落\", True, \"7218114518314914365\", \"11661051\", \"42fa2f7a99a392e2801ad5ec5f62d73a\", 1.200, True)\n    \"\"\"默认时长: 1.20s\"\"\"\n    收缩抖动             = TransitionMeta(\"收缩抖动\", True, \"7347676775633130024\", \"51859926\", \"88939867fef0a71b39f549558d724d31\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    放大左移             = TransitionMeta(\"放大左移\", True, \"7347582471111709236\", \"51784590\", \"a2c4ddc0f96c5694e941d738ed52cdf4\", 1.300, True)\n    \"\"\"默认时长: 1.30s\"\"\"\n    放大镜               = TransitionMeta(\"放大镜\", True, \"7313974602156216858\", \"35244988\", \"91aee5fc06c85dda958101a677f19c0b\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    故障扫描             = TransitionMeta(\"故障扫描\", True, \"7425528124013548059\", \"86396968\", \"87bd40bfa4f188fa096a161d68c35037\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    故障模糊             = TransitionMeta(\"故障模糊\", True, \"7302270954602762789\", \"29927992\", \"fc3fae70595c7bb6f943aca08dc7b9f1\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    数字矩阵             = TransitionMeta(\"数字矩阵\", True, \"7268870949548593725\", \"20983534\", \"f39bf079c6066cbfee7c5eca1491b276\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    斜向模糊             = TransitionMeta(\"斜向模糊\", True, \"7125661284762128910\", \"3796323\", \"b14d9650ca6eef79d6b19c16c65166d3\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    斜向闪光             = TransitionMeta(\"斜向闪光\", True, \"7384331194978013711\", \"72603864\", \"eba796256a96c4ff0d1b331a8819c6f2\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    斜线翻页             = TransitionMeta(\"斜线翻页\", True, \"7339900424956154403\", \"47905855\", \"46d525166125a781ce8cf9c6e6370454\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    新篇章               = TransitionMeta(\"新篇章\", True, \"7174756125902901797\", \"7089439\", \"74716b2d52b85799f78903818eb3c98f\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    新篇章_II            = TransitionMeta(\"新篇章 II\", True, \"7174754977544409657\", \"7089435\", \"6c1c52a50f842600c69417cf38adc113\", 1.600, True)\n    \"\"\"默认时长: 1.60s\"\"\"\n    方形分割             = TransitionMeta(\"方形分割\", True, \"7127901205820346917\", \"3895735\", \"9f29e50ac72b66f4b0320ee1ea9d112f\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    方形变焦             = TransitionMeta(\"方形变焦\", True, \"7398512469884277260\", \"77388758\", \"93317b58455482c7f5213b943a7e01ce\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    方形模糊             = TransitionMeta(\"方形模糊\", True, \"7122721406210544164\", \"3686479\", \"8e3579bda4787d20d8c8ab1b0c68112d\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    方形模糊_II          = TransitionMeta(\"方形模糊 II\", True, \"7384005295770440201\", \"72501238\", \"301fe868bf7b1549d6d07af9405beb4a\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    方片翻转             = TransitionMeta(\"方片翻转\", True, \"7451501266246570534\", \"98063100\", \"418d4795972e2f70533f05304e796c22\", 1.100, True)\n    \"\"\"默认时长: 1.10s\"\"\"\n    旋焦                 = TransitionMeta(\"旋焦\", True, \"7215424325036282428\", \"11286537\", \"917c209246e975d4f10d9b8c8c78035f\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    旋转圆球             = TransitionMeta(\"旋转圆球\", True, \"7377722094806635048\", \"69481298\", \"34211e59f420adb42bc00b9a8d36bb6a\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    旋转圆盘             = TransitionMeta(\"旋转圆盘\", True, \"7261828356386067005\", \"19556167\", \"792fd505220632cdca8d727ecafa9866\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    旋转圆盘_II          = TransitionMeta(\"旋转圆盘 II\", True, \"7262674749258469949\", \"19727008\", \"17d1ac181dd7b623059b8aed82d2ef13\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    旋转快门             = TransitionMeta(\"旋转快门\", True, \"7350577049968316979\", \"53358879\", \"f2b536b7d3f17bc58e0e4957f517ece0\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    旋转拨盘             = TransitionMeta(\"旋转拨盘\", True, \"7368844683256009242\", \"63924504\", \"88ac2494e5cdec7f874c4157555d2d2b\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    旋转模糊             = TransitionMeta(\"旋转模糊\", True, \"7332480491058106943\", \"44259414\", \"1a28e7fbb2a177240786bd945fb9ca7e\", 1.200, True)\n    \"\"\"默认时长: 1.20s\"\"\"\n    旋转穿越             = TransitionMeta(\"旋转穿越\", True, \"7343092798993732148\", \"49228871\", \"e05493559e59bf7f4c4a9ea5a5d212de\", 1.800, True)\n    \"\"\"默认时长: 1.80s\"\"\"\n    旋转纵深             = TransitionMeta(\"旋转纵深\", True, \"7368687055225754153\", \"63822177\", \"e717dfe6ccb3c6a6c6a6f70987b1a894\", 0.900, True)\n    \"\"\"默认时长: 0.90s\"\"\"\n    旋转翻页             = TransitionMeta(\"旋转翻页\", True, \"7320577375752688165\", \"38717232\", \"31a897fbdd402adaf84724fb28ef606b\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    旋转震动             = TransitionMeta(\"旋转震动\", True, \"7326861725213397514\", \"41492871\", \"70bea2644a8dc8bc2b24102d8fa90ca4\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    无缝撕裂             = TransitionMeta(\"无缝撕裂\", True, \"7439255870896083506\", \"92006145\", \"afcefb6980d7212c51229927c39c89e0\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    无限穿越_I           = TransitionMeta(\"无限穿越 I\", True, \"7036984568536109581\", \"1465694\", \"3ee3fc9318dc2315d250f0baa1763e5b\", 1.600, True)\n    \"\"\"默认时长: 1.60s\"\"\"\n    无限穿越_II          = TransitionMeta(\"无限穿越 II\", True, \"7034717113130422791\", \"1458828\", \"b87498756c478952cf7c804234f97bbb\", 1.600, True)\n    \"\"\"默认时长: 1.60s\"\"\"\n    日历转场             = TransitionMeta(\"日历转场\", True, \"7460472998944838154\", \"101496138\", \"ca48c1fe6e5b7cdcc100469f5294820b\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    旧胶片               = TransitionMeta(\"旧胶片\", True, \"7099310030138118687\", \"1933296\", \"782110cae96a4f9ed73f6a85d0610a7a\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    旧胶片_II            = TransitionMeta(\"旧胶片 II\", True, \"7111634884153578014\", \"3114014\", \"79901fab61f0b8c2960c73a78e84e5a3\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    时光穿梭             = TransitionMeta(\"时光穿梭\", True, \"7306853312400200229\", \"31645629\", \"74eab27c1dc1a568b851a2e543682058\", 1.100, True)\n    \"\"\"默认时长: 1.10s\"\"\"\n    星光                 = TransitionMeta(\"星光\", True, \"7177201869612126777\", \"7339355\", \"2215320b9ba4138c53f1f7b9d0c58b54\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    星光叠化             = TransitionMeta(\"星光叠化\", True, \"7321658733497422363\", \"39173243\", \"f6d691dd1f991655b2826964c3883772\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    星光炸开             = TransitionMeta(\"星光炸开\", True, \"7306852010320466483\", \"31644713\", \"b7523d4d583c515035937de1c191c808\", 1.300, True)\n    \"\"\"默认时长: 1.30s\"\"\"\n    星星_III             = TransitionMeta(\"星星 III\", True, \"7293358903176204851\", \"26885516\", \"1ece838a7bfd2c8b1b0daf25d5776d22\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    星星变焦             = TransitionMeta(\"星星变焦\", True, \"7452559875839627786\", \"98464024\", \"7eeeca7c07e67b54519995ebdf71d6fc\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    星星吸入             = TransitionMeta(\"星星吸入\", True, \"7312716430875562506\", \"34540914\", \"6ce2a58bc6a3df532a3c1ca890c97394\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    星星模糊             = TransitionMeta(\"星星模糊\", True, \"7206157339253019197\", \"10169537\", \"28556f2cabd470e0da1a9ddf16d76198\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    春日光斑             = TransitionMeta(\"春日光斑\", True, \"7330599151685603875\", \"43351778\", \"16080e0cc9aa32e4342335d60dd5dfae\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    暧昧光晕             = TransitionMeta(\"暧昧光晕\", True, \"7268613185337299513\", \"20954940\", \"ab82749d799477631ae63c081ad569d1\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    曝光拉丝             = TransitionMeta(\"曝光拉丝\", True, \"7308617539452408358\", \"32432969\", \"56eaaf319007193c199f17554890abb4\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    曝光摇镜             = TransitionMeta(\"曝光摇镜\", True, \"7283720497513108025\", \"24147753\", \"e0ee1d0a29d1138f7a3b673ffbad91d5\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    未来光谱             = TransitionMeta(\"未来光谱\", True, \"7176890183940313658\", \"7307905\", \"7974c984bf60d60079cc03be5928f74d\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    未来光谱II           = TransitionMeta(\"未来光谱II\", True, \"7176914791267570232\", \"7312585\", \"524895c4bce265b44ffa8ac92bf0dd6a\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    条形模糊             = TransitionMeta(\"条形模糊\", True, \"7122387202725646862\", \"3675841\", \"0a5742430e336b3a1e1b6ff9983c5d25\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    模糊放大             = TransitionMeta(\"模糊放大\", True, \"7301280654015074842\", \"29614872\", \"7c0ef1a54495f7cd9343efe2acc57b26\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    模糊细闪             = TransitionMeta(\"模糊细闪\", True, \"7452559875839627785\", \"98464023\", \"486a1593cc532d15663279bd4a127a45\", 1.170, True)\n    \"\"\"默认时长: 1.17s\"\"\"\n    模糊缩小             = TransitionMeta(\"模糊缩小\", True, \"7297133348567126566\", \"28141206\", \"742e708ac73c3a335a41133684c488ed\", 1.200, True)\n    \"\"\"默认时长: 1.20s\"\"\"\n    横向分屏             = TransitionMeta(\"横向分屏\", True, \"7351341191184519699\", \"53798168\", \"9b32def73cc4e91d29a92bd640a92e81\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    横向滑动             = TransitionMeta(\"横向滑动\", True, \"7433711910727455242\", \"89071753\", \"9023b03b64ddd87133a3ed36e60d14a1\", 1.530, True)\n    \"\"\"默认时长: 1.53s\"\"\"\n    横向震动             = TransitionMeta(\"横向震动\", True, \"7403329110597964340\", \"79166394\", \"c3c9b35342f9cc1daa938cb512a71baa\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    横条挤压             = TransitionMeta(\"横条挤压\", True, \"7369507828668568116\", \"64687184\", \"6bbc30d59ef4fd16e4ba6656129cfd95\", 1.200, True)\n    \"\"\"默认时长: 1.20s\"\"\"\n    横移模糊             = TransitionMeta(\"横移模糊\", True, \"7316901787762430491\", \"36950128\", \"aa2ce5c9b13a62881d04f9c23aa30678\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    樱花飞舞             = TransitionMeta(\"樱花飞舞\", True, \"7462198817211814426\", \"102144538\", \"ecd91f7ebaa7817d7eab538a50147fb4\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    水滴                 = TransitionMeta(\"水滴\", True, \"7218875183413596730\", \"11765299\", \"d5fa6a1daecd2c45b0414626a69e7674\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    水滴_II              = TransitionMeta(\"水滴 II\", True, \"7231860840452854332\", \"13482623\", \"eebf40246476d57ccbf8bbdf15864864\", 0.900, True)\n    \"\"\"默认时长: 0.90s\"\"\"\n    水滴_III             = TransitionMeta(\"水滴 III\", True, \"7337571999885038130\", \"46608908\", \"32eea5171000b838f2eb74941fb751d7\", 1.100, True)\n    \"\"\"默认时长: 1.10s\"\"\"\n    水滴溶解             = TransitionMeta(\"水滴溶解\", True, \"7397337004507140646\", \"77055389\", \"ea2d35628f0f6cbc703f7632fbc0588e\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    汇聚                 = TransitionMeta(\"汇聚\", True, \"7308666709932511753\", \"32470148\", \"3bb1668888e7e87764d03b15733370fb\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    泡泡模糊             = TransitionMeta(\"泡泡模糊\", True, \"7159097688955294222\", \"5663559\", \"10478b300821fa6eccadf67b07b63208\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    波光粼粼             = TransitionMeta(\"波光粼粼\", True, \"7361758664182469157\", \"59511491\", \"da913924bc6975821de103b371d540ff\", 1.167, True)\n    \"\"\"默认时长: 1.17s\"\"\"\n    波动                 = TransitionMeta(\"波动\", True, \"7169480114860724773\", \"6500749\", \"af314da6343d025cc0f5d668d2fa0a7b\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    波动_II              = TransitionMeta(\"波动 II\", True, \"7308652550574576138\", \"32459394\", \"dd709d2dd83add664f3cbd45893438f7\", 0.400, True)\n    \"\"\"默认时长: 0.40s\"\"\"\n    波动故障             = TransitionMeta(\"波动故障\", True, \"7223312837320380983\", \"12349835\", \"bd7d819531a9d2b044f823080aa0fc1c\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    泼墨晕染             = TransitionMeta(\"泼墨晕染\", True, \"7424057373741814298\", \"85924530\", \"7b36ddff84bae2afa85432cb5fdac1f4\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    流光                 = TransitionMeta(\"流光\", True, \"7316789832833831461\", \"36847370\", \"686a5ae873f34ac400ee8ad6a8658d68\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    涂鸦放大             = TransitionMeta(\"涂鸦放大\", True, \"7239925851335168569\", \"14573363\", \"2a29109cf3c013e6f7770a28cba4154a\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    溶解推进             = TransitionMeta(\"溶解推进\", True, \"7348406367394206271\", \"52246665\", \"e6c9fda251c612d8cdf69ddef055e410\", 0.806, True)\n    \"\"\"默认时长: 0.81s\"\"\"\n    滑动压迫感           = TransitionMeta(\"滑动压迫感\", True, \"7447351620641231387\", \"96240496\", \"dd49d44cfd3e5f5b14e3275876fcc79c\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    滑动弹出             = TransitionMeta(\"滑动弹出\", True, \"7343237606043292200\", \"49343171\", \"bb190e71a692bc20d9060b22b4311896\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    滑动放大             = TransitionMeta(\"滑动放大\", True, \"7327132595190239759\", \"41576555\", \"a746b6b7c2e83275d90864d0b28173aa\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    滑块拼贴             = TransitionMeta(\"滑块拼贴\", True, \"7239990715307004477\", \"14594823\", \"c8552ba32a7e8804013a8a1b977e23c1\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    滚动立方             = TransitionMeta(\"滚动立方\", True, \"7471167302029808138\", \"105115378\", \"376cd96ec36e56b7ea5b921f402fa7f3\", 0.733, True)\n    \"\"\"默认时长: 0.73s\"\"\"\n    漩涡扭曲             = TransitionMeta(\"漩涡扭曲\", True, \"7308653984888132123\", \"32460372\", \"fedeb478c6e4d39282dfe1ad13ee653a\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    漫画撕纸             = TransitionMeta(\"漫画撕纸\", True, \"7429283264424055305\", \"87580719\", \"ac08c5a486921431e4bb175cc9b31432\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    火焰湍流             = TransitionMeta(\"火焰湍流\", True, \"7397337005375361562\", \"77055404\", \"133e52c43b2639f2a202b3b1394846bf\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    炫光                 = TransitionMeta(\"炫光\", True, \"6726707814028284423\", \"4202524\", \"a3fd6266c293496fd9480884a93fb90e\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    炫光_II              = TransitionMeta(\"炫光 II\", True, \"6950255790762496548\", \"4202530\", \"aafb556352016d087cddd1939ada20f8\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    炫光_III             = TransitionMeta(\"炫光 III\", True, \"6950255930160189988\", \"4202529\", \"5ed29701053e9f7640ecf8dcfc34c7cc\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    炫光弹动             = TransitionMeta(\"炫光弹动\", True, \"7348337133838406194\", \"52201950\", \"113a7490b314d57a7dea4826e056ff99\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    炫光扫描             = TransitionMeta(\"炫光扫描\", True, \"7371717412736995903\", \"66131585\", \"4bd676f9001765af20ac02b252da5575\", 1.467, True)\n    \"\"\"默认时长: 1.47s\"\"\"\n    炫光扭动             = TransitionMeta(\"炫光扭动\", True, \"7435897594703778330\", \"89895303\", \"a1fef85b1aaae8625494711a77ac1903\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    炸弹                 = TransitionMeta(\"炸弹\", True, \"7076321483282190878\", \"1632990\", \"e0a1a6b556395c054ce97d73b6d1ef25\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    烟花光斑             = TransitionMeta(\"烟花光斑\", True, \"7449596462670811686\", \"97260760\", \"e7db0e4df4fad1aeb19413ebdb8e940d\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    烟雾弹               = TransitionMeta(\"烟雾弹\", True, \"7366189026677625359\", \"62284094\", \"58dced44162cefabdc709058b7583d65\", 1.400, True)\n    \"\"\"默认时长: 1.40s\"\"\"\n    热成像               = TransitionMeta(\"热成像\", True, \"7435897594074632742\", \"89895304\", \"ed973037edcf37c1c8272776af27ef7b\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    燃烧                 = TransitionMeta(\"燃烧\", True, \"7089309494550729253\", \"1722848\", \"0f42e514001c30186e1c9c68e1ebfee9\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    燃烧_II              = TransitionMeta(\"燃烧 II\", True, \"7089307363806548510\", \"1722824\", \"164c1073bde892dcd9f21d8026fb3cbd\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    燃烧_III             = TransitionMeta(\"燃烧 III\", True, \"7088523814102897188\", \"1714536\", \"da10f2f4ae0aa70ad4d61b2c750aef6b\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    爆米花               = TransitionMeta(\"爆米花\", True, \"7075173004560306724\", \"1623902\", \"3b70ab38b467c15d463b018b05a420e2\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    爆闪                 = TransitionMeta(\"爆闪\", True, \"7255132261584998969\", \"18010162\", \"c533ae1fe681ec0903b6d631fec5caf6\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    爆闪_II              = TransitionMeta(\"爆闪 II\", True, \"7259635767096382011\", \"19102212\", \"96e672a98b09ef157224e8b1399ae316\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    爱心冲击             = TransitionMeta(\"爱心冲击\", True, \"7405941767867994624\", \"80045036\", \"b9cc7fee0ef181378b070ddd3b96c08f\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    爱心模糊             = TransitionMeta(\"爱心模糊\", True, \"7226945634312393274\", \"12851969\", \"3dfdf5cbfe44b5271b9e41acb15ddc37\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    爱心气球             = TransitionMeta(\"爱心气球\", True, \"7267895649599754808\", \"20810100\", \"6b969705ffc616c0ad03c1e0fc039bd7\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    爱心软糖             = TransitionMeta(\"爱心软糖\", True, \"7330845783006122515\", \"43363938\", \"ef23b64fbbf32418248446c9f4703589\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    爱心遮罩             = TransitionMeta(\"爱心遮罩\", True, \"7468589287299093029\", \"104143934\", \"c4e6d4a6c68554cc17b620d2ffa8c41e\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    环回推近             = TransitionMeta(\"环回推近\", True, \"7449266731089924658\", \"97152408\", \"3ad22aeec6b193f1d3718330bafdb4ac\", 1.533, True)\n    \"\"\"默认时长: 1.53s\"\"\"\n    环形色散             = TransitionMeta(\"环形色散\", True, \"7384745397022888488\", \"72761824\", \"608a4f0f4729821ff115f72bfb57a909\", 0.900, True)\n    \"\"\"默认时长: 0.90s\"\"\"\n    玻璃破碎             = TransitionMeta(\"玻璃破碎\", True, \"7242225450628420133\", \"14930013\", \"55aa86f7d52f2e3471574b51aedfffe8\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    玻璃破碎_II          = TransitionMeta(\"玻璃破碎 II\", True, \"7249622034878042661\", \"16373363\", \"f77fe839adb1ca6cddc086834a514b79\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    珠光模糊             = TransitionMeta(\"珠光模糊\", True, \"7181370814594290234\", \"7738323\", \"75984d0cab40abfd59ec5d7ede711496\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    生气                 = TransitionMeta(\"生气\", True, \"7070430937900651016\", \"1600475\", \"be7a4f8a24aafb10db343e51e72fead2\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    电光                 = TransitionMeta(\"电光\", True, \"7186953120490983997\", \"8298317\", \"6142261f8bd0361a56d15a3d408c20ab\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    电光_II              = TransitionMeta(\"电光 II\", True, \"7292990637350064690\", \"26773684\", \"e8a9edb89dae57afad5dfd6b707a6b57\", 1.300, True)\n    \"\"\"默认时长: 1.30s\"\"\"\n    电流                 = TransitionMeta(\"电流\", True, \"7402545346741539365\", \"78884363\", \"435f3111d5b73043c9da4fb52bc1c5aa\", 1.167, True)\n    \"\"\"默认时长: 1.17s\"\"\"\n    畸变回弹             = TransitionMeta(\"畸变回弹\", True, \"7434746460186350130\", \"89406897\", \"3b87acb614610bef693ceeb28833378b\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    百叶窗_II            = TransitionMeta(\"百叶窗 II\", True, \"7389190159989740072\", \"74345085\", \"0786c1d4057bf47fbdb5f6bfeab8a0f3\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    相机缩小             = TransitionMeta(\"相机缩小\", True, \"7462628239286997531\", \"102354878\", \"5a4bcb0da1b9aa3a412230ecf4009cf2\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    相片切换             = TransitionMeta(\"相片切换\", True, \"7324946677305971226\", \"40583461\", \"0bcab7309cd00dc17a95071b62282d0a\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    相片拼贴             = TransitionMeta(\"相片拼贴\", True, \"7212523710685647420\", \"10917367\", \"bdff0041ed99b812568c15e5a7c5d798\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    礼物落下             = TransitionMeta(\"礼物落下\", True, \"7462627865197023782\", \"102354705\", \"bc569b8205db8dad3eb195df697dfda8\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    空间上移             = TransitionMeta(\"空间上移\", True, \"7405560276180800009\", \"79942985\", \"7043746b8dd5592ffa7e5e8baec3e504\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    空间弹动             = TransitionMeta(\"空间弹动\", True, \"7265321906830578235\", \"20330329\", \"e86c774726c177ee17fd90f63750cf78\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    空间弹动_II          = TransitionMeta(\"空间弹动 II\", True, \"7269664953584325179\", \"21121644\", \"adf0c9abb5c1399909318bb603f28ad1\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    空间弹动_III         = TransitionMeta(\"空间弹动 III\", True, \"7265322078276948535\", \"20330339\", \"d8c4ad960be7cfbe8093fa26076ce000\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    空间弹动_IV          = TransitionMeta(\"空间弹动 IV\", True, \"7270393974517404215\", \"21261060\", \"fb42b8f0a30fe4a0c81c292460aabdbd\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    空间旋转             = TransitionMeta(\"空间旋转\", True, \"7127563142359421471\", \"3878325\", \"07c37c8bcf40b83415aa6f223de2cd8a\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    空间旋转_II          = TransitionMeta(\"空间旋转 II\", True, \"7137983390896099871\", \"4360464\", \"43927ed137278ab2c3cf8a4933cb4169\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    空间旋转_III         = TransitionMeta(\"空间旋转 III\", True, \"7138602593751667207\", \"4382158\", \"7baa76e42959ee273c278389d359fc59\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    空间翻转             = TransitionMeta(\"空间翻转\", True, \"7218870491400901157\", \"11764147\", \"0ea4c7c316341196f21440967330f063\", 1.200, True)\n    \"\"\"默认时长: 1.20s\"\"\"\n    空间翻转_II          = TransitionMeta(\"空间翻转 II\", True, \"7223591053973000761\", \"12371701\", \"ee9309f01cc53522243198c4ba69ab96\", 1.200, True)\n    \"\"\"默认时长: 1.20s\"\"\"\n    空间跳跃             = TransitionMeta(\"空间跳跃\", True, \"7309399317662405146\", \"32858947\", \"82c5ef6e77c7178c7ca45d8549b87578\", 0.633, True)\n    \"\"\"默认时长: 0.63s\"\"\"\n    穿越                 = TransitionMeta(\"穿越\", True, \"7152422191944962567\", \"5083535\", \"80fb974789637e8175557c7c3e649c0e\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    穿越_II              = TransitionMeta(\"穿越 II\", True, \"7152354215132664357\", \"5076093\", \"aa3181f829fe16f72540cc0ec7dfb171\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    穿越_III             = TransitionMeta(\"穿越 III\", True, \"7341295618863665690\", \"48498880\", \"6d6fa95fe1414d4b4a45db9ddec0ee9b\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    立体旋转             = TransitionMeta(\"立体旋转\", True, \"7397337004511334962\", \"77055394\", \"dc1ea47698728162001d4f8ee1f22a80\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    立体翻转             = TransitionMeta(\"立体翻转\", True, \"7353088031705797159\", \"54820217\", \"3746e458c37ab10f2aaa1ac83dee99f6\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    立体翻页             = TransitionMeta(\"立体翻页\", True, \"7156512800867619335\", \"5379189\", \"ac010354774404d6b8e092120ab76772\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    立体翻页_II          = TransitionMeta(\"立体翻页 II\", True, \"7156527319274754568\", \"5381749\", \"a033fe7038252ba812a4377ff3326acf\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    立方旋转             = TransitionMeta(\"立方旋转\", True, \"7400668689411871251\", \"78218811\", \"31c50d0386413970443a6b592b201fd5\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    竖向拉伸             = TransitionMeta(\"竖向拉伸\", True, \"7384005384349946418\", \"72501228\", \"ac2563343aceb1b399c6b97b2b21f567\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    竖移模糊             = TransitionMeta(\"竖移模糊\", True, \"7270505237935297085\", \"21300860\", \"4f77c735f448ec5f6df27f21d88e4ee6\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    笔迹涂抹             = TransitionMeta(\"笔迹涂抹\", True, \"7435897594078843419\", \"89895305\", \"0de59ee84b2fc1195497ade8dea6d5ed\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    粉色反转片           = TransitionMeta(\"粉色反转片\", True, \"7200360240393491000\", \"9504701\", \"80529c6e270d25d9fa6e4babb45346c7\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    红包雨               = TransitionMeta(\"红包雨\", True, \"7321942209752732186\", \"39261991\", \"3a4c80e1aebeea0ebf65d4d4fee96481\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    纵向滑动             = TransitionMeta(\"纵向滑动\", True, \"7433711910727455259\", \"89071754\", \"9359f18a23d5ebfafc54489696912f2b\", 1.330, True)\n    \"\"\"默认时长: 1.33s\"\"\"\n    纸团                 = TransitionMeta(\"纸团\", True, \"7238905266912105019\", \"14451527\", \"283ecb29f26d13d371658f0b8b476776\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    翻书转场             = TransitionMeta(\"翻书转场\", True, \"7440002160588231194\", \"92891048\", \"5fa1b17f1b45a942f90b13486fef2211\", 1.600, True)\n    \"\"\"默认时长: 1.60s\"\"\"\n    翻转冲屏             = TransitionMeta(\"翻转冲屏\", True, \"7275914638267519525\", \"22253379\", \"c1ebaab317335c387d342a3d0b42a65b\", 1.200, True)\n    \"\"\"默认时长: 1.20s\"\"\"\n    翻页_II              = TransitionMeta(\"翻页 II\", True, \"7221478593803588152\", \"12108759\", \"7720214c69eaa3203c3edda2027b28d4\", 0.900, True)\n    \"\"\"默认时长: 0.90s\"\"\"\n    聚光灯               = TransitionMeta(\"聚光灯\", True, \"7325700559556579878\", \"40923539\", \"43853a772e195442e07760b04fb236dd\", 1.100, True)\n    \"\"\"默认时长: 1.10s\"\"\"\n    胶卷滑动             = TransitionMeta(\"胶卷滑动\", True, \"7437386424032170547\", \"90546382\", \"ebbf5882c3c8bcaec96da67a69dbb9b4\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    胶片切闪             = TransitionMeta(\"胶片切闪\", True, \"7468603557348905510\", \"104151439\", \"a4efe5e3a9fd8ce07b1760f5e998acc4\", 1.330, True)\n    \"\"\"默认时长: 1.33s\"\"\"\n    胶片定格             = TransitionMeta(\"胶片定格\", True, \"7211146962513433147\", \"10764691\", \"1a96476b4a04acd24a1b5a7f293fc2eb\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    胶片擦除             = TransitionMeta(\"胶片擦除\", True, \"7308265370480022026\", \"32274061\", \"4bbb3dcb507832529d7a18020c8fc88d\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    胶片融化             = TransitionMeta(\"胶片融化\", True, \"7346474643827462667\", \"51067351\", \"563d0dfa49528bb59646384d8a18552a\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    胶片闪光             = TransitionMeta(\"胶片闪光\", True, \"7356486482271408666\", \"56656394\", \"d3eb0fe7d4088694cc0f9ca02cad07b2\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    色块故障             = TransitionMeta(\"色块故障\", True, \"7104539089629614606\", \"2483334\", \"1f60c6b995a4cf2212dfd9038f738706\", 3.000, False)\n    \"\"\"默认时长: 3.00s\"\"\"\n    色差故障             = TransitionMeta(\"色差故障\", True, \"6724239785205961228\", \"2918075\", \"9de90519d59e432b81c38423aa0393d7\", 1.000, False)\n    \"\"\"默认时长: 1.00s\"\"\"\n    色彩溶解_IV          = TransitionMeta(\"色彩溶解 IV\", True, \"7171714374912971271\", \"6736571\", \"a113cd4e04b969f3d988d76899885d42\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    色彩溶解_V           = TransitionMeta(\"色彩溶解 V\", True, \"7171714652248740365\", \"6736575\", \"da37129b95501377039f01acfded91fc\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    色彩负片             = TransitionMeta(\"色彩负片\", True, \"7438535170317095451\", \"91077958\", \"c33d27f49534075f9076aa97ad06351f\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    色散晃镜             = TransitionMeta(\"色散晃镜\", True, \"7340477409478578738\", \"48127374\", \"554ea6d10cd7fbb24ccd24bd91d8c7e1\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    色散波纹             = TransitionMeta(\"色散波纹\", True, \"7385028833356812840\", \"72834771\", \"b56e5f23bd777160a81809df42933b8f\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    色散漩涡             = TransitionMeta(\"色散漩涡\", True, \"7402904919188967963\", \"79026278\", \"15a84ee616e08311c77dffe269288c63\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    色散闪烁             = TransitionMeta(\"色散闪烁\", True, \"7234416277974946365\", \"13830295\", \"2d9f72076aeefe8f52dfd1a012cd5127\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    色散闪烁_II          = TransitionMeta(\"色散闪烁 II\", True, \"7281584246882308665\", \"23586159\", \"5f501bb3da1bcbd2ffadca8b916eba81\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    草图转场             = TransitionMeta(\"草图转场\", True, \"7439255870891889162\", \"92006144\", \"fba0166dc7c61408454dc5e60071dda7\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    荧光爆闪             = TransitionMeta(\"荧光爆闪\", True, \"7342499359503684150\", \"48938221\", \"a2d70591b5f8dcc52298426ca626c931\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    菱格翻转             = TransitionMeta(\"菱格翻转\", True, \"6983867136510792206\", \"1187052\", \"99c0d1524575c7f7020cd77d36a6b008\", 1.450, True)\n    \"\"\"默认时长: 1.45s\"\"\"\n    蓝光扫描             = TransitionMeta(\"蓝光扫描\", True, \"7275176500381356599\", \"22119723\", \"95462badbbb87bd7dc4e1d7b04e58306\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    蓝色反转片           = TransitionMeta(\"蓝色反转片\", True, \"7200358812316865085\", \"9504705\", \"41e718fd6dbac560c6c7a23afc66e50b\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    虹光旋入             = TransitionMeta(\"虹光旋入\", True, \"7401039727761035815\", \"78355265\", \"59aaa373c4205aadd62cae40f80df9b5\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    融化                 = TransitionMeta(\"融化\", True, \"7198096122970116663\", \"9261283\", \"a0db335169668ca09f5244aa487730c0\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    融化_II              = TransitionMeta(\"融化 II\", True, \"7200339965442527803\", \"9503051\", \"74a83d45bdccf5d27bd4b55ddd2733f3\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    课本转场             = TransitionMeta(\"课本转场\", True, \"7440040705499599411\", \"92924027\", \"98a03de05f89c064dc28e31ddf3690ad\", 1.600, True)\n    \"\"\"默认时长: 1.60s\"\"\"\n    负片下滑             = TransitionMeta(\"负片下滑\", True, \"7302412902181376539\", \"29999964\", \"e2db0036d057c27aea3460f3442aedf9\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    赛博马赛克           = TransitionMeta(\"赛博马赛克\", True, \"7450031573962854963\", \"97482741\", \"b6858b185f28ea0995283665badf7a5a\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    超赞                 = TransitionMeta(\"超赞\", True, \"7070430749547041293\", \"1600477\", \"e0bd13b237d73eb121473c442c752a23\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    边框切换             = TransitionMeta(\"边框切换\", True, \"7434412782285509157\", \"89307364\", \"0c5440042359e1d8affab2b2631c23f8\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    运镜压缩             = TransitionMeta(\"运镜压缩\", True, \"7447351621266182665\", \"96240499\", \"43f8c66c156a4bc8cf48809a908c8f14\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    迷幻波纹             = TransitionMeta(\"迷幻波纹\", True, \"7441523705835950619\", \"93683056\", \"45b2ac1b9cea1a001a43e673151d1e34\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    迷幻频闪             = TransitionMeta(\"迷幻频闪\", True, \"7436273714733257242\", \"90037012\", \"74e7013b196e25699e436052c3a3a39f\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    透镜故障             = TransitionMeta(\"透镜故障\", True, \"7097849004062413343\", \"1889546\", \"bc652327bcde0e6bf9db8a89d371dd05\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    重叠上滑             = TransitionMeta(\"重叠上滑\", True, \"7232587870672785980\", \"13582109\", \"aea42365eeb8cd0df3e4e422cde45e8a\", 1.200, True)\n    \"\"\"默认时长: 1.20s\"\"\"\n    金币祝福             = TransitionMeta(\"金币祝福\", True, \"7326856503963423282\", \"41488441\", \"64d858d0716bb9fc9f5b4497afab8206\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    金沙                 = TransitionMeta(\"金沙\", True, \"7439681605804757541\", \"92634974\", \"21a5ca5fc6862b1baa4813f2c0ff294d\", 1.740, True)\n    \"\"\"默认时长: 1.74s\"\"\"\n    金色光斑             = TransitionMeta(\"金色光斑\", True, \"7317211103652483621\", \"37131315\", \"f9224f91ef353fefa3bae96af26a447e\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    钱兔无量             = TransitionMeta(\"钱兔无量\", True, \"7189608212193088060\", \"8605167\", \"a6c068f7790c563231b8df2b5796d60c\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    镜头速移             = TransitionMeta(\"镜头速移\", True, \"7418201851507511849\", \"83974069\", \"30be83d2e7ed1f2f1fe74b9cfe51c206\", 0.567, True)\n    \"\"\"默认时长: 0.57s\"\"\"\n    长曝光               = TransitionMeta(\"长曝光\", True, \"7306435255286633010\", \"31452163\", \"c239e26c5f99cf83cabd28f63d04b93f\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    闪光灯               = TransitionMeta(\"闪光灯\", True, \"6986584807543149063\", \"4202532\", \"9abfb7452d046a1dafd4d9525b58ec3a\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    闪光灯_II            = TransitionMeta(\"闪光灯 II\", True, \"7244074212158083641\", \"15250161\", \"1fcc7fccf7829d94f2747938fcb84706\", 1.900, True)\n    \"\"\"默认时长: 1.90s\"\"\"\n    闪光灯_III           = TransitionMeta(\"闪光灯 III\", True, \"7246234663755190839\", \"15638113\", \"5af30d0f877301d5235b925ccbda0703\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    闪动光斑             = TransitionMeta(\"闪动光斑\", True, \"6777178510050988551\", \"4202525\", \"06560e9ea51f532b18b7e5ae23bd2b9c\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    闪动光斑_II          = TransitionMeta(\"闪动光斑 II\", True, \"7148374073716773407\", \"4840333\", \"ffeb2bd8b46b0a212c1fbf004aeac626\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    闪回                 = TransitionMeta(\"闪回\", True, \"7250427149318885945\", \"16638473\", \"0a22de17ce5c2fd97f2bd77aa115de77\", 0.200, True)\n    \"\"\"默认时长: 0.20s\"\"\"\n    闪屏故障             = TransitionMeta(\"闪屏故障\", True, \"7348352782744687130\", \"52211013\", \"a76337e1d1e2301f5d13fd7c90c41282\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    闪黑_II              = TransitionMeta(\"闪黑 II\", True, \"7264932863613604412\", \"20257185\", \"1ecd9bf4057919c5aa78002f97e715de\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    闹钟                 = TransitionMeta(\"闹钟\", True, \"7074854214479909390\", \"1621980\", \"eabbd46c7d68fe93406dd55d4178a574\", 0.500, False)\n    \"\"\"默认时长: 0.50s\"\"\"\n    雨刷转场             = TransitionMeta(\"雨刷转场\", True, \"7447351621249405477\", \"96240497\", \"2fc9fdbde5b730255e5ffd39c610d735\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    雪花叠化             = TransitionMeta(\"雪花叠化\", True, \"7447044441472242185\", \"96135908\", \"e30717b01c4d6ace8c1071a5b7537c0d\", 3.000, True)\n    \"\"\"默认时长: 3.00s\"\"\"\n    雪花四散             = TransitionMeta(\"雪花四散\", True, \"7445177785405936165\", \"95320371\", \"3982224ea3c1b93e9d6aab2f3039dc78\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    雪花环绕             = TransitionMeta(\"雪花环绕\", True, \"7445177785397547547\", \"95320370\", \"b6b74d907b71741dab39e489ce7ec387\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    雪雾                 = TransitionMeta(\"雪雾\", True, \"7309372378096603699\", \"32838061\", \"776c40711e9f0f6f32570bc12ea50f91\", 1.700, True)\n    \"\"\"默认时长: 1.70s\"\"\"\n    震动_II              = TransitionMeta(\"震动 II\", True, \"7195815265337086520\", \"9041507\", \"f5685f90de96d6541417f0331f84de8a\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    震动缩小             = TransitionMeta(\"震动缩小\", True, \"7339865466506056207\", \"47887388\", \"3cb961ebfd78ef43742e78bca2d04d06\", 1.100, True)\n    \"\"\"默认时长: 1.10s\"\"\"\n    霓虹闪光             = TransitionMeta(\"霓虹闪光\", True, \"7337938801882305074\", \"46839548\", \"60cee393e1ddf8c117ca6856e474d47d\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    霓虹闪光_II          = TransitionMeta(\"霓虹闪光 II\", True, \"7337946710041170470\", \"46846588\", \"b87a9bf7d6c8e93cc9873ccb47ffc4d0\", 0.500, True)\n    \"\"\"默认时长: 0.50s\"\"\"\n    顺时针三角           = TransitionMeta(\"顺时针三角\", True, \"7450031573962854939\", \"97482743\", \"d02963275288ab14e24791ad2c0edd78\", 1.500, True)\n    \"\"\"默认时长: 1.50s\"\"\"\n    飘雪                 = TransitionMeta(\"飘雪\", True, \"7169510140138230285\", \"6506905\", \"b373d6de281f9cc9cec4b52b0f498517\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    飘雪_II              = TransitionMeta(\"飘雪 II\", True, \"7170983464416580133\", \"6658449\", \"f6e6d83024f30ae2ecf739e15e98813a\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    马赛克_II            = TransitionMeta(\"马赛克 II\", True, \"7322278354579624486\", \"39369063\", \"c2c4fdb0da65e27a073eaba6fcf8dd2a\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    马赛克III            = TransitionMeta(\"马赛克III\", True, \"7397337004502946314\", \"77055400\", \"38bcfd99a2076493d72e2544eeb95811\", 1.000, True)\n    \"\"\"默认时长: 1.00s\"\"\"\n    鱼眼                 = TransitionMeta(\"鱼眼\", True, \"7158359902950265352\", \"5508285\", \"0319d3f53fd0e79e7e7165f27d7eb9bb\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    鱼眼_II              = TransitionMeta(\"鱼眼 II\", True, \"7152723523721499167\", \"5096381\", \"6705e7c01ad8518db1428a34b1357d8f\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n    鱼眼_III             = TransitionMeta(\"鱼眼 III\", True, \"7270399429297836605\", \"21261750\", \"cdaf9cd4712f5f8061110dfed13738fd\", 1.333, True)\n    \"\"\"默认时长: 1.33s\"\"\"\n    鱼眼波纹             = TransitionMeta(\"鱼眼波纹\", True, \"7433711910731649563\", \"89071756\", \"f6d9afd9764c5fc849db3ca346d81997\", 0.600, True)\n    \"\"\"默认时长: 0.60s\"\"\"\n    鸿运四叶草           = TransitionMeta(\"鸿运四叶草\", True, \"7460402504589644326\", \"101453156\", \"107619867b318820747866cf632d2dee\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    黑板擦除             = TransitionMeta(\"黑板擦除\", True, \"7433711910723260979\", \"89071755\", \"783cfcdc22f1067cd50142b6731f0b92\", 2.000, True)\n    \"\"\"默认时长: 2.00s\"\"\"\n    黑白摇镜             = TransitionMeta(\"黑白摇镜\", True, \"7306819191724577331\", \"31620427\", \"cc6bea0aa49c6824aa42d0448d6d0080\", 0.700, True)\n    \"\"\"默认时长: 0.70s\"\"\"\n    黑色反转片           = TransitionMeta(\"黑色反转片\", True, \"7202075814085530149\", \"9683173\", \"8e31bcdedda0fe123ad1a71a967ecaa1\", 0.800, True)\n    \"\"\"默认时长: 0.80s\"\"\"\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/video_character_effect.py",
    "content": "\"\"\"视频人物特效元数据\"\"\"\n\nfrom .effect_meta import EffectEnum\nfrom .effect_meta import EffectMeta, EffectParam\n\nclass VideoCharacterEffectType(EffectEnum):\n    \"\"\"视频人物特效枚举\"\"\"\n\n    # 免费特效\n    BOOM                 = EffectMeta(\"BOOM！\", False, \"6999560597230588429\", \"1378605\", \"a7d5d3fbae39950e51bff93b92ad7792\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    X                    = EffectMeta(\"X\", False, \"7037006820749087246\", \"1464226\", \"ec38784544361583ed45aa333ebdf2c9\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    crash                = EffectMeta(\"crash！\", False, \"6999887184018805285\", \"1378609\", \"47b6f315a86918e23d94d35c69946fe1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    中刀                 = EffectMeta(\"中刀\", False, \"7029514054179754510\", \"1436386\", \"ad3377fb7ed70663017b8f4dcecc8441\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    主体冲破屏幕         = EffectMeta(\"主体冲破屏幕\", False, \"7390265515056304681\", \"74731169\", \"f36c6922e91c3036495591591aba39d9\", [])\n    九尾狐               = EffectMeta(\"九尾狐\", False, \"7011416501160776228\", \"1404740\", \"12afdb69b18ec5127874f04d6f3fdefd\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    人影爆闪             = EffectMeta(\"人影爆闪\", False, \"7260741462269104697\", \"19799492\", \"f307677e792d2970045b653267fca93b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_luminance: 默认45%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认80%, 0% ~ 100%\"\"\"\n    光环_I               = EffectMeta(\"光环 I\", False, \"6999584193848021535\", \"1378551\", \"ce2098aa7d557cfc63d896fc63ec2846\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    光环_II              = EffectMeta(\"光环 II\", False, \"6999882629893853726\", \"1378552\", \"adb70b2ea060371bb7d91ec43c031989\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    几何拖尾_I           = EffectMeta(\"几何拖尾 I\", False, \"6985081270208303653\", \"1404702\", \"dbc19689b9dae201897fce9e894ce5fe\", [])\n    几何拖尾_II          = EffectMeta(\"几何拖尾 II\", False, \"7008079206181507615\", \"1404705\", \"9c57ea460222d55e1bbab56600ca3b71\", [])\n    击中                 = EffectMeta(\"击中\", False, \"7008009586581967397\", \"1404729\", \"b0a79d87265c9f181f9875a626ad7c66\", [\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    分头行动             = EffectMeta(\"分头行动\", False, \"7065570293552517646\", \"1570064\", \"50b8be675fac5e23d3bc5d96013c027e\", [\n                              EffectParam(\"effects_adjust_size\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认35%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认40%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    分身                 = EffectMeta(\"分身\", False, \"7194734735434715704\", \"9010351\", \"dca7518f6eb90654d1c2473406db2890\", [\n                              EffectParam(\"effects_adjust_distortion\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_distortion: 默认20%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    动感爱心             = EffectMeta(\"动感爱心\", False, \"6998039666024780318\", \"1238121\", \"9d3838036dedfd21be7f340273fde034\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    卡通脸               = EffectMeta(\"卡通脸\", False, \"7205481536240489019\", \"10092161\", \"d01b570f71818e6f6d04bc6c9b1ef766\", [])\n    变身                 = EffectMeta(\"变身\", False, \"6998018272557797924\", \"1238120\", \"f78c282c0147f997f1c7624bda919cc3\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    可爱女生             = EffectMeta(\"可爱女生\", False, \"6971317732948054542\", \"1182270\", \"305aaa38fa724b8fceba4a0be1bd49a8\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    可爱猪               = EffectMeta(\"可爱猪\", False, \"6971317650219602446\", \"1182274\", \"483efc4867b85d9bf7c39a6b1d878b8d\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    吻痕坏笑             = EffectMeta(\"吻痕坏笑\", False, \"7197741530751177274\", \"9392743\", \"df256252c27055c7434212ca51caf7d0\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    哈哈哈               = EffectMeta(\"哈哈哈\", False, \"6993187958685700638\", \"1217040\", \"803508bffb42714235dcdbddb1d30834\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    图腾                 = EffectMeta(\"图腾\", False, \"6999820560528052743\", \"1378608\", \"006d822d0f49a4e20e539d18ed6cda96\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    圣诞小熊             = EffectMeta(\"圣诞小熊\", False, \"7175084803874624061\", \"7126277\", \"c66c5f67cc2eeb2827a24fd5558cedfe\", [\n                              EffectParam(\"effects_adjust_size\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认35%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    圣诞帽               = EffectMeta(\"圣诞帽\", False, \"7034784053609894430\", \"1457102\", \"b3bf8d22530db2a310a8c38abed2fd09\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_rotate: 默认30%, 0% ~ 100%\"\"\"\n    圣诞树               = EffectMeta(\"圣诞树\", False, \"7173942106061279781\", \"6993587\", \"865c067b3fc9fd7d8fb9d32bfe88cea3\", [])\n    圣诞胡子             = EffectMeta(\"圣诞胡子\", False, \"7034831862597947918\", \"1457484\", \"35b6dc4b15d10db2100509cf349f5b5c\", [\n                              EffectParam(\"effects_adjust_size\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.770, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认30%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认77%, 0% ~ 100%\"\"\"\n    圣诞辣妹             = EffectMeta(\"圣诞辣妹\", False, \"7165705324777705992\", \"7406471\", \"7c9b779e2382630c01d33528a013b8fb\", [\n                              EffectParam(\"effects_adjust_texture\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认80%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\"\"\"\n    圣诞铃铛             = EffectMeta(\"圣诞铃铛\", False, \"7175084694940160568\", \"7126337\", \"5b59cf441d783d507c2b4b3a0aabf4e9\", [\n                              EffectParam(\"effects_adjust_size\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认35%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    声波                 = EffectMeta(\"声波\", False, \"7008055446397260319\", \"1404731\", \"f0e9e247eabb12c558de273a8e51c515\", [\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    多屏圣诞树           = EffectMeta(\"多屏圣诞树\", False, \"7175084576950194725\", \"7126387\", \"1a70506d54ba37021e8dd157358aa76a\", [\n                              EffectParam(\"effects_adjust_size\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认35%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    大头                 = EffectMeta(\"大头\", False, \"6986556887818834462\", \"1201644\", \"7518e7eb3e186350b688bf712b960c97\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    大眼睛               = EffectMeta(\"大眼睛\", False, \"7044080818544710152\", \"1489516\", \"b53f3fda1f03d0d1f703fb71a009d790\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    天使环               = EffectMeta(\"天使环\", False, \"7019228748775952933\", \"1400400\", \"5782ef42472fd9771f9113d98b6e4e58\", [])\n    太阳神               = EffectMeta(\"太阳神\", False, \"7009186849444860453\", \"1404735\", \"9c009ca6bf736eba0dd3152bb863fc6d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    好吃                 = EffectMeta(\"好吃\", False, \"7075218981442818596\", \"1626122\", \"6a55240ce1f00f078b50fd5e34b5afd3\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.200),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.600, 0.300, 2.600),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.300, 2.000),\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 120%\n    effects_adjust_horizontal_shift: 默认60%, 30% ~ 260%\n    effects_adjust_size: 默认50%, 30% ~ 200%\n    sticker: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    妖气                 = EffectMeta(\"妖气\", False, \"6729410038047183364\", \"1558942\", \"8ff658c7bcf3814f91693f906d5eba8b\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    委屈丑丑脸           = EffectMeta(\"委屈丑丑脸\", False, \"7130874026733343268\", \"4192363\", \"596971eaa17dbe64f62f52fc75c9998a\", [])\n    害羞                 = EffectMeta(\"害羞\", False, \"6979931248890221069\", \"1187976\", \"6904d753832ee54a39f46fb23e0c47fc\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    sticker: 默认100%, 0% ~ 100%\"\"\"\n    小恶魔               = EffectMeta(\"小恶魔\", False, \"6995534946311868958\", \"1225626\", \"7dba67f137a50da13db71188fc6df71f\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认80%, 0% ~ 100%\"\"\"\n    小鹿角               = EffectMeta(\"小鹿角\", False, \"7035938555683672612\", \"1459882\", \"a77b46457ff3ea5a5c75c0d127e9cdd2\", [])\n    尴尬住了             = EffectMeta(\"尴尬住了\", False, \"7156141357008949790\", \"5481035\", \"cc08bdab9e913aa015d61631abf8fa7d\", [])\n    局部扭曲             = EffectMeta(\"局部扭曲\", False, \"7038521452668129822\", \"1470210\", \"da8f3f99ca659d2710b2f9dcecf5fe4c\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    局部马赛克           = EffectMeta(\"局部马赛克\", False, \"7034092576726585869\", \"1454112\", \"6f37c16b7d7904bc8489e66455f6d78b\", [\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    巴哥犬               = EffectMeta(\"巴哥犬\", False, \"6971317662567633421\", \"1182273\", \"6764c992938b5c0e62dfc6e46255bde7\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    帅气男生             = EffectMeta(\"帅气男生\", False, \"6971317748542476814\", \"1182269\", \"71d88fb7f6ae9e19df3f8b491b7355bf\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    幻影_I               = EffectMeta(\"幻影 I\", False, \"7212904257043829307\", \"11357751\", \"6699feabadc4f59732b8087620fc95a6\", [\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    幽灵                 = EffectMeta(\"幽灵\", False, \"7000630410275197470\", \"1378554\", \"9f6758469c2a948cadfbeff53bbc5b6d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    弥散流光             = EffectMeta(\"弥散流光\", False, \"7034508334157795876\", \"1455764\", \"eabd69cd578279cf0dc892e088f60da6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_noise: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认0%, 0% ~ 100%\"\"\"\n    彩色负片             = EffectMeta(\"彩色负片\", False, \"7035876641083494926\", \"1459050\", \"2cd6462bd0bde3023d5f7069cd549b17\", [\n                              EffectParam(\"effects_adjust_size\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认40%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    彩色重影             = EffectMeta(\"彩色重影\", False, \"6995746173772370469\", \"1235614\", \"99b7fa2ef6210832f1d6dccfce4ed759\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    微笑摇摆头           = EffectMeta(\"微笑摇摆头\", False, \"7166825483902915109\", \"6253239\", \"ff4053845ced3ff3b9fbe9d1429a908b\", [\n                              EffectParam(\"effects_adjust_size\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认45%, 0% ~ 100%\n    effects_adjust_speed: 默认75%, 0% ~ 100%\n    effects_adjust_range: 默认35%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    心动                 = EffectMeta(\"心动\", False, \"6986186073814602277\", \"1204190\", \"bab33144cacb0cdade5a3d1f18d9c6e7\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.750, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认75%, 0% ~ 100%\"\"\"\n    心动信号             = EffectMeta(\"心动信号\", False, \"7040012457842053662\", \"1478394\", \"a4758810ef78bfca76c45486faeac99d\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    心心眼               = EffectMeta(\"心心眼\", False, \"7196943722523660858\", \"9126233\", \"aebda718fd41b71cbef713df0b12ac0f\", [\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\"\"\"\n    恶灵骑士             = EffectMeta(\"恶灵骑士\", False, \"7000301210993431053\", \"1378618\", \"c0f232fc4435c4bf8a4861efa6bcf671\", [\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    恶魔印记             = EffectMeta(\"恶魔印记\", False, \"7000647554337608222\", \"1378619\", \"abab6563284c7ef292d1acaaf5a1be3e\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    恶魔尾巴             = EffectMeta(\"恶魔尾巴\", False, \"7001021232371995149\", \"1404725\", \"7ab5f92c75beb4747dc81731b447f53c\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认100%, 0% ~ 100%\"\"\"\n    恶魔角               = EffectMeta(\"恶魔角\", False, \"7019228817549955597\", \"1400399\", \"e3331ccd99a663f0561f82ac87441dcf\", [])\n    惨                   = EffectMeta(\"惨\", False, \"6992836065245532680\", \"1225625\", \"f5f8238bef302a2a27cae95c0d2304f1\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\"\"\"\n    意识流               = EffectMeta(\"意识流\", False, \"7000629338529862151\", \"1378555\", \"17dcd65459f769802c3d02fa00af0a48\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认60%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    憔悴                 = EffectMeta(\"憔悴\", False, \"6986160256103485989\", \"1197947\", \"709a178794856095bfcc215cabc3f91c\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.750, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认75%, 0% ~ 100%\"\"\"\n    懵                   = EffectMeta(\"懵\", False, \"6980272649066779143\", \"1187977\", \"32325e03b4b27a426af4f3c3916cd718\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    sticker: 默认100%, 0% ~ 100%\"\"\"\n    我不听               = EffectMeta(\"我不听\", False, \"7001058741571293709\", \"1353102\", \"a56ac41521ef7b1e1ad7e09ec2253082\", [\n                              EffectParam(\"effects_adjust_number\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_number: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    我服了               = EffectMeta(\"我服了\", False, \"7029509874862002724\", \"1436336\", \"6ec666bfc6a45aa53f82f794d75d9976\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\"\"\"\n    手印涂抹             = EffectMeta(\"手印涂抹\", False, \"7153950763348136478\", \"5190085\", \"c617ff4e68e61de777f52149851b782c\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    手绘描边             = EffectMeta(\"手绘描边\", False, \"7406177019404227109\", \"80106342\", \"07d72dd2e34f4fd41cbdabe05464454d\", [])\n    打击                 = EffectMeta(\"打击\", False, \"6971302911317905956\", \"1169502\", \"b310c3ede33e6e0819859dbc67ffab7e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.550, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认55%, 0% ~ 100%\"\"\"\n    打脸                 = EffectMeta(\"打脸\", False, \"6992915114051506725\", \"1217039\", \"ade99f5a3c5dc73639e55dbf4157b0eb\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    扫描_II              = EffectMeta(\"扫描 II\", False, \"7000630959565443614\", \"1378580\", \"c6c224fb2fec72f0a0432ccad29546aa\", [\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    拼贴抽帧             = EffectMeta(\"拼贴抽帧\", False, \"7142777693707178533\", \"4574525\", \"602c047f7cafe02427da4b327fd260cf\", [\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.661, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_chromatic: 默认0%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认10%, 0% ~ 100%\n    effects_adjust_size: 默认30%, 0% ~ 100%\n    effects_adjust_texture: 默认66%, 0% ~ 100%\n    effects_adjust_filter: 默认65%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    拼贴风暴             = EffectMeta(\"拼贴风暴\", False, \"7037019101402763806\", \"1464400\", \"1a39707de66987a9048c2e495b5a1c96\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.750, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认75%, 0% ~ 100%\"\"\"\n    拽酷红眼             = EffectMeta(\"拽酷红眼\", False, \"6979861988935471623\", \"1185226\", \"3528fdf176336d1ae503e85611d96347\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\"\"\"\n    掉小珍珠啦           = EffectMeta(\"掉小珍珠啦\", False, \"7132336135748981255\", \"4080159\", \"91cb59a743f8089684fcf7c420861e74\", [])\n    故障描边_I           = EffectMeta(\"故障描边 I\", False, \"6998080413587477005\", \"1238132\", \"226bca50364904c231246c72b0a9e5c1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    敲打                 = EffectMeta(\"敲打\", False, \"6986918523704447501\", \"1197949\", \"67737d95f8256e6915b26c3efd41f305\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    新年星黛露           = EffectMeta(\"新年星黛露\", False, \"7182406780733887033\", \"7823781\", \"6e4e73454d92da43cd9e90cf7c350c7d\", [\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\"\"\"\n    无信号               = EffectMeta(\"无信号\", False, \"7039965830192304671\", \"1478054\", \"c6c413df67a97d81b29355a0e1e89f16\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    日系大头贴           = EffectMeta(\"日系大头贴\", False, \"7309039877796925978\", \"32668223\", \"04f1ebf5bf63743f1bb12f518ede4b5e\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.700, 0.000, 1.000),\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认80%, 0% ~ 100%\n    effects_adjust_blur: 默认10%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_distortion: 默认70%, 0% ~ 100%\n    sticker: 默认100%, 0% ~ 100%\"\"\"\n    星光放射             = EffectMeta(\"星光放射\", False, \"6999904379822150158\", \"1378610\", \"aa85bd31e3f47e7bd01383b6aacc9508\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    星星拖尾             = EffectMeta(\"星星拖尾\", False, \"7007679689388986888\", \"1404703\", \"7dabcaa49244e8faeaf61bfa184d53fb\", [])\n    未来眼镜             = EffectMeta(\"未来眼镜\", False, \"6989160247034122789\", \"1238126\", \"66983702ac8ca5f68aa9ec32c92c4b3b\", [\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    机械几何             = EffectMeta(\"机械几何\", False, \"6997682380454498824\", \"1238116\", \"2b469e181b8e5be26a0e09678a9974b0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    机械姬_I             = EffectMeta(\"机械姬 I\", False, \"6978809529215488548\", \"1238098\", \"11d60d8c8de82453c697bed883e64671\", [])\n    机械姬_II            = EffectMeta(\"机械姬 II\", False, \"6997969810822795813\", \"1238099\", \"601bc1f8fd6dfcb9226fa7e54aba9f14\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    机灵怪               = EffectMeta(\"机灵怪\", False, \"7158373218724614664\", \"5510681\", \"6fa4f54d22b420c8c0a3e59246d1c8b7\", [])\n    欧美女性             = EffectMeta(\"欧美女性\", False, \"6971317800098861576\", \"1182266\", \"6d9b6990df1d66bad249c5defd435576\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    欧美男性             = EffectMeta(\"欧美男性\", False, \"6971317784085008909\", \"1182267\", \"b09c7a6c2134a95aeac139f06217cdde\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    气泡_I               = EffectMeta(\"气泡 I\", False, \"6999560743653741087\", \"1378604\", \"53133594bcb0ca9cf9cb48b80aa8eec1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    气泡_II              = EffectMeta(\"气泡 II\", False, \"6999560859986956813\", \"1378603\", \"1b75e11acadf9069723dc387751d68c5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    气波                 = EffectMeta(\"气波\", False, \"7008459080452805133\", \"1404693\", \"d49684beffa531728f6d0b2f5823a465\", [\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    氛围大头贴           = EffectMeta(\"氛围大头贴\", False, \"7309480138486321715\", \"32919263\", \"13daa7e7f44f245155737d4a8017d0e2\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.700, 0.000, 1.000),\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认80%, 0% ~ 100%\n    effects_adjust_blur: 默认10%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_distortion: 默认70%, 0% ~ 100%\n    sticker: 默认100%, 0% ~ 100%\"\"\"\n    沉沦                 = EffectMeta(\"沉沦\", False, \"7000286535568331294\", \"1378579\", \"7f1cef9ddfd657188f2ae2f069c9433b\", [\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    流光描边             = EffectMeta(\"流光描边\", False, \"7156203771352060424\", \"6699941\", \"43de1121773eea81624460ed929b17e8\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.850, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认85%, 0% ~ 100%\n    effects_adjust_size: 默认15%, 0% ~ 100%\n    effects_adjust_range: 默认33%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认25%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\"\"\"\n    流口水               = EffectMeta(\"流口水\", False, \"7072912940101276196\", \"1610044\", \"50dec319b04a96990ed59c7a237ed700\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.500, 0.400, 0.700),\n                              EffectParam(\"effects_adjust_size\", 0.800, 0.500, 1.200)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_rotate: 默认50%, 40% ~ 70%\n    effects_adjust_size: 默认80%, 50% ~ 120%\"\"\"\n    漩涡                 = EffectMeta(\"漩涡\", False, \"7007639691797205511\", \"1404726\", \"c027fc134ee686578a887120774ae49b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    潮流入侵             = EffectMeta(\"潮流入侵\", False, \"7039588403897176583\", \"1475552\", \"fff9a2112e2f1befcbe793a348d9b49e\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    潮酷女孩             = EffectMeta(\"潮酷女孩\", False, \"6973998028587799076\", \"1182282\", \"43567fd71493d00bc90873169a742c7b\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    潮酷男孩             = EffectMeta(\"潮酷男孩\", False, \"6971317770835202574\", \"1182268\", \"8db29277f098685e305a341ae6256482\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    激光几何             = EffectMeta(\"激光几何\", False, \"6998130105188880909\", \"1238146\", \"3b57818e4d021368a6a71792ff5efffd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    火焰拖尾             = EffectMeta(\"火焰拖尾\", False, \"7008060347789611551\", \"1404704\", \"f5e51b968426e15e4e185285a4e8558f\", [])\n    火焰环绕             = EffectMeta(\"火焰环绕\", False, \"7009186695157387784\", \"1404737\", \"0336f00d05b706cf8ab9742af8ee16c7\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    火焰翅膀_I           = EffectMeta(\"火焰翅膀 I\", False, \"7009186539762618910\", \"1404738\", \"bab3b65e0ca81daf7fbef82971d57527\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    火焰翅膀_II          = EffectMeta(\"火焰翅膀 II\", False, \"7007998245511107108\", \"1404728\", \"93fa02d91dd5f7fd2c41314358ba462d\", [\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    灵机一动             = EffectMeta(\"灵机一动\", False, \"6982806720867209765\", \"1187978\", \"9a0be515180211c4c30a1757d3622ca0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.600, 0.000, 1.000),\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认60%, 0% ~ 100%\n    sticker: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    灵魂出走             = EffectMeta(\"灵魂出走\", False, \"6994263736991093278\", \"1220234\", \"b78e2e42d51b354ad3a2c9af04da43f1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    sticker: 默认100%, 0% ~ 100%\"\"\"\n    爱心光波             = EffectMeta(\"爱心光波\", False, \"7058944699737838116\", \"1552114\", \"2198438e43c9ff1147958bf750b61b90\", [\n                              EffectParam(\"effects_adjust_texture\", 0.204, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.753, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认20%, 0% ~ 100%\n    effects_adjust_size: 默认75%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\"\"\"\n    爱心焰火             = EffectMeta(\"爱心焰火\", False, \"6999550440639566350\", \"1378601\", \"2f8b37a399b2b45ca57717a6244c3c9f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    狼人                 = EffectMeta(\"狼人\", False, \"7156899280374993416\", \"5413619\", \"f3d6cf02114d17bad33a3003557f5ff5\", [\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\"\"\"\n    猩猩脸               = EffectMeta(\"猩猩脸\", False, \"7112786295771894285\", \"3186064\", \"3afa515823ec425b359bf9102a7cfa28\", [])\n    猫耳女孩             = EffectMeta(\"猫耳女孩\", False, \"6971317673699316261\", \"1182272\", \"486df1ec5de1ca0a69210b844b912534\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    电光描边             = EffectMeta(\"电光描边\", False, \"7171723380003967496\", \"6738041\", \"1a5266ab56ea0645c20f0160aee7743e\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认90%, 0% ~ 100%\n    effects_adjust_distortion: 默认70%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    电光放射             = EffectMeta(\"电光放射\", False, \"7011414375130993188\", \"1404739\", \"092db1dc71adf758d4ab5b19b5b43873\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    电击                 = EffectMeta(\"电击\", False, \"6999560974638256671\", \"1378602\", \"b1659d113dda06df2115cd948ed09e23\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    电子屏故障           = EffectMeta(\"电子屏故障\", False, \"6997976386413531661\", \"1238119\", \"05d9292d4d2ef2ea3b84854f4771ff25\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    真的会谢             = EffectMeta(\"真的会谢\", False, \"7179493200904589881\", \"7600931\", \"bdfc580a5e4155e95c3568dcea50d341\", [])\n    真香                 = EffectMeta(\"真香\", False, \"6995535089975169549\", \"1225627\", \"81a9d2b55a363059acb95c637e49d65d\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认80%, 0% ~ 100%\"\"\"\n    破碎的心             = EffectMeta(\"破碎的心\", False, \"7008077860397126158\", \"1404734\", \"7ddd6f7b9c206935ac79bfc814467ae4\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    神明少女             = EffectMeta(\"神明少女\", False, \"6906817277316829703\", \"1169466\", \"20a22b74a6a7a30f2dcab48dbc5276b6\", [\n                              EffectParam(\"effects_adjust_soft\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_soft: 默认25%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    科技氛围_I           = EffectMeta(\"科技氛围 I\", False, \"6989160173826740767\", \"1238115\", \"bdfd8e3165875ca7084b62d7e6204079\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    科技氛围_III         = EffectMeta(\"科技氛围 III\", False, \"6983927792010269214\", \"1238118\", \"8e1024fd3f6bd41f09d16cf27de0f210\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    秘密                 = EffectMeta(\"秘密\", False, \"7023684632591733284\", \"1418782\", \"72f525012ca8744325138a89981b3e84\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    箭头环绕             = EffectMeta(\"箭头环绕\", False, \"6999943971162034702\", \"1378553\", \"c4543904bdf336051dee6e64c8b5ebdd\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    粉色便便             = EffectMeta(\"粉色便便\", False, \"6971317685216875044\", \"1182271\", \"0c843a5ba39df7e037f4995040f79263\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    背景拖影             = EffectMeta(\"背景拖影\", False, \"7012512877038801415\", \"1379270\", \"e6c9f05435c8a8912b1321bfa9f39a4a\", [\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.850, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_horizontal_shift: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认85%, 0% ~ 100%\"\"\"\n    背景氛围II           = EffectMeta(\"背景氛围II\", False, \"7007713075486790152\", \"1404727\", \"f69d913fb2414b485d7d03770049a5fa\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    脸红                 = EffectMeta(\"脸红\", False, \"7025808257306333732\", \"1424210\", \"9946c014663314c93786a0a8fc27b347\", [\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.802, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    sticker: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认80%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    脸绿了               = EffectMeta(\"脸绿了\", False, \"7023661644853023263\", \"1418056\", \"a4af7d2a30dac7d4be34f96c8d27f556\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.802, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认80%, 0% ~ 100%\"\"\"\n    脸部故障             = EffectMeta(\"脸部故障\", False, \"7260774105073324602\", \"19351944\", \"b00871e8d7e141731a2fe3ca29bb857a\", [\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    舞者                 = EffectMeta(\"舞者\", False, \"6978809631678140935\", \"1238134\", \"80d431c5d76932b3f3fb8418267afdb5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    舞者_II              = EffectMeta(\"舞者 II\", False, \"7000629698401145352\", \"1378611\", \"de4d77dc2f920e92503d9553c0cf1a21\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认60%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    萤火                 = EffectMeta(\"萤火\", False, \"6979415063106949639\", \"1378556\", \"000701418e2acde7230cfdcc680ef895\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    虚拟人生_I           = EffectMeta(\"虚拟人生 I\", False, \"6998017546452472351\", \"1238100\", \"54fd9f289f28e1a2f060f4e569c31359\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    虚拟人生_II          = EffectMeta(\"虚拟人生 II\", False, \"6998017726589440519\", \"1238101\", \"2bc7ecc4b79a372c9fed9a86b850d8a5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    衰                   = EffectMeta(\"衰\", False, \"6995855600764588557\", \"1225628\", \"80bb667cb6e39b17554321df89c41a86\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认80%, 0% ~ 100%\"\"\"\n    视线遮挡             = EffectMeta(\"视线遮挡\", False, \"7034507846305714696\", \"1455754\", \"9d6829ecbc85a6653ca44ccd18c9243f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认0%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    赛博朋克_I           = EffectMeta(\"赛博朋克 I\", False, \"6975112087659876895\", \"1238114\", \"3f5f8d770decd3fe853778e00f3ab589\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    赛博朋克_II          = EffectMeta(\"赛博朋克 II\", False, \"6997261680803582494\", \"1238113\", \"0bbcda72ffc36a7aa6dc7d5ec7cdc0b6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    赛博眼镜             = EffectMeta(\"赛博眼镜\", False, \"7055586958050857503\", \"1536126\", \"ce551db43d4cd0e9abf3e69a35513113\", [])\n    轻金属               = EffectMeta(\"轻金属\", False, \"7036946127320519182\", \"1463702\", \"6f5edc9d13d681afe8ee4f3224014a1e\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.750, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认75%, 0% ~ 100%\"\"\"\n    运动轨迹             = EffectMeta(\"运动轨迹\", False, \"7389547512987652658\", \"74470467\", \"91ac684d7b70b28e9fd1f3c1f99c97e9\", [\n                              EffectParam(\"effects_adjust_number\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_number: 默认40%, 0% ~ 100%\n    effects_adjust_texture: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    迷茫                 = EffectMeta(\"迷茫\", False, \"6979931594408595975\", \"1185225\", \"19618c1e22b607642e7b27dc2602832f\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    闪影                 = EffectMeta(\"闪影\", False, \"7090458377901314568\", \"1825212\", \"864dcb150b85814ca7615946c7265941\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    闪烁                 = EffectMeta(\"闪烁\", False, \"7008060861528936991\", \"1404733\", \"b8648c0ede65749dcc4af04b7d5fa54c\", [\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    闪电炸裂             = EffectMeta(\"闪电炸裂\", False, \"6999539022812942884\", \"1378606\", \"be8011441a484bf6661aa33604cd06bd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    阳光                 = EffectMeta(\"阳光\", False, \"6986176759725036039\", \"1197948\", \"7ea97e6b6156a1066459a400f0c26692\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.750, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认75%, 0% ~ 100%\"\"\"\n    阴云密布             = EffectMeta(\"阴云密布\", False, \"7025527915320185375\", \"1427592\", \"25dc89f2e7cbe9ffb52d1da8f2cade5c\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    阴暗面               = EffectMeta(\"阴暗面\", False, \"7000679723906896397\", \"1378620\", \"f1efe71ae45c60bc94d1fcb168b8bf4d\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    难吃                 = EffectMeta(\"难吃\", False, \"7075326356585714207\", \"1627088\", \"22f5c7f78d72ed2767d8673414519e4b\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.200),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.550, 0.300, 2.600),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.300, 2.000),\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 120%\n    effects_adjust_horizontal_shift: 默认55%, 30% ~ 260%\n    effects_adjust_size: 默认50%, 30% ~ 200%\n    sticker: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    难过                 = EffectMeta(\"难过\", False, \"6979931396827517477\", \"1187975\", \"0d1f3c1ea1287cd2de9193f5a6c55d20\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    sticker: 默认100%, 0% ~ 100%\"\"\"\n    雪花眼泪             = EffectMeta(\"雪花眼泪\", False, \"7174694873897898553\", \"7078531\", \"b078f5583b67f9bfa95e30bf612e3482\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.850, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.250, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认85%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认20%, 0% ~ 100%\n    effects_adjust_sharpen: 默认25%, 0% ~ 100%\"\"\"\n    霓虹特技             = EffectMeta(\"霓虹特技\", False, \"7389546043534217778\", \"74469969\", \"a30c2949ccfc35417421caf68261ae0b\", [\n                              EffectParam(\"effects_adjust_size\", 0.510, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认51%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认0%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\"\"\"\n    音符拖尾             = EffectMeta(\"音符拖尾\", False, \"7008458769675850248\", \"1404706\", \"7c1a10956911f225d514aab1ecfb7aeb\", [])\n    音符拖尾_II          = EffectMeta(\"音符拖尾 II\", False, \"7002176395312894494\", \"1238188\", \"c768fa0ad974298284a8adb66678e93a\", [])\n    飓风                 = EffectMeta(\"飓风\", False, \"7008458952451035678\", \"1404694\", \"a0bf72f591c6dbba8a211894f618976f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    飞翔的帽子           = EffectMeta(\"飞翔的帽子\", False, \"6999892125697446414\", \"1404708\", \"ec71eec4c8788ed43133f0a5a775e0c6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    鬼火                 = EffectMeta(\"鬼火\", False, \"7008470453366821389\", \"1404696\", \"6dcf3bafc5efbf4f3509dae601f57f54\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    黑人女孩             = EffectMeta(\"黑人女孩\", False, \"6971317836648026661\", \"1182265\", \"bde6e304a5de9614c0f44644fd3d15be\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    黑人男生             = EffectMeta(\"黑人男生\", False, \"6971317847318336031\", \"1182264\", \"a6e9afde1f86efbb91c49ecd9d6a8fdc\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    鼻血                 = EffectMeta(\"鼻血\", False, \"7153900212623249950\", \"5182539\", \"fc3d1f3cca541ced7f24b226eff114ee\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n\n    # 付费特效\n    _3D兔兔              = EffectMeta(\"3D兔兔\", True, \"7098954198204551716\", \"1924176\", \"78c9a5106ea815c821911a10f7631163\", [\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    sticker: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    Love_u               = EffectMeta(\"Love u\", True, \"7058892012358996510\", \"1551894\", \"2aa9298939a522ca05e5219ab6e91cf6\", [\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_size: 默认80%, 0% ~ 100%\n    effects_adjust_color: 默认30%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\"\"\"\n    X瞬移                = EffectMeta(\"X瞬移\", True, \"7265629618424517157\", \"20387617\", \"366528fe2ee5c5c851a694073cf4b855\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\"\"\"\n    分身_III             = EffectMeta(\"分身 III\", True, \"7281245666309837349\", \"23497249\", \"5b218df611d57e62c26029c0df884b13\", [\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 0.600),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认30%, 0% ~ 60%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    分身ll               = EffectMeta(\"分身ll\", True, \"7207269616299545149\", \"10287363\", \"a42da906cd114315f798ba59b1692264\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.620, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认30%, 0% ~ 100%\n    effects_adjust_size: 默认62%, 0% ~ 100%\n    effects_adjust_range: 默认40%, 0% ~ 100%\n    effects_adjust_speed: 默认55%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认30%, 0% ~ 100%\"\"\"\n    发光分身             = EffectMeta(\"发光分身\", True, \"7233250530292666939\", \"13661053\", \"dbff6732319cf9488da4816c188d9f1a\", [\n                              EffectParam(\"effects_adjust_color\", 0.840, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.102, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认84%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认35%, 0% ~ 100%\n    effects_adjust_size: 默认10%, 0% ~ 100%\n    effects_adjust_distortion: 默认30%, 0% ~ 100%\"\"\"\n    变老_美颜            = EffectMeta(\"变老-美颜\", True, \"7226689898118386237\", \"12825757\", \"bd4037e779bb8ecd6ac12258853974b2\", [])\n    可爱龙龙             = EffectMeta(\"可爱龙龙\", True, \"7327508217590714931\", \"41751981\", \"9ac3a781a5aa5b33ddc73be905a2b270\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\"\"\"\n    吸血鬼               = EffectMeta(\"吸血鬼\", True, \"7154356694376518158\", \"5226581\", \"c560f8982d276a2824147698951751cd\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    哥特                 = EffectMeta(\"哥特\", True, \"7154061273838129672\", \"5199947\", \"94bd5a2ec19553d8e91423ab41b1bfee\", [\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认100%, 0% ~ 100%\"\"\"\n    嘻哈眼镜             = EffectMeta(\"嘻哈眼镜\", True, \"6998017895024300557\", \"1238128\", \"3a23ea8d16fe9ec18850783595877e4b\", [\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认60%, 0% ~ 100%\"\"\"\n    天使                 = EffectMeta(\"天使\", True, \"7156481333189939720\", \"5374123\", \"14336b246c295332eee8b29c5dc807c4\", [\n                              EffectParam(\"effects_adjust_texture\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.900, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_number: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认90%, 0% ~ 100%\"\"\"\n    天使翅膀             = EffectMeta(\"天使翅膀\", True, \"6999514637767021070\", \"1378600\", \"f7acdf6cab043dbe7401ac89e572f6ff\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    奇行种               = EffectMeta(\"奇行种\", True, \"7168749461206733342\", \"6432361\", \"ca795d0b1827bcd27231c7c5a10825e3\", [])\n    局部模糊             = EffectMeta(\"局部模糊\", True, \"7036282000780562981\", \"1461580\", \"d61e04351e9ead6669cb6db1f4bdce05\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_noise: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认75%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认75%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\"\"\"\n    幻彩流光             = EffectMeta(\"幻彩流光\", True, \"7303422113812058633\", \"30319544\", \"5926b9713b3de1fe23a6b1790ba5d204\", [\n                              EffectParam(\"effects_adjust_texture\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.950, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认80%, 0% ~ 100%\n    effects_adjust_luminance: 默认20%, 0% ~ 100%\n    effects_adjust_intensity: 默认95%, 0% ~ 100%\n    effects_adjust_color: 默认20%, 0% ~ 100%\"\"\"\n    幻影平移             = EffectMeta(\"幻影平移\", True, \"7259667629357404730\", \"19114588\", \"4f4946b896cb4675e8514fa8d5af517a\", [\n                              EffectParam(\"effects_adjust_rotate\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_rotate: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\"\"\"\n    彩虹流体             = EffectMeta(\"彩虹流体\", True, \"7273753115604554295\", \"21883974\", \"2725088e1378997bea428c8b04e2b15f\", [\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认90%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    彩虹边缘             = EffectMeta(\"彩虹边缘\", True, \"7306769922535723558\", \"31771661\", \"e59040f43c25146de23341ac4b47a8bf\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.150, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认55%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认60%, 0% ~ 100%\n    effects_adjust_rotate: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认15%, 0% ~ 100%\"\"\"\n    影分身               = EffectMeta(\"影分身\", True, \"7306822259186864691\", \"31622417\", \"8088e845f5e6b8aecd6a9245cf033cfb\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    恶魔之翼             = EffectMeta(\"恶魔之翼\", True, \"7008049313305596446\", \"1404730\", \"99cdde82bb5587966f1a2bac10d024f2\", [\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    情绪定格             = EffectMeta(\"情绪定格\", True, \"7298250619167445531\", \"28662656\", \"b60fd80757a580b75be83ea1b8905ef3\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.100, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_range: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认10%, 0% ~ 100%\"\"\"\n    我太可爱了           = EffectMeta(\"我太可爱了\", True, \"7132773677086544398\", \"4104909\", \"76739264135fb0471d1ac7d9fa8b2027\", [])\n    我爱了               = EffectMeta(\"我爱了\", True, \"7182098630935843385\", \"9267743\", \"9ea5207040ca8a6c673eee1c8f4213e9\", [])\n    我麻了               = EffectMeta(\"我麻了\", True, \"7030722591358718494\", \"1441766\", \"b3078ea7691c02789dec4360d7ebd5a5\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    手写描边             = EffectMeta(\"手写描边\", True, \"7108559446065811998\", \"2869818\", \"59694d712050ddb032105f620b50ffe6\", [\n                              EffectParam(\"effects_adjust_color\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.210, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认20%, 0% ~ 100%\n    effects_adjust_size: 默认21%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认20%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认80%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    捕梦                 = EffectMeta(\"捕梦\", True, \"7038866261677183524\", \"1471454\", \"24df2e977ac4752adaeb8f4495e98aeb\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    撕纸拼贴             = EffectMeta(\"撕纸拼贴\", True, \"7406207253583237682\", \"80787899\", \"e2b5e11e2f24940b65c91615723613f6\", [])\n    旋转分身             = EffectMeta(\"旋转分身\", True, \"7259667753731101244\", \"19114658\", \"f2a47eb17a20c6272e939350cf2268d3\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.300, 0.000, 0.750),\n                              EffectParam(\"effects_adjust_blur\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认30%, 0% ~ 75%\n    effects_adjust_blur: 默认40%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\"\"\"\n    无限穿越             = EffectMeta(\"无限穿越\", True, \"7293870099738399269\", \"27074734\", \"f6bed6028a99ff60118167854f1f6ed1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认0%, 0% ~ 100%\"\"\"\n    有事吗               = EffectMeta(\"有事吗？\", True, \"7322382230930592266\", \"39451195\", \"2cab81a0a4cad0393890f3eaad56a191\", [\n                              EffectParam(\"effects_adjust_texture\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认80%, 0% ~ 100%\n    effects_adjust_background_animation: 默认60%, 0% ~ 100%\"\"\"\n    机械环绕_I           = EffectMeta(\"机械环绕 I\", True, \"6986465789259813406\", \"1238184\", \"bff38e9886478c86635d990f78ca68cd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    机械环绕_II          = EffectMeta(\"机械环绕 II\", True, \"6997731822104744478\", \"1238185\", \"66eb2b1b98e4ada7cacba9c39d37be74\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    梦境                 = EffectMeta(\"梦境\", True, \"7039963252612141598\", \"1478040\", \"9f78e88b23ebbef1edc3439c2fc34c52\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    气炸了               = EffectMeta(\"气炸了\", True, \"7026548629498237454\", \"1426832\", \"979ebc680f1241a86545102632c79dff\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    波点分身             = EffectMeta(\"波点分身\", True, \"7086779590768595469\", \"1826180\", \"47f63e0ad4dd5f9c3d2045075b6795d4\", [\n                              EffectParam(\"effects_adjust_color\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认60%, 0% ~ 100%\n    effects_adjust_intensity: 默认25%, 0% ~ 100%\n    effects_adjust_range: 默认0%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    流体故障             = EffectMeta(\"流体故障\", True, \"7287114240089920061\", \"24949284\", \"f6cfc884ea840da552785ed2c1a3309b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_distortion: 默认70%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认80%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\"\"\"\n    涂鸦鬼影             = EffectMeta(\"涂鸦鬼影\", True, \"7153917024723276325\", \"5185037\", \"9570d183c3973de1498c638834c5136d\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    漩涡溶解             = EffectMeta(\"漩涡溶解\", True, \"7201020527501120057\", \"9583557\", \"3281d02205f102f70c4b07021be5bc71\", [\n                              EffectParam(\"effects_adjust_distortion\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.450, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_distortion: 默认45%, 0% ~ 100%\n    effects_adjust_speed: 默认45%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认45%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认25%, 0% ~ 100%\n    effects_adjust_size: 默认45%, 0% ~ 100%\n    effects_adjust_range: 默认45%, 0% ~ 100%\"\"\"\n    火焰图腾             = EffectMeta(\"火焰图腾\", True, \"7009186785662079524\", \"1404736\", \"35e9cbe081d47066558a717ce3a774d8\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    点赞                 = EffectMeta(\"点赞\", True, \"7072663671096218143\", \"1609620\", \"9f934cf082ec4d56a6f86e6e1aa2c8f6\", [\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认25%, 0% ~ 100%\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_number: 默认50%, 0% ~ 100%\"\"\"\n    热力光谱_I           = EffectMeta(\"热力光谱 I\", True, \"7033284501253919268\", \"1451182\", \"b578d3e33d8c650dc445c19875f9613f\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.801, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    热力光谱_II          = EffectMeta(\"热力光谱 II\", True, \"7033338062113346056\", \"1451606\", \"b711586fdabf06e7975e4bc2f2d906e6\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.801, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    焰火                 = EffectMeta(\"焰火\", True, \"7008459945590919716\", \"1404695\", \"3dc040bd8a6d3853428cc18030e7872a\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    熬夜冠军             = EffectMeta(\"熬夜冠军\", True, \"7330555999801053746\", \"43238686\", \"071e4eb6e85a9778b415bcb9303fd867\", [\n                              EffectParam(\"effects_adjust_texture\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认80%, 0% ~ 100%\"\"\"\n    爱心                 = EffectMeta(\"爱心\", True, \"7068191600148484638\", \"1587990\", \"cda6bba22c1e6038233c0aaf3ec7c0ee\", [\n                              EffectParam(\"effects_adjust_number\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_number: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    爱心发射             = EffectMeta(\"爱心发射\", True, \"7057403623004705294\", \"1551876\", \"665453673ccb652b012a46f63d32109d\", [\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.350, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_speed: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认35%, 0% ~ 100%\"\"\"\n    爱心泡泡             = EffectMeta(\"爱心泡泡\", True, \"7055592805174874632\", \"1551930\", \"62cf1078f3a0e623c349cb4200f3de26\", [\n                              EffectParam(\"effects_adjust_size\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认35%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    爱心眼               = EffectMeta(\"爱心眼\", True, \"7104647986176594463\", \"2491250\", \"aeee56c74c823b2afda571c023d0f992\", [\n                              EffectParam(\"effects_adjust_color\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.050, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认15%, 0% ~ 100%\n    effects_adjust_size: 默认20%, 0% ~ 100%\n    effects_adjust_range: 默认5%, 0% ~ 100%\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\"\"\"\n    爱心美瞳             = EffectMeta(\"爱心美瞳\", True, \"7194734371872444965\", \"8950197\", \"23b70724f639f5020f4a4f6a53011868\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    狱火                 = EffectMeta(\"狱火\", True, \"7007676026406834725\", \"1404692\", \"29903a65ede13673b23ac1eedc118b5d\", [\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    生气                 = EffectMeta(\"生气\", True, \"7068227476035473928\", \"1588764\", \"5c652a8c8a664b41ec7c59fa569ee3e8\", [\n                              EffectParam(\"effects_adjust_number\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_number: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    电光描边_II          = EffectMeta(\"电光描边 II\", True, \"7265989852099777061\", \"20444547\", \"3a3aee848d3e7c13822281957ef09093\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.110, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认75%, 0% ~ 100%\n    effects_adjust_distortion: 默认65%, 0% ~ 100%\n    effects_adjust_size: 默认75%, 0% ~ 100%\n    effects_adjust_color: 默认11%, 0% ~ 100%\n    effects_adjust_range: 默认20%, 0% ~ 100%\n    effects_adjust_speed: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\"\"\"\n    电光灼烧             = EffectMeta(\"电光灼烧\", True, \"7259649795571061305\", \"19106834\", \"3e5d0b31ae925f24539d89b017879815\", [\n                              EffectParam(\"effects_adjust_rotate\", 0.730, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_rotate: 默认73%, 0% ~ 100%\n    effects_adjust_color: 默认80%, 0% ~ 100%\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\n    effects_adjust_distortion: 默认30%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    电光眼               = EffectMeta(\"电光眼\", True, \"7106778883143242271\", \"2724384\", \"12aed71e7e62dafe99b6ff5ef264a36d\", [\n                              EffectParam(\"effects_adjust_color\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认25%, 0% ~ 100%\n    effects_adjust_range: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认25%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    电光耳机             = EffectMeta(\"电光耳机\", True, \"6998018067154342408\", \"1238127\", \"19a87efa0bebe59cdf36eda727a66664\", [\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    眼神光               = EffectMeta(\"眼神光\", True, \"7091874262364983815\", \"1793042\", \"665fec8aacac1d793e7917a0a0ec3ab3\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.850, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认75%, 0% ~ 100%\n    effects_adjust_range: 默认85%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\"\"\"\n    瞬移                 = EffectMeta(\"瞬移\", True, \"7322735107280736805\", \"39618119\", \"29e526f7936cb5e985f77da6c51498ef\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\"\"\"\n    碎片分身             = EffectMeta(\"碎片分身\", True, \"7207691092655870523\", \"10339835\", \"86532426a7e3c08c229dd518c51a893c\", [\n                              EffectParam(\"effects_adjust_range\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.950, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认10%, 0% ~ 100%\n    effects_adjust_intensity: 默认95%, 0% ~ 100%\n    effects_adjust_speed: 默认0%, 0% ~ 100%\"\"\"\n    碎闪边缘             = EffectMeta(\"碎闪边缘\", True, \"7306471467397419547\", \"31771693\", \"7c1311ff7b01577587a28252b3cd5d46\", [\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.150, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认80%, 0% ~ 100%\n    effects_adjust_size: 默认20%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_luminance: 默认15%, 0% ~ 100%\"\"\"\n    科技氛围_II          = EffectMeta(\"科技氛围 II\", True, \"6982572496356643359\", \"1238117\", \"d4b1ba4f4bb11a26860cd7f493853661\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    移形回位             = EffectMeta(\"移形回位\", True, \"7270801008094089784\", \"21811668\", \"4d2d96869fab0fa65766a52360c9fcef\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_luminance: 默认30%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    移形幻影_I           = EffectMeta(\"移形幻影 I\", True, \"7201010922742092325\", \"9583559\", \"c89c34b83924f3fb5c88f2ece2e095b8\", [\n                              EffectParam(\"effects_adjust_rotate\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_rotate: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认100%, 0% ~ 100%\"\"\"\n    移形幻影_II          = EffectMeta(\"移形幻影 II\", True, \"7194734891353772603\", \"9010339\", \"c4ce763e7fcd977c98e4b4a8be0b85a1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_rotate: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    空气流体             = EffectMeta(\"空气流体\", True, \"7283548311217246781\", \"24123133\", \"9882eb0caf97221ac6bd4161ead3a263\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.720, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.660, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\n    effects_adjust_speed: 默认40%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认72%, 0% ~ 100%\n    effects_adjust_size: 默认66%, 0% ~ 100%\"\"\"\n    笑哭                 = EffectMeta(\"笑哭\", True, \"7072173200418804231\", \"1606772\", \"9b86bc9942f7848d7ee7e7e74a077a4b\", [\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认25%, 0% ~ 100%\n    effects_adjust_speed: 默认30%, 0% ~ 100%\"\"\"\n    粒子弥散             = EffectMeta(\"粒子弥散\", True, \"7283038170826936892\", \"23970537\", \"7a72cd5b5950e933ca7f6df425537c21\", [\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.660, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_horizontal_shift: 默认66%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    美味召唤             = EffectMeta(\"美味召唤\", True, \"7073398095186235935\", \"1612792\", \"1e09bf5fc9f3bc36e9fdb479c832365b\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.600, 0.000, 1.200),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认60%, 0% ~ 120%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    sticker: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    蝴蝶翅膀             = EffectMeta(\"蝴蝶翅膀\", True, \"6999567409677865486\", \"1378607\", \"69eaf245462b3777f94dfc5aabe18791\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    轮廓扫描             = EffectMeta(\"轮廓扫描\", True, \"7260773990178755129\", \"19351962\", \"82f3b4a76091dda533a0ca1b0b2265e8\", [\n                              EffectParam(\"effects_adjust_color\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\n    effects_adjust_soft: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    迷幻分身             = EffectMeta(\"迷幻分身\", True, \"7280421849974968889\", \"23303207\", \"e2bd87ba0c294b5340a8b74cf7c3f954\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.850, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_rotate: 默认70%, 0% ~ 100%\n    effects_adjust_luminance: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认90%, 0% ~ 100%\n    effects_adjust_size: 默认85%, 0% ~ 100%\"\"\"\n    金币掉落             = EffectMeta(\"金币掉落\", True, \"7021362776404660743\", \"1543838\", \"06be5783fa794fc209023a283a47a7d3\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    镭射眼_I             = EffectMeta(\"镭射眼 I\", True, \"7106778448344912421\", \"2724386\", \"ea9d0666a569334a0c6b27c14ade2674\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认90%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    镭射眼_II            = EffectMeta(\"镭射眼 II\", True, \"7106778621326397983\", \"2724385\", \"3891948240e1594b7ea8025222341a9d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.620, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认62%, 0% ~ 100%\"\"\"\n    闪光放大             = EffectMeta(\"闪光放大\", True, \"7304912977180758537\", \"33838202\", \"a64dcdf7a22d382739051486535a4704\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_distortion: 默认70%, 0% ~ 100%\"\"\"\n    闪电                 = EffectMeta(\"闪电\", True, \"7088198349324554766\", \"1711412\", \"9c97ab760617a5c3bc75491b3ad8406b\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_speed: 默认10%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\"\"\"\n    闪电环绕             = EffectMeta(\"闪电环绕\", True, \"6998102186068546078\", \"1238186\", \"d2459fb754b3d9dbb469d29f6af77423\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    闪电眼               = EffectMeta(\"闪电眼\", True, \"7106763566262260231\", \"2722184\", \"6b6b4e9eb53581fea08118f62d55c1a9\", [\n                              EffectParam(\"effects_adjust_color\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.850, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认25%, 0% ~ 100%\n    effects_adjust_luminance: 默认25%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\n    effects_adjust_range: 默认85%, 0% ~ 100%\"\"\"\n    霓虹爱心             = EffectMeta(\"霓虹爱心\", True, \"7194734553288675895\", \"9221893\", \"cf3b121f71539f6fc039062473db7c43\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    高光人物             = EffectMeta(\"高光人物\", True, \"7406179353362436645\", \"80107647\", \"4264ef0b6e1ada149ba0580b36001e2c\", [])\n    黑色眼泪             = EffectMeta(\"黑色眼泪\", True, \"7154231632604434981\", \"5208347\", \"0343aabd4b0ef59cc829bd1732be0bbd\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/video_group_animation.py",
    "content": "\"\"\"视频组合动画元数据\"\"\"\n\nfrom .effect_meta import EffectEnum, AnimationMeta\n\nclass GroupAnimationType(EffectEnum):\n    \"\"\"视频组合动画类型\"\"\"\n\n    # 免费特效\n    三分割               = AnimationMeta(\"三分割\", False, 0.500, \"6873360856541827591\", \"922958\", \"558aba214155c31df287c64d9dc2b8e2\")\n    三分割_II            = AnimationMeta(\"三分割 II\", False, 0.500, \"6873360923646497293\", \"922957\", \"d7baaf62e894ef166fe291bb84332165\")\n    上下分割             = AnimationMeta(\"上下分割\", False, 0.500, \"6875935836177699335\", \"931224\", \"496fa5c31da1899de0cb0165138cd73f\")\n    上下分割_II          = AnimationMeta(\"上下分割 II\", False, 0.500, \"6875935919661126157\", \"3144548\", \"a6be02d01e9aa7277d023f063553543a\")\n    上升旋转             = AnimationMeta(\"上升旋转\", False, 0.500, \"6813965595915063815\", \"691841\", \"0cf52f154d94db3611b8dac8001fde2c\")\n    下降向右             = AnimationMeta(\"下降向右\", False, 0.500, \"6781683518222111239\", \"503140\", \"b5d536ab5791ef12d262982817b6ea0d\")\n    下降向左             = AnimationMeta(\"下降向左\", False, 0.500, \"6759351225772151303\", \"446392\", \"a1e5635da8aaa68df0eee59e202789dd\")\n    中间分割             = AnimationMeta(\"中间分割\", False, 0.500, \"6856970350270353928\", \"871868\", \"b2913d6efb446bda8d753430b8a13a82\")\n    中间分割_II          = AnimationMeta(\"中间分割 II\", False, 0.500, \"6856970411352003080\", \"871867\", \"3f62adfd71f2d308f59d4c3651fe5659\")\n    叠叠乐               = AnimationMeta(\"叠叠乐\", False, 0.500, \"6836319728038842894\", \"872824\", \"63c0c0634a0c5f99ec74f839421018b0\")\n    叠叠乐_II            = AnimationMeta(\"叠叠乐 II\", False, 0.500, \"6836319649844433415\", \"872826\", \"464c1a4bb1176029ffa3f1b6b7ae25be\")\n    叠叠乐_III           = AnimationMeta(\"叠叠乐 III\", False, 0.500, \"6836319781004513805\", \"872828\", \"8c55f6c4f5abf7d41e55a77fc8f5fdad\")\n    叠叠乐_IV            = AnimationMeta(\"叠叠乐 IV\", False, 0.500, \"6836319828656001550\", \"872830\", \"1b59e3f39c921c7b45f2cfa2daa6c71d\")\n    叠叠乐_V             = AnimationMeta(\"叠叠乐 V\", False, 0.500, \"6836319888827486728\", \"872834\", \"9d5c1a042586999b720b9c4582f15256\")\n    叠叠乐_Ⅵ             = AnimationMeta(\"叠叠乐 Ⅵ\", False, 0.500, \"6839582631345000967\", \"872836\", \"1c05ec01a8c9e8fc640a7b095ccf361d\")\n    右拉镜               = AnimationMeta(\"右拉镜\", False, 0.500, \"6772415374165021191\", \"471347\", \"1034060f611109671482d36f4d31fb17\")\n    向右下降             = AnimationMeta(\"向右下降\", False, 0.500, \"6781683438396117517\", \"503138\", \"3076ad170eb3bfc352c857e588defb4c\")\n    向右缩小             = AnimationMeta(\"向右缩小\", False, 0.500, \"6772415063216099848\", \"471341\", \"f5995769a9513563c0417cfe9b916183\")\n    向左下降             = AnimationMeta(\"向左下降\", False, 0.500, \"6760223716392571395\", \"447588\", \"9ba3825d7883b956d5e73f43f59db545\")\n    向左缩小             = AnimationMeta(\"向左缩小\", False, 0.500, \"6772415148423385607\", \"471343\", \"5c2a1617a5aa2f274bc12be4a41eed88\")\n    哈哈镜               = AnimationMeta(\"哈哈镜\", False, 0.500, \"6832226792556728846\", \"748348\", \"d6586e3b2806e4f4930ac34624c2967c\")\n    哈哈镜_II            = AnimationMeta(\"哈哈镜 II\", False, 0.500, \"6832226909875606029\", \"748350\", \"8eae60bc0b8c8d210f9f4b059c24ab64\")\n    四格滑动             = AnimationMeta(\"四格滑动\", False, 0.500, \"6883727868451361293\", \"945730\", \"1e8fc914a15209bc51eb0505f2e67816\")\n    四格翻转             = AnimationMeta(\"四格翻转\", False, 0.500, \"6865578846393995784\", \"1362932\", \"88c1ed96cfa3f182a341c27adc7edfdb\")\n    四格转动             = AnimationMeta(\"四格转动\", False, 0.500, \"6891835548688716302\", \"957940\", \"c849845a30f5df0c3b7f4b1620b5c248\")\n    四格转动_II          = AnimationMeta(\"四格转动 II\", False, 0.500, \"6891835601067184653\", \"957939\", \"087665cb644cb25f0ffbc99c8cb18237\")\n    回弹伸缩             = AnimationMeta(\"回弹伸缩\", False, 0.500, \"6795425591014199822\", \"530249\", \"2b125e477d54adb475d9834eb209f8c1\")\n    夹心饼干             = AnimationMeta(\"夹心饼干\", False, 0.500, \"6868146033247916558\", \"1362936\", \"23091e7d56610c4253a186488657cd30\")\n    夹心饼干_II          = AnimationMeta(\"夹心饼干 II\", False, 0.500, \"6868146123710665223\", \"1362934\", \"09b29b56757a17ad7ca31a57eb8b5726\")\n    小火车               = AnimationMeta(\"小火车\", False, 0.500, \"6860405888784536072\", \"885144\", \"b302925aabfc7ad44b7ff56cf3eeb1af\")\n    小火车_II            = AnimationMeta(\"小火车 II\", False, 0.500, \"6860406007160377863\", \"885143\", \"dc3796c0b273ece45e7b919f4e95b13e\")\n    小火车_III           = AnimationMeta(\"小火车 III\", False, 0.500, \"6860406091700769293\", \"885142\", \"665257a20f1d22af2ec8d5a22c57c35c\")\n    小火车_IV            = AnimationMeta(\"小火车 IV\", False, 0.500, \"6860406196130550286\", \"885141\", \"44d91b6dc8026eb108a2d58de508605a\")\n    小陀螺               = AnimationMeta(\"小陀螺\", False, 0.500, \"6874487656969933325\", \"923592\", \"a2ca54bf1fe5f095558e59d119f89dbb\")\n    小陀螺_II            = AnimationMeta(\"小陀螺 II\", False, 0.500, \"6874487735059485198\", \"923591\", \"decf2dddea3ff279910af80c73ec7e9e\")\n    左右分割             = AnimationMeta(\"左右分割\", False, 0.500, \"6886282872680878599\", \"948476\", \"2950fd3e74e3e251a83de19f46d12072\")\n    左右分割_II          = AnimationMeta(\"左右分割 II\", False, 0.500, \"6886282936048423431\", \"948475\", \"43bd89b22b945308fe5b7f722cf68c09\")\n    左拉镜               = AnimationMeta(\"左拉镜\", False, 0.500, \"6772415248973435395\", \"471345\", \"81d1a0c1b959c9910f775497cf55cffa\")\n    弹入旋转             = AnimationMeta(\"弹入旋转\", False, 0.500, \"6810286558826992136\", \"669963\", \"03a824f3bfa5b694a0ccbb8e83cc8c93\")\n    形变右缩             = AnimationMeta(\"形变右缩\", False, 0.500, \"6851395907804467720\", \"813139\", \"9add6fd7e0ee139401cb703b95bb307d\")\n    形变左缩             = AnimationMeta(\"形变左缩\", False, 0.500, \"6851395726937690637\", \"813140\", \"114b8e787f082f3fec108ee4b3f1be18\")\n    形变缩小             = AnimationMeta(\"形变缩小\", False, 0.500, \"6777260789263766030\", \"487587\", \"307f8bcc9b47ed8c20e5ac4822bb4659\")\n    悠悠球               = AnimationMeta(\"悠悠球\", False, 0.500, \"6821451358101574152\", \"717346\", \"7f09519094e625c0af9868f528821ad1\")\n    悠悠球_II            = AnimationMeta(\"悠悠球 II\", False, 0.500, \"6821451462904648200\", \"717348\", \"5505c62331247b24a5ce39730bcb9051\")\n    手机                 = AnimationMeta(\"手机\", False, 0.500, \"6861892418334102030\", \"1362928\", \"55fd386ec6f779110e3b12b89deaa79c\")\n    手机_II              = AnimationMeta(\"手机 II\", False, 0.500, \"6862918279183208973\", \"1362926\", \"b861f8270870663e5c3f8bbb1fced93a\")\n    手机_III             = AnimationMeta(\"手机 III\", False, 0.500, \"6862918366550561294\", \"1362924\", \"e056d0f8601d91d70e20e61bd63793f5\")\n    扭曲拉伸             = AnimationMeta(\"扭曲拉伸\", False, 0.500, \"7026278592623415822\", \"1426278\", \"ca0a43e525601adf9d14089393610d9c\")\n    抖入放大             = AnimationMeta(\"抖入放大\", False, 0.500, \"6761360765925462536\", \"450264\", \"dcf80421b0f2682c13b062d0c599aac4\")\n    拉伸扭曲             = AnimationMeta(\"拉伸扭曲\", False, 0.500, \"7025952723027628557\", \"1425496\", \"39862f9fa5c934d72d36923f2368de4a\")\n    放大弹动             = AnimationMeta(\"放大弹动\", False, 0.500, \"7023931891363353101\", \"1418682\", \"8ba074c2bba2e21717e17f4e80fb80d7\")\n    斜转                 = AnimationMeta(\"斜转\", False, 0.500, \"6847734302193488392\", \"872874\", \"4cc2597d961bafbd3c7877bc3f75f79a\")\n    斜转_II              = AnimationMeta(\"斜转 II\", False, 0.500, \"6847734360636920327\", \"872876\", \"b37e163c186d88db144aacd6280c0811\")\n    方片转动             = AnimationMeta(\"方片转动\", False, 0.500, \"6897114113726485000\", \"968162\", \"dfc6082d56863c5e700a0a5a17102abc\")\n    方片转动_II          = AnimationMeta(\"方片转动 II\", False, 0.500, \"6897114201702011405\", \"968161\", \"afdb5e78ddf7d480e78cabb527db9241\")\n    旋入晃动             = AnimationMeta(\"旋入晃动\", False, 0.500, \"6789167874511475207\", \"519840\", \"f791a333e80fb4d7c2646c394adc2d25\")\n    旋出渐隐             = AnimationMeta(\"旋出渐隐\", False, 0.500, \"6824302025698710024\", \"719940\", \"40cee4a8c1457ab5e4f15645532fd23e\")\n    旋转上升             = AnimationMeta(\"旋转上升\", False, 0.500, \"6813965670716281352\", \"691843\", \"982059c400ca42676d02f9847d281e1e\")\n    旋转伸缩             = AnimationMeta(\"旋转伸缩\", False, 0.500, \"6795425422046663182\", \"530247\", \"2c211882b63c7115a7c687faf3c79237\")\n    旋转回吸             = AnimationMeta(\"旋转回吸\", False, 0.500, \"6810286613898203661\", \"669965\", \"57c2c2e50d57bc5ea10b8c32f8e850cb\")\n    旋转缩小             = AnimationMeta(\"旋转缩小\", False, 0.500, \"6759046644462785037\", \"445858\", \"a6749bbbebb7a8fb3ad27679989b7401\")\n    旋转降落             = AnimationMeta(\"旋转降落\", False, 0.500, \"6759046515521491464\", \"445856\", \"7c87f107b2dbc7d9abe648f4f6e86e58\")\n    晃动旋出             = AnimationMeta(\"晃动旋出\", False, 0.500, \"6789167998700622350\", \"519842\", \"49fa06c52e99c0fe974343b4da58e94c\")\n    水晶                 = AnimationMeta(\"水晶\", False, 0.500, \"6857333749718192654\", \"1362920\", \"de28fd5ff1c5fa607cc09306a5de1fc9\")\n    水晶_II              = AnimationMeta(\"水晶 II\", False, 0.500, \"6857333869541069325\", \"1362922\", \"66d0f40fad32ba15e72d6687f12604f8\")\n    波动滑出             = AnimationMeta(\"波动滑出\", False, 0.500, \"7017646605671076359\", \"1392376\", \"c546f43ce65a4977ee11010063ee7b50\")\n    海盗船               = AnimationMeta(\"海盗船\", False, 0.500, \"6830302168751280648\", \"1362866\", \"a5e464c4bb091e8e43077aa05a1b20a8\")\n    海盗船_II            = AnimationMeta(\"海盗船 II\", False, 0.500, \"6830302282995732999\", \"1362868\", \"e4b5dc8efea09d3b0f0a7f8e780e489c\")\n    海盗船_III           = AnimationMeta(\"海盗船 III\", False, 0.500, \"6830302335047045639\", \"1362872\", \"59258d3cbc5c09058d95ee8721dd83f4\")\n    海盗船_IV            = AnimationMeta(\"海盗船 IV\", False, 0.500, \"6830302424826122765\", \"1362870\", \"fa532cb7a9d382c56927facf5cea657b\")\n    滑入波动             = AnimationMeta(\"滑入波动\", False, 0.500, \"7023747922718102023\", \"1418546\", \"7c4a80c235da2050b672f66a0a9e54b3\")\n    滑滑梯               = AnimationMeta(\"滑滑梯\", False, 0.500, \"6828829568879563271\", \"741020\", \"4727fafafc252616d70342eac1117dea\")\n    滑滑梯_II            = AnimationMeta(\"滑滑梯 II\", False, 0.500, \"6828829741013799432\", \"741022\", \"1ae8aa09ca773e05cd96aed6569e49a1\")\n    百叶窗               = AnimationMeta(\"百叶窗\", False, 0.500, \"6771299961171612174\", \"467361\", \"f4cf50145a6c09ce363ca7d49ecbc05f\")\n    百叶窗_II            = AnimationMeta(\"百叶窗 II\", False, 0.500, \"6782101071402635790\", \"506768\", \"4ad738f1e4cfcde6caca3c405fc54da7\")\n    碎块滑动             = AnimationMeta(\"碎块滑动\", False, 0.500, \"6778405418969338382\", \"490068\", \"408dbd74e95497bd0323693a477ab2a3\")\n    碎块滑动_II          = AnimationMeta(\"碎块滑动 II\", False, 0.500, \"6778300107113632269\", \"489860\", \"6f301b82e6b6b1ece2a98e182f6768ba\")\n    立方体               = AnimationMeta(\"立方体\", False, 0.500, \"6837352063496622599\", \"872856\", \"71ae450afeb88ae2620473ab790acf0e\")\n    立方体_II            = AnimationMeta(\"立方体 II\", False, 0.500, \"6834812485023830535\", \"872858\", \"efc0e23b864f5fcfbaa77723044c4957\")\n    立方体_III           = AnimationMeta(\"立方体 III\", False, 0.500, \"6834812541118452237\", \"872860\", \"dfc2e372bc454764f0b355904542e228\")\n    立方体_IV            = AnimationMeta(\"立方体 IV\", False, 0.500, \"6841793140949520910\", \"872864\", \"c66bf1692fe1e6bd6dd2e49eddfcd0c0\")\n    立方体_V             = AnimationMeta(\"立方体 V\", False, 0.500, \"6841793224663634446\", \"873096\", \"e3935dbcaf28be18a598eebb8fb79161\")\n    绕圈圈               = AnimationMeta(\"绕圈圈\", False, 0.500, \"6850287838441771534\", \"872868\", \"98bfd8ca3177b85246b18502832232f0\")\n    绕圈圈_II            = AnimationMeta(\"绕圈圈 II\", False, 0.500, \"6850287920255865357\", \"872872\", \"10eaa3db7b761a9846764a53912d7c77\")\n    绕圈圈_III           = AnimationMeta(\"绕圈圈 III\", False, 0.500, \"6854782718975152653\", \"872918\", \"c2e7ff02916f19a13ada361abddb8f98\")\n    绕圈圈_IV            = AnimationMeta(\"绕圈圈 IV\", False, 0.500, \"6854782786553778695\", \"872920\", \"1e7d503bcf05a17f175759e5c6cfbe7b\")\n    缩小弹动             = AnimationMeta(\"缩小弹动\", False, 0.500, \"7017689072978104869\", \"1392530\", \"8ff952ad209f2beac6dfa82b103f769e\")\n    缩小旋转             = AnimationMeta(\"缩小旋转\", False, 0.500, \"6760119657429996046\", \"447318\", \"8fdf7f5cf2dbd5754e523198d71dff49\")\n    缩小转出             = AnimationMeta(\"缩小转出\", False, 0.500, \"6805018974070247950\", \"638823\", \"1e9ab706223c64254aa89156a993a3d7\")\n    缩放                 = AnimationMeta(\"缩放\", False, 0.500, \"6759078592740594184\", \"446078\", \"79b143942a4f8b4b9c80b08e37994e00\")\n    缩放_II              = AnimationMeta(\"缩放 II\", False, 0.500, \"6779083172429697544\", \"493000\", \"e70e98fcda08b4c01969e1878d7fe9a0\")\n    翻转                 = AnimationMeta(\"翻转\", False, 0.500, \"6843309964732142094\", \"872838\", \"5f153d35f1c3098fef8325badc40c5e8\")\n    翻转_II              = AnimationMeta(\"翻转 II\", False, 0.500, \"6843310029689328135\", \"872840\", \"befc44f24a2747201d1d75e6a29753ce\")\n    翻转_III             = AnimationMeta(\"翻转 III\", False, 0.500, \"6843310084743762446\", \"872842\", \"b8167fc9e9deb2f638788bfc7539ed7f\")\n    翻转_IV              = AnimationMeta(\"翻转 IV\", False, 0.500, \"6843310129736061447\", \"872844\", \"9636ccab84e8f2c357812a38b785f6e0\")\n    翻转_V               = AnimationMeta(\"翻转 V\", False, 0.500, \"6843310237902967304\", \"872848\", \"4d27983b5b2899b46334d3fd999bc7d8\")\n    翻转_VI              = AnimationMeta(\"翻转 VI\", False, 0.500, \"6843310299991249421\", \"872850\", \"8807b174b58ee897667c08e6bee1a4f8\")\n    荡秋千               = AnimationMeta(\"荡秋千\", False, 0.500, \"6811007755785081357\", \"680643\", \"738c6740ca709cafb7045c4e3037cff0\")\n    荡秋千_II            = AnimationMeta(\"荡秋千 II\", False, 0.500, \"6811007833069326862\", \"680645\", \"bf46ce3a5478399205c1fc4bbfd7ded0\")\n    转入转出             = AnimationMeta(\"转入转出\", False, 0.500, \"6805012562174808590\", \"638793\", \"bb04a13adc846f9b35a4054c06e5ac59\")\n    转入转出_II          = AnimationMeta(\"转入转出 II\", False, 0.500, \"6818747242258633224\", \"701967\", \"e1415d8f52a5837cef9bc29e6c17cc57\")\n    转圈圈               = AnimationMeta(\"转圈圈\", False, 0.500, \"6829129745226011144\", \"741502\", \"234577a311bb87ef23c9b7d82174f584\")\n    过山车               = AnimationMeta(\"过山车\", False, 0.500, \"6870060878234915342\", \"911862\", \"64e30d2e2577f6a95313ed806807baa7\")\n    过山车_II            = AnimationMeta(\"过山车 II\", False, 0.500, \"6870060932928639501\", \"911861\", \"240042ee2b35aaa7f30b6e0c03e9ac4c\")\n    降落旋转             = AnimationMeta(\"降落旋转\", False, 0.500, \"6759075297091392007\", \"446076\", \"9c7be518c1cc63a947fdc2e311b724e9\")\n    魔方                 = AnimationMeta(\"魔方\", False, 0.500, \"6870060995365048840\", \"1362938\", \"b104d21e0f1b7eb044946f6bf0be1133\")\n    魔方_II              = AnimationMeta(\"魔方 II\", False, 0.500, \"6870061049559650829\", \"1362940\", \"53bc750124a30d746adbf44151116fde\")\n\n    # 付费特效\n    分身                 = AnimationMeta(\"分身\", True, 0.500, \"6883761132645913096\", \"945872\", \"438dd3c43be7ac470cbcca81169f2cfc\")\n    分身_II              = AnimationMeta(\"分身 II\", True, 0.500, \"6883761226950644231\", \"945871\", \"7dbd67e473fbe25e024e0ccc91c48f29\")\n    动感摇晃I            = AnimationMeta(\"动感摇晃I\", True, 0.500, \"7173927429394666020\", \"6983415\", \"ceb6b5bf10aab23f1066481cefd5adfb\")\n    动感摇晃II           = AnimationMeta(\"动感摇晃II\", True, 100.000, \"7175103054956466744\", \"7129471\", \"4e88c30adc92ca2809d285ab67276467\")\n    四格滑动_II          = AnimationMeta(\"四格滑动 II\", True, 0.500, \"6883727923845534216\", \"945729\", \"1e04f7d49030244ee10eafeb832f372e\")\n    四格翻转_II          = AnimationMeta(\"四格翻转 II\", True, 0.500, \"6865579178599649806\", \"1362930\", \"840aa022c0a9b3b6b4876dd7084372b7\")\n    回忆旋转             = AnimationMeta(\"回忆旋转\", True, 0.500, \"7186961278022193722\", \"8300599\", \"fa3c068a56733a2149d5c0d03560aad8\")\n    坠落                 = AnimationMeta(\"坠落\", True, 0.500, \"7235902373971890747\", \"14020637\", \"0049e2c104b1ae46dbf717ea73b71234\")\n    弹动冲屏             = AnimationMeta(\"弹动冲屏\", True, 0.500, \"7200308690904158778\", \"9491799\", \"179cec03f1ad01245c554a599699d9ad\")\n    波动吸收             = AnimationMeta(\"波动吸收\", True, 0.500, \"7107468232390349349\", \"2786424\", \"ddbc0f962c69263480e6d188bf2f4b63\")\n    波动放大             = AnimationMeta(\"波动放大\", True, 0.500, \"7111631619768717860\", \"3113716\", \"90f87e49deba3845d73b5855dc3fa442\")\n    相框滑动             = AnimationMeta(\"相框滑动\", True, 0.500, \"7206139216038728248\", \"10166295\", \"517a71d78782ebc9a9718acfb865fba9\")\n    红酒摇晃             = AnimationMeta(\"红酒摇晃\", True, 0.800, \"6903771548436402702\", \"1417022\", \"95d79896a437524c4f94dc2902bb3b6c\")\n    跳跳糖               = AnimationMeta(\"跳跳糖\", True, 0.700, \"7199944821098680890\", \"9432783\", \"fc4e0cc6a2f2c775659fa9493cff9fe8\")\n    闪光放大             = AnimationMeta(\"闪光放大\", True, 0.500, \"7166437469909422623\", \"6210029\", \"d73e12e5f219c298b59fcca7f34fadac\")\n    闪光放大_II          = AnimationMeta(\"闪光放大 II\", True, 0.500, \"7166437532568130055\", \"6210033\", \"0abf6172e49e9aab880f6a2283ffe5e2\")\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/video_intro.py",
    "content": "\"\"\"视频片段入场动画元数据\"\"\"\n\nfrom .effect_meta import EffectEnum, AnimationMeta\n\nclass IntroType(EffectEnum):\n    \"\"\"视频/图片入场动画类型\"\"\"\n\n    # 免费特效\n    Kira游动             = AnimationMeta(\"Kira游动\", False, 2.267, \"7311984593387655731\", \"34176967\", \"05daa2cb2b53e1830a0e657ede749daf\")\n    上下抖动             = AnimationMeta(\"上下抖动\", False, 0.500, \"6739418390030455300\", \"431652\", \"bff95de5e1e4803ea64a52632bcfb361\")\n    动感放大             = AnimationMeta(\"动感放大\", False, 0.500, \"6740867832570974733\", \"431662\", \"3d880239a1fa70fbaedcc7fd20794e22\")\n    动感缩小             = AnimationMeta(\"动感缩小\", False, 0.500, \"6740868384637850120\", \"431658\", \"8357dd30914ef6ba1ba89dd12a83dc3e\")\n    向上滑动             = AnimationMeta(\"向上滑动\", False, 0.500, \"6798333487523828238\", \"624739\", \"91285fcdbc398dd776994fd67b3c93fb\")\n    向上转入             = AnimationMeta(\"向上转入\", False, 0.500, \"6808401616564130312\", \"645307\", \"5bf5677a81740d903c673d6647979f92\")\n    向上转入_II          = AnimationMeta(\"向上转入 II\", False, 0.500, \"6818747060649464327\", \"701961\", \"4f2fac081f3d5f7e28c9ba131a397e83\")\n    向下滑动             = AnimationMeta(\"向下滑动\", False, 0.500, \"6798333705401143816\", \"624735\", \"1b122a36e9704adc7ed708dc38b5cde3\")\n    向下甩入             = AnimationMeta(\"向下甩入\", False, 0.500, \"6739338374441603598\", \"431638\", \"afb5afec3c42fa627a007ff609c83792\")\n    向右上甩入           = AnimationMeta(\"向右上甩入\", False, 0.500, \"6740122731418751495\", \"431644\", \"12ae5b6cc0b2bff43e958d5ca2d574fe\")\n    向右下甩入           = AnimationMeta(\"向右下甩入\", False, 0.500, \"6739395718223499787\", \"431640\", \"f821a402edb042a9d68d825cb804ac6e\")\n    向右滑动             = AnimationMeta(\"向右滑动\", False, 0.500, \"6798333076469453320\", \"624743\", \"47da2c90ea02fe7fe43964d6f1a4763e\")\n    向右甩入             = AnimationMeta(\"向右甩入\", False, 0.500, \"6739338727866241539\", \"431636\", \"228f76b86355e74087a9a80647236b88\")\n    向右转入             = AnimationMeta(\"向右转入\", False, 0.500, \"6805019065761927694\", \"638825\", \"6c3e6841393ea481e24f9609795ffdad\")\n    向左上甩入           = AnimationMeta(\"向左上甩入\", False, 0.500, \"6740122563692728844\", \"431648\", \"aa97897803351debd46c9182132c64c5\")\n    向左下甩入           = AnimationMeta(\"向左下甩入\", False, 0.500, \"6739395445346275853\", \"431642\", \"269d5e19ed83faa5f5c72a1401e4564b\")\n    向左滑动             = AnimationMeta(\"向左滑动\", False, 0.500, \"6798332871267324423\", \"624747\", \"5b60ce256ff3e027d8faac4cbf9b333a\")\n    向左转入             = AnimationMeta(\"向左转入\", False, 0.500, \"6816560956647150093\", \"699157\", \"154e410f1e8b2e36a30ff4d5201c8146\")\n    左右抖动             = AnimationMeta(\"左右抖动\", False, 0.500, \"6739418540421419524\", \"431654\", \"7572d7461e38d73c578aa8e4dca7163a\")\n    抖动下降             = AnimationMeta(\"抖动下降\", False, 0.500, \"6991764455931515422\", \"1206320\", \"4e6015e353a96bce299925a8c9fbc1d9\")\n    折叠开幕             = AnimationMeta(\"折叠开幕\", False, 1.500, \"7239273897491698232\", \"14506065\", \"1a5f55beade9f0bcfc16abb0cc048bb0\")\n    放大                 = AnimationMeta(\"放大\", False, 0.500, \"6798332733694153230\", \"624751\", \"028a77e121c22a4dd130a46a0ed90714\")\n    斜切                 = AnimationMeta(\"斜切\", False, 0.700, \"7210657307938525751\", \"10696371\", \"a385761197d457f4599d231421045230\")\n    旋转                 = AnimationMeta(\"旋转\", False, 0.500, \"6798334070653719054\", \"624731\", \"1b4ac2773d9c05ffb34dca05cf91b030\")\n    旋转开幕             = AnimationMeta(\"旋转开幕\", False, 1.000, \"7186944542409495099\", \"8295043\", \"407822a27a67612c3caa3e4223aa32d3\")\n    渐显                 = AnimationMeta(\"渐显\", False, 0.500, \"6798320778182922760\", \"624705\", \"ee269b77e45a2466bd3e9cab0cff7137\")\n    漩涡旋转             = AnimationMeta(\"漩涡旋转\", False, 0.500, \"6782010677520241165\", \"703281\", \"edc6024d7570bc32b857956c1535209f\")\n    缩小                 = AnimationMeta(\"缩小\", False, 0.500, \"6798332584276267527\", \"624755\", \"280a82a500b34c3d84b078b2475803ff\")\n    翻入                 = AnimationMeta(\"翻入\", False, 1.170, \"7452407076417966619\", \"98430529\", \"bd0a96cbfbb58eb67c5f4e86f537b858\")\n    跳转开幕             = AnimationMeta(\"跳转开幕\", False, 0.733, \"7279999334001676857\", \"23185431\", \"817876a62d2d05e4eef9ac4cfa9c70fe\")\n    轻微抖动             = AnimationMeta(\"轻微抖动\", False, 0.500, \"6739418227031413256\", \"431664\", \"7ec99bda70fa6922395d65235991f9e5\")\n    轻微抖动_II          = AnimationMeta(\"轻微抖动 II\", False, 0.500, \"6739418677910704651\", \"431650\", \"8e29ab0a86dac5719300064821e8b63d\")\n    轻微抖动_III         = AnimationMeta(\"轻微抖动 III\", False, 0.500, \"6781683302672634382\", \"503136\", \"e25fa4efce8d2c62016bc11a0e0d4904\")\n    轻微放大             = AnimationMeta(\"轻微放大\", False, 0.500, \"6800268825611735559\", \"629085\", \"a8eddffa64b3bf8b6befe1e4e6e91df9\")\n    钟摆                 = AnimationMeta(\"钟摆\", False, 0.500, \"6803260897117606414\", \"636115\", \"31439e9447cd9709309fd44a22c1ad1c\")\n    镜像翻转             = AnimationMeta(\"镜像翻转\", False, 0.500, \"6797338697625768455\", \"646003\", \"55ec076a5d62f7e80655e60c43f68f80\")\n    雨刷                 = AnimationMeta(\"雨刷\", False, 0.500, \"6802871256849846791\", \"634681\", \"3d08753b4ef1c5b6cd560872c13f25ad\")\n    雨刷_II              = AnimationMeta(\"雨刷 II\", False, 0.500, \"6805748897768542727\", \"640101\", \"aef16d1fb0f1275265a780b309628d32\")\n\n    # 付费特效\n    _2024                = AnimationMeta(\"2024\", True, 1.500, \"7309774750677471794\", \"33056565\", \"d68370ce25f28ec80d9c0bb7e51e2324\")\n    _2025                = AnimationMeta(\"2025\", True, 1.500, \"7446306216038371891\", \"95801149\", \"58944f40a06bd8f495878ecdcb571345\")\n    PASSION              = AnimationMeta(\"PASSION\", True, 2.000, \"7432237078705869362\", \"88544178\", \"a080de8fb1526e31a9dee3e45e459c4e\")\n    三屏下滑             = AnimationMeta(\"三屏下滑\", True, 1.830, \"7436273289170784818\", \"90036560\", \"381d876d9928eb62bde9747611283907\")\n    三屏切闪             = AnimationMeta(\"三屏切闪\", True, 1.040, \"7434412782289687066\", \"89308508\", \"c75441422682a6328f53c83b67d30979\")\n    九宫格               = AnimationMeta(\"九宫格\", True, 2.000, \"7434746460186350090\", \"90178902\", \"9eb29d05c1cd6329ec504d4fa2c57b09\")\n    交叉震动             = AnimationMeta(\"交叉震动\", True, 0.833, \"7222990639984546360\", \"12309329\", \"cde910202607be12ac747e2e76316e7f\")\n    交错开幕             = AnimationMeta(\"交错开幕\", True, 1.100, \"7280797339042714169\", \"23387955\", \"123322fa9ce7c37f0c2c35819f00b524\")\n    侧滑                 = AnimationMeta(\"侧滑\", True, 0.600, \"7239559299196785209\", \"14524393\", \"c67d95e820752346af44e2cb515c0115\")\n    便利贴               = AnimationMeta(\"便利贴\", True, 0.900, \"7379456870265655859\", \"70486392\", \"06613663efa8ef29beadf8746019c823\")\n    冬季雪花             = AnimationMeta(\"冬季雪花\", True, 2.000, \"7447044440868262451\", \"96136129\", \"088d30b9eee734c026dcb2d8f11618f4\")\n    冰块                 = AnimationMeta(\"冰块\", True, 1.300, \"7413325383308677683\", \"82268315\", \"2224a7b3f79152b77566727a1290f706\")\n    冰雪融化             = AnimationMeta(\"冰雪融化\", True, 2.920, \"7447044440868278794\", \"96136131\", \"0508ed7e6fe8ff42ab78164ffb629836\")\n    冲撞                 = AnimationMeta(\"冲撞\", True, 2.000, \"7215530662986519096\", \"11320895\", \"aeadb248c06d074a2d98f425a57999f0\")\n    分屏横移             = AnimationMeta(\"分屏横移\", True, 1.000, \"7257878167023522365\", \"18746326\", \"dcadf2284399fe6200f77fad9a1ec41a\")\n    分屏组合             = AnimationMeta(\"分屏组合\", True, 2.960, \"7434746460186366515\", \"89406819\", \"2defa48676a2b511bbb333ca7d69d72c\")\n    分屏翻转             = AnimationMeta(\"分屏翻转\", True, 0.700, \"7257782721575916088\", \"18711457\", \"013f6255cb0672198f26962bff3f788b\")\n    分身模糊             = AnimationMeta(\"分身模糊\", True, 1.500, \"7434746460186350131\", \"89406818\", \"3573d7a9a1fa61187b074920225113df\")\n    划水                 = AnimationMeta(\"划水\", True, 0.800, \"7226632607939695161\", \"12811781\", \"57a259c58a4daddacc897c75ec9c10a4\")\n    区域色块滑动         = AnimationMeta(\"区域色块滑动\", True, 2.000, \"7436273288608748042\", \"90036562\", \"c6f4273c83dfdedaf158bb5e337dce56\")\n    十字震动             = AnimationMeta(\"十字震动\", True, 0.800, \"7352824361625063987\", \"54686020\", \"33d4a2ff79aa2fb88fadd45aee1998e9\")\n    卡片扫光             = AnimationMeta(\"卡片扫光\", True, 1.830, \"7437386424032186931\", \"90546137\", \"9f873b0475f78fe43bbc5f9d58cbcbf7\")\n    发光矩形             = AnimationMeta(\"发光矩形\", True, 1.033, \"7346511208171704841\", \"51093680\", \"64852509d7cb2a578469b3438b94df52\")\n    变速扩大             = AnimationMeta(\"变速扩大\", True, 0.960, \"7450031573954466314\", \"97484920\", \"60a1846c0d3b9fc2e695f8fa442a1061\")\n    变速时空             = AnimationMeta(\"变速时空\", True, 1.210, \"7437386424036364850\", \"90546138\", \"71b1183be83d398f726b090d3fc7b00d\")\n    向上滚动             = AnimationMeta(\"向上滚动\", True, 1.000, \"7312341574988337690\", \"34388476\", \"14e7c85bfa04ecbacc1e63ee386840b7\")\n    向上闪入             = AnimationMeta(\"向上闪入\", True, 0.700, \"7273389803532456504\", \"21816946\", \"ecaffca7c7e1d7744fa296a29f65b366\")\n    向下甩动             = AnimationMeta(\"向下甩动\", True, 1.400, \"7338320641306661410\", \"47050546\", \"060ee66b7f59d3d2c8064be5ae32171c\")\n    四屏转换             = AnimationMeta(\"四屏转换\", True, 1.000, \"7341283787143123507\", \"48492378\", \"fdd9abc8f2abadc0ae6e909779f282e6\")\n    圆形开幕             = AnimationMeta(\"圆形开幕\", True, 0.900, \"7218210014949806647\", \"11680735\", \"2c171ce2c85042bb518cbdc08ced9709\")\n    多层环形             = AnimationMeta(\"多层环形\", True, 2.000, \"7329444938960081460\", \"42686363\", \"54801ad31b13853ad1e3ccf945e89973\")\n    多屏分割I            = AnimationMeta(\"多屏分割I\", True, 1.420, \"7434055685572137509\", \"89192703\", \"945cf7d06a8e4cb96900930b8f53b153\")\n    多屏分割II           = AnimationMeta(\"多屏分割II\", True, 1.830, \"7434055685572137499\", \"89192705\", \"8772c91f6a723135cee240f40e7c866c\")\n    多维空间             = AnimationMeta(\"多维空间\", True, 1.380, \"7449596462645645850\", \"97260799\", \"905ade2435f618aa8a43a8a63093ac89\")\n    展开                 = AnimationMeta(\"展开\", True, 0.500, \"7221413342257091133\", \"12088589\", \"553acdb325d76533d6ecbd6d621d9b9e\")\n    幸运圣诞树           = AnimationMeta(\"幸运圣诞树\", True, 2.000, \"7447044441371578906\", \"96136128\", \"8f367e116b1b08096d810239e5901626\")\n    开辟2025             = AnimationMeta(\"开辟2025\", True, 2.000, \"7461839463879021083\", \"101958682\", \"cc2e0b3ccac6d3c77b4bd6f4004a2f78\")\n    弹力分割             = AnimationMeta(\"弹力分割\", True, 1.060, \"7267827357627454013\", \"35994464\", \"9f5878effce0a857900a4f050ea52318\")\n    弹近                 = AnimationMeta(\"弹近\", True, 1.500, \"7314144465944318502\", \"35289246\", \"30c62d3ccb969173e5fa43511894116b\")\n    录像带分屏           = AnimationMeta(\"录像带分屏\", True, 2.000, \"7436273288600359474\", \"90036561\", \"6408ea1b75c87ae2e38b2aed16669434\")\n    心形放大             = AnimationMeta(\"心形放大\", True, 1.500, \"7042968847070007844\", \"1487080\", \"3bb1bb084e5ebf25e67fc078d3c6a119\")\n    快速翻页             = AnimationMeta(\"快速翻页\", True, 0.167, \"7296381392340914715\", \"27878991\", \"6e1d71ff694a87526f9c5bb2c01c927d\")\n    手写云朵             = AnimationMeta(\"手写云朵\", True, 1.530, \"7468589903001948681\", \"104144357\", \"7a0c9770e836caeb1c815acbb4e5f3f5\")\n    手机倒数             = AnimationMeta(\"手机倒数\", True, 6.920, \"7448898555617497610\", \"97032631\", \"276125acc604618051e1bd314beb51d3\")\n    扫描                 = AnimationMeta(\"扫描\", True, 0.600, \"7312335732721324554\", \"34385508\", \"191401f0b79c28d7569dfc356ba827b6\")\n    抖动变焦             = AnimationMeta(\"抖动变焦\", True, 0.800, \"7156911481563386381\", \"5414507\", \"04365018fdc27b7e1175b709a739f800\")\n    抖动横移             = AnimationMeta(\"抖动横移\", True, 0.567, \"7265946978792510010\", \"20437845\", \"e4951e1d7abcdbd4e8bf1cf33430def7\")\n    报纸拼贴             = AnimationMeta(\"报纸拼贴\", True, 1.500, \"7449589619034690074\", \"97255882\", \"2f6b5f1c14c895aa722a73de7a5b8a46\")\n    报纸拼贴Ⅱ            = AnimationMeta(\"报纸拼贴Ⅱ\", True, 1.500, \"7449589619038884390\", \"97255883\", \"f02f54523dc3088f4d86b2360009b795\")\n    拉丝滑入             = AnimationMeta(\"拉丝滑入\", True, 0.500, \"7112725640901562887\", \"3179668\", \"913b99e9012d50f629c59a31e030b143\")\n    拼图                 = AnimationMeta(\"拼图\", True, 1.067, \"7369889381357720102\", \"64963350\", \"4b721a1559eb3451d6cc358468537c49\")\n    探灯聚焦             = AnimationMeta(\"探灯聚焦\", True, 2.000, \"7435897594074649114\", \"89895075\", \"7ec962a4e0a18e6058b890ff3cfa5f4f\")\n    斜向拉丝             = AnimationMeta(\"斜向拉丝\", True, 0.667, \"7360531434487943743\", \"58777551\", \"60ba474a0460cb7e999830c02943e977\")\n    旋转圆球             = AnimationMeta(\"旋转圆球\", True, 0.800, \"7380298290140549647\", \"70989966\", \"19b93b0edea19a73d2cf7f818ace3265\")\n    时间倒计时           = AnimationMeta(\"时间倒计时\", True, 2.000, \"7448898555617481242\", \"97032629\", \"68b1e9bfc8e536dbe58411bb5ceee60b\")\n    晃动抽帧             = AnimationMeta(\"晃动抽帧\", True, 2.960, \"7435897594070438438\", \"89895076\", \"2e2a13b5a090fc91017dd5152d04a682\")\n    曝光放射             = AnimationMeta(\"曝光放射\", True, 0.800, \"7158737452939612703\", \"5529363\", \"09df65728356189436974e08c42bc578\")\n    果冻_I               = AnimationMeta(\"果冻 I\", True, 0.800, \"7171640017574433294\", \"6725401\", \"4ef7f9da6b1331109620381229d55429\")\n    果冻_II              = AnimationMeta(\"果冻 II\", True, 0.800, \"7171690870788329992\", \"6732061\", \"01d346b0f37b87c25c17a53309189432\")\n    枫叶遮罩             = AnimationMeta(\"枫叶遮罩\", True, 2.300, \"7436273288612942363\", \"90036564\", \"877f92396eab2601eaca2fb422dd8d78\")\n    模糊聚焦             = AnimationMeta(\"模糊聚焦\", True, 1.200, \"7337937899704291866\", \"46838778\", \"38841ccaef6186af6d516eeea116b3c6\")\n    横向模糊             = AnimationMeta(\"横向模糊\", True, 0.500, \"7301896031673782835\", \"29805902\", \"b8b953ad94b16c47601af887d4ccc8c9\")\n    水墨                 = AnimationMeta(\"水墨\", True, 2.433, \"7321672946466951731\", \"39180627\", \"9c74b6af409178e996b8e0ed792568bf\")\n    水滴遮罩             = AnimationMeta(\"水滴遮罩\", True, 1.960, \"7441475431309513267\", \"93637608\", \"710525364edbf1465373b6e14c83baba\")\n    油画描边变色         = AnimationMeta(\"油画描边变色\", True, 2.000, \"7439276108022813193\", \"92053880\", \"6284442b7ed8abd5d8e8f6614f97b37e\")\n    波纹弹动             = AnimationMeta(\"波纹弹动\", True, 1.200, \"7345731405663441460\", \"50640360\", \"b29c4c4dbac023b27bac5d32e642f6bb\")\n    流金                 = AnimationMeta(\"流金\", True, 1.500, \"7322367212142989850\", \"39438403\", \"6654a74eb923c201fe18765f18d4b367\")\n    游蛇开幕             = AnimationMeta(\"游蛇开幕\", True, 2.000, \"7461845576447955506\", \"101962292\", \"22c162cc37bdf21a5a15421950b68ce4\")\n    滑片滑动             = AnimationMeta(\"滑片滑动\", True, 1.400, \"7447351620641247781\", \"96240861\", \"c0dfe6ccb8f4c5e08a4607fdd10f18db\")\n    灼烧出现             = AnimationMeta(\"灼烧出现\", True, 2.880, \"7447044441388356106\", \"96136130\", \"37f3e9ceaabb3b3a50a353d223149ba3\")\n    点开                 = AnimationMeta(\"点开\", True, 1.300, \"7436667461837001267\", \"90252347\", \"d96f9c34b6cb885e6e15bb7ddeceac96\")\n    烟雾弹               = AnimationMeta(\"烟雾弹\", True, 1.200, \"7226641244938572346\", \"12815013\", \"8c5e4642b824c252b5a556bbbcbae767\")\n    照片回忆             = AnimationMeta(\"照片回忆\", True, 2.000, \"7436273289170784806\", \"90036563\", \"991dbb7aaa14639551cdca16c0883ad7\")\n    爱心碰撞             = AnimationMeta(\"爱心碰撞\", True, 2.667, \"7327872475453198848\", \"41910725\", \"119e873890708ee4817c9778dcb20b69\")\n    玫瑰                 = AnimationMeta(\"玫瑰\", True, 1.533, \"7397370569856913947\", \"77061084\", \"c3988af5cd8a2ac4e70974fa84cf732a\")\n    玻璃聚集             = AnimationMeta(\"玻璃聚集\", True, 1.700, \"7340265236101861915\", \"48072242\", \"68c8e8f1eba4f4b2e3d35472f8b4822c\")\n    画出爱心             = AnimationMeta(\"画出爱心\", True, 1.600, \"7248901535894082105\", \"16211481\", \"6e5cdc1e7ece582da904ac520440e88a\")\n    画面擦除             = AnimationMeta(\"画面擦除\", True, 2.000, \"7448898555617481226\", \"97032630\", \"a37e8b30f8debf2be5c931369dee8408\")\n    砸出波纹             = AnimationMeta(\"砸出波纹\", True, 1.560, \"7255594501694034490\", \"18159482\", \"644483b024fc852955dd807da067d8e9\")\n    神奇弹窗             = AnimationMeta(\"神奇弹窗\", True, 0.500, \"7467842885740663306\", \"103860744\", \"b2a515917204b3170e9f62a744b5cabd\")\n    空间扭曲             = AnimationMeta(\"空间扭曲\", True, 1.160, \"7298688232294715931\", \"28693486\", \"da3a08519a9315e3625173b71a4d8ee3\")\n    立体交叉             = AnimationMeta(\"立体交叉\", True, 0.670, \"7434746460190544435\", \"89406816\", \"37139f633f7571596e353fc87aa05e48\")\n    立体翻转             = AnimationMeta(\"立体翻转\", True, 1.100, \"7346505124820292150\", \"51089258\", \"bad88fa72b42b3c12099c31654575952\")\n    立方分体             = AnimationMeta(\"立方分体\", True, 1.800, \"7402167652220670514\", \"78751449\", \"d0b7a46baedbeea7461f75308b2f45e4\")\n    竖向拼接             = AnimationMeta(\"竖向拼接\", True, 2.460, \"7434412782302269962\", \"89308509\", \"d52a15d1d7d21a8b3e74496e048d708b\")\n    粒子爱心             = AnimationMeta(\"粒子爱心\", True, 3.000, \"7468589731727544882\", \"104144327\", \"567e5354ca37d56d1bceb25db0b31961\")\n    翻书                 = AnimationMeta(\"翻书\", True, 1.600, \"7452662871550333477\", \"98557334\", \"18d7c2ae3935e215ab347f57412511ba\")\n    翻卡                 = AnimationMeta(\"翻卡\", True, 1.000, \"7431502518753956403\", \"88299576\", \"3a81e284b4864161bf8a0dd1ecbc2d02\")\n    老电视               = AnimationMeta(\"老电视\", True, 1.400, \"7290754106417746491\", \"26091602\", \"4cbe6bdc6da704e481a40f44266cee0b\")\n    聚合                 = AnimationMeta(\"聚合\", True, 2.000, \"7303524763589153306\", \"30391788\", \"c3293067129322c884d0865b99cb11bd\")\n    能量立方             = AnimationMeta(\"能量立方\", True, 1.333, \"7359472053998588425\", \"58285135\", \"301b4ffff8510c87b7174161b2642ca3\")\n    脉冲                 = AnimationMeta(\"脉冲\", True, 0.900, \"7379909514847326732\", \"70764198\", \"ae7fac0214409e340db6a600e97303da\")\n    色散波纹             = AnimationMeta(\"色散波纹\", True, 0.830, \"7299029942870741542\", \"28824874\", \"2ce459ce040280d7c4f36ab78a3612e5\")\n    荧光爆闪             = AnimationMeta(\"荧光爆闪\", True, 1.000, \"7347948517471556096\", \"51992419\", \"84d6cfae125a71855b500604748f1e19\")\n    负片闪屏             = AnimationMeta(\"负片闪屏\", True, 1.500, \"7434055685576331785\", \"89192704\", \"4539b2ba073f714f67c5d55846969b3d\")\n    转圈圈               = AnimationMeta(\"转圈圈\", True, 0.800, \"7246643852411408952\", \"15726741\", \"f2c920e366c3c733f1d86a8473aff310\")\n    迷幻流光             = AnimationMeta(\"迷幻流光\", True, 1.800, \"7395178910083715638\", \"76511457\", \"07fc56d6ae64a5569a4d29241ae4ed4e\")\n    金沙                 = AnimationMeta(\"金沙\", True, 2.000, \"7441139821747114523\", \"93472473\", \"e0a60138ee45dbbaffe99037bea1f649\")\n    钱币遮罩             = AnimationMeta(\"钱币遮罩\", True, 2.000, \"7461942207482696242\", \"102049088\", \"cb8e64195318a300777e13b2c0222733\")\n    镜面组成             = AnimationMeta(\"镜面组成\", True, 1.500, \"7350282290984915491\", \"53224111\", \"b7bc1db5951ce591ae1597930163300e\")\n    闪屏                 = AnimationMeta(\"闪屏\", True, 1.200, \"7242155802209817147\", \"14904085\", \"c2f368ce853ab863a12c686bb99bb41e\")\n    闪现                 = AnimationMeta(\"闪现\", True, 0.440, \"7210363235906622012\", \"10668047\", \"6a680c49cd11a05f3eb0e5a3fed165f7\")\n    闪电分屏             = AnimationMeta(\"闪电分屏\", True, 2.000, \"7437386424032170505\", \"90546139\", \"1c963b5daf0a51d593daa20f721bf00e\")\n    雪花遮罩             = AnimationMeta(\"雪花遮罩\", True, 1.750, \"7442590758760092198\", \"94174749\", \"7e3d713bc1cbca8485fafe45e991926f\")\n    震动波纹             = AnimationMeta(\"震动波纹\", True, 1.500, \"7307196313148330547\", \"31806105\", \"95760b6f7efe0016546e38852a981f49\")\n    震撼倒数             = AnimationMeta(\"震撼倒数\", True, 3.000, \"7446622476928291365\", \"95912088\", \"1de39133273edb6e9d4fe9d09fa1a614\")\n    震波                 = AnimationMeta(\"震波\", True, 0.800, \"7115301367786246692\", \"3297068\", \"8aaccb8f112aa3cacd80fa79fcc1690f\")\n    震波_II              = AnimationMeta(\"震波 II\", True, 0.833, \"7211042099737662009\", \"10744265\", \"f8f236cd1279af3680bcc71dda889d97\")\n    震波_III             = AnimationMeta(\"震波 III\", True, 1.700, \"7288985830578721336\", \"25545977\", \"3be0a1f04cf38bf05ed301ebaeb47ef8\")\n    鞭炮遮罩             = AnimationMeta(\"鞭炮遮罩\", True, 2.000, \"7461915994215158299\", \"102019912\", \"f6f0ab25c8fcfedaaf9eef2810f904ed\")\n    音量大小             = AnimationMeta(\"音量大小\", True, 2.000, \"7462226433700532745\", \"102188589\", \"b14936183e0d2fe5f93bd9dd69c35d7f\")\n    飞近                 = AnimationMeta(\"飞近\", True, 1.600, \"7394717122653327910\", \"76385331\", \"494edea80cf2f3df65f35b1ea01bdd11\")\n    马赛克               = AnimationMeta(\"马赛克\", True, 1.000, \"7282703408383922745\", \"23885083\", \"273c4952c915c9250f0b9edadac34148\")\n    魔方_III             = AnimationMeta(\"魔方 III\", True, 1.100, \"7432135739745243686\", \"88465764\", \"180602469260e0c4d602d42b07077dd7\")\n    魔法粒子I            = AnimationMeta(\"魔法粒子I\", True, 3.000, \"7446622476928291379\", \"95912089\", \"5acc75119eb941cf0645b69d2d0fdc7e\")\n    魔法粒子II           = AnimationMeta(\"魔法粒子II\", True, 3.000, \"7446673584296038949\", \"95966017\", \"6daa910b7beacaa1fe83f0fe20a793f1\")\n    黑白画中画           = AnimationMeta(\"黑白画中画\", True, 2.000, \"7436273288608764442\", \"90036559\", \"3b710c8ca2702e2a42144d12ff5bd05e\")\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/video_outro.py",
    "content": "\"\"\"视频片段出场动画元数据\"\"\"\n\nfrom .effect_meta import EffectEnum, AnimationMeta\n\nclass OutroType(EffectEnum):\n    \"\"\"视频/图片出场动画类型\"\"\"\n\n    # 免费特效\n    Kira游动             = AnimationMeta(\"Kira游动\", False, 2.267, \"7312343337199997450\", \"34389264\", \"2cefeb684db271dc288ec225f0854264\")\n    冰雪融化             = AnimationMeta(\"冰雪融化\", False, 2.830, \"7447044440864068122\", \"96136047\", \"c3806ca50307f798df80d69543b14233\")\n    向上滑动             = AnimationMeta(\"向上滑动\", False, 0.500, \"6798333612958683656\", \"624737\", \"43ef6ea305ccdd352da4b99ad32e38db\")\n    向上转出             = AnimationMeta(\"向上转出\", False, 0.500, \"6818747115934585357\", \"701963\", \"1df50f9f9efc23d2851835537221b787\")\n    向上转出_II          = AnimationMeta(\"向上转出 II\", False, 0.500, \"6818747169017696781\", \"701965\", \"c79f370e70e40c577391e4a59da76c70\")\n    向下滑动             = AnimationMeta(\"向下滑动\", False, 0.500, \"6798333787986989576\", \"624733\", \"d39ba8884ffc4004118c2fa801d6ea97\")\n    向右滑动             = AnimationMeta(\"向右滑动\", False, 0.500, \"6798333350487527950\", \"624741\", \"b768f38810fc11df947c6196a6d882ec\")\n    向左滑动             = AnimationMeta(\"向左滑动\", False, 0.500, \"6798332972098392584\", \"624745\", \"2d14982cf9f87f4eda4e5443df0b4b9e\")\n    折叠闭幕             = AnimationMeta(\"折叠闭幕\", False, 1.500, \"7239273967310082621\", \"14506017\", \"340da8c2704438c157adff1a55f3df0f\")\n    放大                 = AnimationMeta(\"放大\", False, 0.500, \"6798332801864176142\", \"624749\", \"01497dc221d288e623a10cac94a5ceca\")\n    斜切                 = AnimationMeta(\"斜切\", False, 0.700, \"7210659943051956797\", \"10697199\", \"93fd7d9c4f059c26cd3681dd512c20ed\")\n    旋转                 = AnimationMeta(\"旋转\", False, 0.500, \"6798334141323547143\", \"624729\", \"ae8bdfafbae781ad29bc60b438ff461c\")\n    旋转闭幕             = AnimationMeta(\"旋转闭幕\", False, 1.000, \"6942482728335970823\", \"1221132\", \"b235b8a2a8647a211494856315cde2a9\")\n    渐隐                 = AnimationMeta(\"渐隐\", False, 0.500, \"6798320902548230669\", \"624707\", \"07d916d9179660641ae0f427315c5591\")\n    漩涡旋转             = AnimationMeta(\"漩涡旋转\", False, 0.500, \"6778418947361346061\", \"634701\", \"1af131118c1c8f0f97898aeebcb4c38e\")\n    灼烧出现             = AnimationMeta(\"灼烧出现\", False, 2.960, \"7447044440859873801\", \"96136048\", \"cfae1a683f11299f0c1d133d436b2746\")\n    缩小                 = AnimationMeta(\"缩小\", False, 0.500, \"6798332648814023181\", \"624753\", \"2ef923500a3c5501236774f26ea6855c\")\n    翻出                 = AnimationMeta(\"翻出\", False, 1.170, \"7452359860659687986\", \"98425486\", \"a8e91c830363162a11e80acb6665e426\")\n    跳转闭幕             = AnimationMeta(\"跳转闭幕\", False, 0.733, \"7280420767378969143\", \"23302677\", \"82992a12a8ae1227579be0f66d87d75f\")\n    轻微放大             = AnimationMeta(\"轻微放大\", False, 0.500, \"6800268611807089166\", \"629083\", \"fb575b5c3655a74e8cccb6bdf5d54230\")\n    镜像翻转             = AnimationMeta(\"镜像翻转\", False, 0.500, \"6738353628215513613\", \"645999\", \"a24594428fdd0c8078b74659fc1f2679\")\n\n    # 付费特效\n    _2024                = AnimationMeta(\"2024\", True, 1.000, \"7311958876406944266\", \"34158075\", \"93bcb64554588e6f3a0a4ffffa0bb3b5\")\n    _2025                = AnimationMeta(\"2025\", True, 1.000, \"7446306392748593714\", \"95801179\", \"2717769c8ba0483349180e1c46e95baf\")\n    PASSION              = AnimationMeta(\"PASSION\", True, 1.500, \"7432237078710063643\", \"88544141\", \"ed1934d9148fbc73e8edf76c7ddb45cd\")\n    三屏下滑             = AnimationMeta(\"三屏下滑\", True, 1.830, \"7436273288604553766\", \"90036503\", \"11fafef6fa74aabd1c2b99bd29ee4f78\")\n    三屏切闪             = AnimationMeta(\"三屏切闪\", True, 1.040, \"7434412782293881395\", \"89308379\", \"604869cd6d8c9b0a932d2000c906d3c6\")\n    九宫格               = AnimationMeta(\"九宫格\", True, 2.000, \"7434746460190544411\", \"89406874\", \"f832a0fb8b57751e82f0ffcef0fb0317\")\n    交叉震动             = AnimationMeta(\"交叉震动\", True, 0.466, \"7223227564670587452\", \"12330095\", \"3a711c053dcadb7856d19778f72a58c1\")\n    交错闭幕             = AnimationMeta(\"交错闭幕\", True, 1.100, \"7280797214186672701\", \"23387942\", \"1804a8bb6a3eb61c8e5720428d4648e7\")\n    侧滑                 = AnimationMeta(\"侧滑\", True, 0.400, \"7239559574095663671\", \"14524385\", \"1a661b1d0728177d889353174bfb0bf8\")\n    便利贴               = AnimationMeta(\"便利贴\", True, 0.800, \"7379884133268328996\", \"70741835\", \"ce8f5846f77edba5099b042ef7b6958b\")\n    冬季雪花             = AnimationMeta(\"冬季雪花\", True, 2.000, \"7447044440868262410\", \"96136049\", \"fe72ee1d6384b9f5a489a56beb5dacd6\")\n    冰块                 = AnimationMeta(\"冰块\", True, 1.300, \"7413731112406487604\", \"82396222\", \"103cbd9c8058716c95bf41fd65a182a8\")\n    冲撞                 = AnimationMeta(\"冲撞\", True, 0.767, \"7215555273501446716\", \"11325221\", \"16e01aa5454653bc89d3b1d8e86ce3a2\")\n    分屏横移             = AnimationMeta(\"分屏横移\", True, 0.880, \"7257879855063110205\", \"18746674\", \"7382c7210c95548bfc88486be3964284\")\n    分屏组合             = AnimationMeta(\"分屏组合\", True, 2.960, \"7434746460186350117\", \"89406873\", \"eacdb5c2875d937855253ffea04ac13e\")\n    分屏翻转             = AnimationMeta(\"分屏翻转\", True, 0.560, \"7259341241031070268\", \"19063130\", \"392b91fd262e9b95e1dcd18274297393\")\n    分身模糊             = AnimationMeta(\"分身模糊\", True, 1.500, \"7434746460182155827\", \"89406876\", \"3ee97e0d0ed3a62f4b0d3a218e669418\")\n    划水                 = AnimationMeta(\"划水\", True, 0.800, \"7226632692354257445\", \"12811717\", \"f30ab9f83934eafedb4ee01a3d87a995\")\n    区域色块滑动         = AnimationMeta(\"区域色块滑动\", True, 2.000, \"7436273288604553755\", \"90036504\", \"0f266778630aeea62a69ed0dd471fff5\")\n    十字震动             = AnimationMeta(\"十字震动\", True, 0.533, \"7352824282289803814\", \"54685998\", \"969e17d5d65494d0b10b9111d66802d8\")\n    卡片扫光             = AnimationMeta(\"卡片扫光\", True, 1.830, \"7437386424036381211\", \"90546052\", \"e2711c17d261ee1aef022bbb2110be51\")\n    发光矩形             = AnimationMeta(\"发光矩形\", True, 1.133, \"7346510998771077659\", \"51093596\", \"ccac330a683da920a9638b597ce1f869\")\n    变速扩大             = AnimationMeta(\"变速扩大\", True, 1.000, \"7450031573958660617\", \"97484974\", \"430709c96a8a5fb7cc6e7d36f5babf5b\")\n    变速时空             = AnimationMeta(\"变速时空\", True, 1.210, \"7437386424027976230\", \"90546051\", \"9ef1912cc3f221218c32bc41bb61a548\")\n    向上滚动             = AnimationMeta(\"向上滚动\", True, 1.000, \"7312341715220697650\", \"34388502\", \"92d44450f8557fc1d8d93eb6cbe2a832\")\n    向上闪出             = AnimationMeta(\"向上闪出\", True, 0.700, \"7273389599978689079\", \"21816912\", \"4e39075df8d20d1d938c5bf23b2604fb\")\n    向下甩动             = AnimationMeta(\"向下甩动\", True, 1.000, \"7338638617322983976\", \"47191669\", \"178fe900252c316f5301d805a735ce8e\")\n    四屏转换             = AnimationMeta(\"四屏转换\", True, 0.900, \"7341284613165158921\", \"48492502\", \"cf7d3bd0e7973868861d1e466cb238eb\")\n    圆形闭幕             = AnimationMeta(\"圆形闭幕\", True, 0.900, \"7218210114052821561\", \"11680737\", \"0acd6d992db52febb66a63a3cfc6ea00\")\n    多层环形             = AnimationMeta(\"多层环形\", True, 1.633, \"7329445038604161536\", \"42686393\", \"c684bdf866bada10acb647e5339397a3\")\n    多屏分割I            = AnimationMeta(\"多屏分割I\", True, 1.460, \"7434055685572153907\", \"89192583\", \"e1697eeef0685ec658e50900df941cf4\")\n    多屏分割II           = AnimationMeta(\"多屏分割II\", True, 2.040, \"7434055685572137482\", \"89192581\", \"f892339326d234719c3069399b6b3e76\")\n    多维空间             = AnimationMeta(\"多维空间\", True, 1.380, \"7449596462645662235\", \"97260826\", \"90d9f339bfada65f43af655eb0905427\")\n    幕布                 = AnimationMeta(\"幕布\", True, 2.000, \"7448986761297924618\", \"97077809\", \"b393d8f37b6df766bb7df35fca846169\")\n    幸运圣诞树           = AnimationMeta(\"幸运圣诞树\", True, 2.000, \"7447044440868262450\", \"96136050\", \"177e050b5e468a62a4f36e7c7de7811c\")\n    弹力分割             = AnimationMeta(\"弹力分割\", True, 1.060, \"7343902820808004123\", \"49678364\", \"62adcd0cd61c98d0640e657e63b0be8a\")\n    弹远                 = AnimationMeta(\"弹远\", True, 1.200, \"7314925770181186075\", \"35749432\", \"310e6755e6441af5d3405bc80a3be26d\")\n    录像带分屏           = AnimationMeta(\"录像带分屏\", True, 2.000, \"7436273288608748041\", \"90036505\", \"a7bead6f8b55f1cbcbfcffcbd88fb573\")\n    心形缩小             = AnimationMeta(\"心形缩小\", True, 1.000, \"7034346969086562824\", \"1463778\", \"677ec2564241df326a921fa9dc58bd81\")\n    快速翻页             = AnimationMeta(\"快速翻页\", True, 0.200, \"7296416099606729225\", \"27895223\", \"00b26549833daf565f2660d0abcb0462\")\n    手写云朵             = AnimationMeta(\"手写云朵\", True, 1.530, \"7468589970832232997\", \"104144380\", \"e975928331a96536e27764fbc53f6315\")\n    扫描                 = AnimationMeta(\"扫描\", True, 0.633, \"7316816362305753609\", \"36871694\", \"a89a479b5228737e62ccd7e77059315f\")\n    抖动变焦             = AnimationMeta(\"抖动变焦\", True, 0.500, \"7153942002696983047\", \"5188733\", \"6e14698c240bfa454836d26eaa44d3bc\")\n    抖动横移             = AnimationMeta(\"抖动横移\", True, 0.400, \"7265946879060349477\", \"20437843\", \"bcebbe81fc2243a3685ab8e550e3415f\")\n    折叠                 = AnimationMeta(\"折叠\", True, 0.300, \"7221420528148419133\", \"12091673\", \"7968ce8b7391c3725f2b7667d0e0f80a\")\n    报纸拼贴             = AnimationMeta(\"报纸拼贴\", True, 1.500, \"7449589619038884389\", \"97255862\", \"248c4117dda85e37e36b9174c7f7ec42\")\n    报纸拼贴Ⅱ            = AnimationMeta(\"报纸拼贴Ⅱ\", True, 1.500, \"7449589619038884378\", \"97255861\", \"1d139e5602c9b848ae55d3132739c0e5\")\n    拉丝滑出             = AnimationMeta(\"拉丝滑出\", True, 0.500, \"7114172789287817758\", \"3240292\", \"e3018d5ee625a58fdeaa5ccd75d0e2e2\")\n    拼图                 = AnimationMeta(\"拼图\", True, 1.100, \"7369889275233440265\", \"64963293\", \"9e1b296804c2f10ce26fcf727d1dd9af\")\n    探灯聚焦             = AnimationMeta(\"探灯聚焦\", True, 2.000, \"7435897594074632730\", \"89895171\", \"3bd76848821228cc1c1a35e4da0f9ea8\")\n    斜向拉丝             = AnimationMeta(\"斜向拉丝\", True, 0.500, \"7360531353458184715\", \"58777523\", \"71a267bc37d3dc0afa3aaae12ec995e7\")\n    旋转圆球             = AnimationMeta(\"旋转圆球\", True, 0.800, \"7381753028732260916\", \"71750513\", \"e824e3d74a50eba64dd87ac11b9bbfb8\")\n    晃动抽帧             = AnimationMeta(\"晃动抽帧\", True, 2.960, \"7435897594078827035\", \"89895170\", \"91c1553757cd96ea14e8cb88fc5d40be\")\n    曝光放射             = AnimationMeta(\"曝光放射\", True, 0.500, \"7158753896624558628\", \"5529791\", \"70911371ae8ec475600c4e30c9db8994\")\n    枫叶遮罩             = AnimationMeta(\"枫叶遮罩\", True, 2.300, \"7436273288608748058\", \"90036506\", \"b4061ff63d82958d6d828f54682b9527\")\n    模糊聚焦             = AnimationMeta(\"模糊聚焦\", True, 0.833, \"7338742568592609801\", \"47267179\", \"2cf9380884a5e9853ecdbb4869b01b0e\")\n    横向模糊             = AnimationMeta(\"横向模糊\", True, 0.500, \"7301943351320777267\", \"29824130\", \"294f0f8ecbe4b4a8b8f2c01f579739f1\")\n    水墨                 = AnimationMeta(\"水墨\", True, 2.033, \"7322073757080621606\", \"39326538\", \"533ce039619091d6b9886c2c78ac4aa2\")\n    水滴遮罩             = AnimationMeta(\"水滴遮罩\", True, 1.960, \"7441475431309513254\", \"93637552\", \"06ee7696792a5aa607cecc0d14e7dd91\")\n    油画描边变色         = AnimationMeta(\"油画描边变色\", True, 2.000, \"7439276108022813235\", \"92053923\", \"eb20d401959db40399b8fa89b27e7f38\")\n    波纹弹动             = AnimationMeta(\"波纹弹动\", True, 1.200, \"7345803511390540288\", \"50691424\", \"660ff84eabd735769a72978914e8e82d\")\n    流金                 = AnimationMeta(\"流金\", True, 1.133, \"7322857522648322586\", \"39682247\", \"646fc008978735fbf5b5d3cde382fc22\")\n    滑片滑动             = AnimationMeta(\"滑片滑动\", True, 1.200, \"7447351620637037106\", \"96240814\", \"0e879f2bb18535b827df1e78eca89f90\")\n    烟雾弹               = AnimationMeta(\"烟雾弹\", True, 0.900, \"7229149181762343484\", \"13090999\", \"e70e26e7aa770d0deedca54e3eac0323\")\n    照片回忆             = AnimationMeta(\"照片回忆\", True, 2.000, \"7436273288612942386\", \"90036502\", \"b78111677093071510de457f1a8f2019\")\n    爱心碰撞             = AnimationMeta(\"爱心碰撞\", True, 2.300, \"7328249133079204352\", \"42112174\", \"1cf69aac7b9478f5628413aada8c0707\")\n    玫瑰                 = AnimationMeta(\"玫瑰\", True, 1.400, \"7397378784028004891\", \"77061996\", \"e19beddf933ed59e1f1d85c8273d9cb1\")\n    玻璃爆开             = AnimationMeta(\"玻璃爆开\", True, 0.733, \"7347865496508699170\", \"51922869\", \"620f6fe34184e1f3cc2284d830c3d1e8\")\n    画出爱心             = AnimationMeta(\"画出爱心\", True, 1.100, \"7248951676420231735\", \"16231427\", \"ad5c127255cc8f2c941f7406f8a36f19\")\n    画面擦除             = AnimationMeta(\"画面擦除\", True, 2.000, \"7448898555617497626\", \"97032678\", \"0ac1cfe94bb7f54b8a38dc0de67b05ca\")\n    砸出波纹             = AnimationMeta(\"砸出波纹\", True, 1.366, \"7255599483226952249\", \"18161234\", \"87e9baa63de40d76f862bb8aa4349de3\")\n    空间扭曲             = AnimationMeta(\"空间扭曲\", True, 0.930, \"7298918355841323529\", \"28775864\", \"04c885b1dbbcf51bcc01e4df931bff72\")\n    立体交叉             = AnimationMeta(\"立体交叉\", True, 0.670, \"7434746460190544394\", \"89406875\", \"75e703c9c10c62dfab467c17f0439261\")\n    立体翻转             = AnimationMeta(\"立体翻转\", True, 1.100, \"7351333213068857892\", \"53792520\", \"82f13f68eb475cfaabaf2a674b50ac8a\")\n    立方合体             = AnimationMeta(\"立方合体\", True, 1.600, \"7405509410396574242\", \"79925188\", \"75c1649483edeac1c8defd88b45839cf\")\n    竖向拼接             = AnimationMeta(\"竖向拼接\", True, 2.460, \"7434412782285492773\", \"89308380\", \"3536cc7c83df33546ece9319b2fcd3ec\")\n    粒子爱心             = AnimationMeta(\"粒子爱心\", True, 3.000, \"7468589804356112946\", \"104144349\", \"1410ac0223ef9473376a151bcabacdfa\")\n    翻卡                 = AnimationMeta(\"翻卡\", True, 1.000, \"7431509039437058586\", \"88301520\", \"bd316e6651f053f591dee39cc1460662\")\n    老电视               = AnimationMeta(\"老电视\", True, 1.600, \"7283429462924857914\", \"24079477\", \"50d67778f791d56b12ab5c6da30c37b6\")\n    能量立方             = AnimationMeta(\"能量立方\", True, 1.133, \"7361364150229930506\", \"59265410\", \"f6c5b98ea69f3b2c3265bb3249973250\")\n    脉冲                 = AnimationMeta(\"脉冲\", True, 0.800, \"7379909625870553654\", \"70764127\", \"f916cc354e9c5b80698d612397a0c4f7\")\n    色散波纹             = AnimationMeta(\"色散波纹\", True, 0.767, \"7305961286762762790\", \"31248281\", \"5477505f844e9bad12dc9074631564b1\")\n    荧光爆闪             = AnimationMeta(\"荧光爆闪\", True, 0.800, \"7347994415576650255\", \"52020801\", \"6558ab016ce06546d3c380b43480baab\")\n    负片闪屏             = AnimationMeta(\"负片闪屏\", True, 1.500, \"7434055685567943194\", \"89192582\", \"15fe80d4264c5a689efd712535ce51c7\")\n    转圈圈               = AnimationMeta(\"转圈圈\", True, 0.800, \"7246706359381529125\", \"15754757\", \"c03fc00075c5b7e53f8bdc0c6f5c360f\")\n    迷幻流光             = AnimationMeta(\"迷幻流光\", True, 1.500, \"7395482925006852647\", \"76594275\", \"4095d8d554571c3356eefa787c7cdfe9\")\n    金沙                 = AnimationMeta(\"金沙\", True, 2.000, \"7441139691694330378\", \"93472419\", \"8eb1d7a9fbcbc2c8df45affa0c13e8a9\")\n    钱币遮罩             = AnimationMeta(\"钱币遮罩\", True, 2.000, \"7461942340328886835\", \"102049160\", \"65b2eab128ce90c90193c62c29013f22\")\n    镜面拆分             = AnimationMeta(\"镜面拆分\", True, 1.500, \"7405495700961628683\", \"79917713\", \"5e549cebedbc7a9453bfc24490b94e67\")\n    闪屏                 = AnimationMeta(\"闪屏\", True, 0.833, \"7243999104114627132\", \"15215961\", \"e4ef6b01ae37409046d089c73cd16702\")\n    闪现                 = AnimationMeta(\"闪现\", True, 0.250, \"7186978468087730749\", \"8303609\", \"f170e9020eaf5a6f6180c6fd30775400\")\n    闪电分屏             = AnimationMeta(\"闪电分屏\", True, 2.000, \"7437386424032170506\", \"90546050\", \"e9950ce2750bab69fe23a91b4e803473\")\n    雪花遮罩             = AnimationMeta(\"雪花遮罩\", True, 1.750, \"7442590863349256754\", \"94174789\", \"11b7e97fceba9cf1d7babfe764d1bdcb\")\n    震动波纹             = AnimationMeta(\"震动波纹\", True, 1.500, \"7307196476340310554\", \"31806349\", \"cdb162bc674e495b24d38a2cf4bd04b6\")\n    震波_III             = AnimationMeta(\"震波 III\", True, 0.733, \"7289005562124046907\", \"25555607\", \"70a42c94712b15ff4fbf198be0336400\")\n    鞭炮遮罩             = AnimationMeta(\"鞭炮遮罩\", True, 2.000, \"7461923788343480841\", \"102029466\", \"0e395a1c73b9bb3e83ae101d4df3f850\")\n    音量大小             = AnimationMeta(\"音量大小\", True, 2.000, \"7462226526260433418\", \"102188408\", \"210be278f95cc7cce8fde314de29ab07\")\n    飘散                 = AnimationMeta(\"飘散\", True, 2.000, \"7305957010518839846\", \"31245441\", \"286553fb78795b8044746938e4327d5e\")\n    飞远                 = AnimationMeta(\"飞远\", True, 1.600, \"7394730499492549158\", \"76392667\", \"d897f0f656870ca1469ac30d61e9490a\")\n    马赛克               = AnimationMeta(\"马赛克\", True, 1.000, \"7283415427328250405\", \"24073041\", \"6be9c2fd05f76e3902a9967139706468\")\n    魔法粒子I            = AnimationMeta(\"魔法粒子I\", True, 3.000, \"7446622476928291378\", \"95912176\", \"118e1dc5094d45b278111675f99fe4d7\")\n    魔法粒子II           = AnimationMeta(\"魔法粒子II\", True, 3.000, \"7446673724146717221\", \"95966045\", \"ff56bdebbd3863db982d845635b3c42e\")\n    黑白画中画           = AnimationMeta(\"黑白画中画\", True, 2.000, \"7436273288612942374\", \"90036501\", \"3bdba83de89cf27167d319f5e727647f\")\n"
  },
  {
    "path": "src/pyJianYingDraft/metadata/video_scene_effect.py",
    "content": "\"\"\"视频画面特效元数据\"\"\"\n\nfrom .effect_meta import EffectEnum\nfrom .effect_meta import EffectMeta, EffectParam\n\nclass VideoSceneEffectType(EffectEnum):\n    \"\"\"视频画面特效枚举\"\"\"\n\n    # 免费特效\n    _1998                = EffectMeta(\"1998\", False, \"6981791065204331044\", \"1183068\", \"d53096e8139dd33f7a2be6adcd7ce56b\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    _70s                 = EffectMeta(\"70s\", False, \"6706773500792689165\", \"634717\", \"0fe827460716d30e76cb3f244b9b1010\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    _90s画质             = EffectMeta(\"90s画质\", False, \"6760946510910722564\", \"634889\", \"d2b4c0ed72e66c6ae61e0ebbc7d008bf\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.630, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.580, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.510, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_sharpen: 默认63%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认58%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认51%, 0% ~ 100%\"\"\"\n    CCD闪光              = EffectMeta(\"CCD闪光\", False, \"7130585796020539941\", \"4007303\", \"cf66e86f715060df7a2e9268382697d4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.950, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认65%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认95%, 0% ~ 100%\"\"\"\n    DV录制框             = EffectMeta(\"DV录制框\", False, \"6878115805498708493\", \"934600\", \"4828fe3f6a8bdf99e57febe27006d33b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_sharpen: 默认20%, 0% ~ 100%\"\"\"\n    DV界面               = EffectMeta(\"DV界面\", False, \"6974600764027048462\", \"1164160\", \"ed29f490b4ccb7f00138f400b05459b5\", [])\n    I_Lose_You           = EffectMeta(\"I Lose You\", False, \"6899746903735407117\", \"972753\", \"8486881738dcb661bcd49f490a548d47\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    I_Love_You           = EffectMeta(\"I Love You\", False, \"6899746786294895112\", \"972754\", \"dfa377da1cc1858ae5d5126488c5cb67\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    JVC                  = EffectMeta(\"JVC\", False, \"7102302420310430215\", \"2254788\", \"6060fe9faac1a35dd89c4362c57bd451\", [\n                              EffectParam(\"effects_adjust_color\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.900, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认35%, 0% ~ 100%\n    effects_adjust_filter: 默认90%, 0% ~ 100%\"\"\"\n    List边框             = EffectMeta(\"List边框\", False, \"6981463637676266020\", \"1181892\", \"80a8d14e52a06b47dbb24ddeb7b65f1c\", [])\n    MV封面               = EffectMeta(\"MV封面\", False, \"6925314612204147214\", \"1033288\", \"658b5a2a87b51d71f8f968546790257a\", [\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    New_Year             = EffectMeta(\"New Year\", False, \"7041771617315197453\", \"1483460\", \"b3322fbbf99e1d4c9da1fb0b1e97d1a6\", [\n                              EffectParam(\"effects_adjust_size\", 0.160, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.336, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.339, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认16%, 0% ~ 100%\n    effects_adjust_speed: 默认34%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认34%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    PS边框               = EffectMeta(\"PS边框\", False, \"6860306184595837448\", \"884226\", \"a787cee77871e18ae45ccd09fa7f6ac9\", [])\n    RGB描边              = EffectMeta(\"RGB描边\", False, \"6922698007653650957\", \"1025970\", \"175536eb523aae867ae4b8cb94f09211\", [\n                              EffectParam(\"effects_adjust_speed\", 0.670, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认67%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认100%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    VCR                  = EffectMeta(\"VCR\", False, \"6876012864679711245\", \"931458\", \"6b5dfc171f7c82078c76ffbcb2f6c003\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_sharpen: 默认30%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认60%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    X_Signal             = EffectMeta(\"X-Signal\", False, \"6709706971638927875\", \"634719\", \"218223a1507ca3cac6b93dd8335882a0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    X开幕                = EffectMeta(\"X开幕\", False, \"6974024838000153096\", \"1162978\", \"59be0a7455162145039e48179ef42c20\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    betamax              = EffectMeta(\"betamax\", False, \"7239937281937642041\", \"14578173\", \"6cae0f338637ffcf210bbb45015d9538\", [\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_blur: 默认65%, 0% ~ 100%\n    effects_adjust_sharpen: 默认25%, 0% ~ 100%\n    effects_adjust_distortion: 默认40%, 0% ~ 100%\n    effects_adjust_texture: 默认55%, 0% ~ 100%\n    effects_adjust_size: 默认60%, 0% ~ 100%\"\"\"\n    emoji钻石            = EffectMeta(\"emoji钻石\", False, \"7078694071245476366\", \"1647776\", \"afa5891d090fe132e4cf0a7196895863\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.548, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认55%, 0% ~ 100%\n    effects_adjust_rotate: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    ins界面              = EffectMeta(\"ins界面\", False, \"6761646727142314509\", \"635133\", \"1081a3f864316cb7e8ee977d44a90a70\", [])\n    ins风放大镜          = EffectMeta(\"ins风放大镜\", False, \"6992465511455920676\", \"1380488\", \"afe7daae94e810f06b339c96deafb5f8\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认0%, 0% ~ 100%\"\"\"\n    kirakira             = EffectMeta(\"kirakira\", False, \"6706773500142555656\", \"693883\", \"b41ed4895d84eb917581d0d5d57cc0af\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_number: 默认33%, 0% ~ 100%\"\"\"\n    ktv灯光              = EffectMeta(\"ktv灯光\", False, \"6771299914891661832\", \"634197\", \"0654e68b3db41a82a1abf02e48375e88\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    ktv灯光_II           = EffectMeta(\"ktv灯光 II\", False, \"6934938159763427876\", \"1054906\", \"53248914c97ddf4722860554d68cac9d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    windows弹窗关闭      = EffectMeta(\"windows弹窗关闭\", False, \"6976562270071427598\", \"1169934\", \"f4d45d9888b6d0d78a147417e4851189\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    windows弹窗打开      = EffectMeta(\"windows弹窗打开\", False, \"6976538396290191880\", \"1169728\", \"6989cff6be738ec6a047871320d3bd9f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    丁达尔光线           = EffectMeta(\"丁达尔光线\", False, \"6834008866137575950\", \"768190\", \"858aa00b8938e4f0dde79225ef119f60\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    万圣emoji            = EffectMeta(\"万圣emoji\", False, \"7021363005052948999\", \"1405514\", \"0b226c96ee570ed8c649d97f45879faa\", [\n                              EffectParam(\"effects_adjust_speed\", 0.336, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认34%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    万圣夜               = EffectMeta(\"万圣夜\", False, \"6888280327949652493\", \"951616\", \"ccd9f93a03f5849a5d5cb96729bb5bec\", [\n                              EffectParam(\"effects_adjust_blur\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认25%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    三屏                 = EffectMeta(\"三屏\", False, \"6706773500209664515\", \"635029\", \"a753c93aef7a37f2e86870529f2cd06c\", [])\n    三格漫画             = EffectMeta(\"三格漫画\", False, \"6795825532668744206\", \"635007\", \"5b738f1286b9929b36bc6a540f11ddd5\", [])\n    下雨                 = EffectMeta(\"下雨\", False, \"6734619419890160131\", \"635039\", \"40a59ce61692a825c049cd5b15bc6ded\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    不对劲               = EffectMeta(\"不对劲\", False, \"6940134524642660895\", \"1068128\", \"0be37b64dad56d5f6f89c69165d092fd\", [])\n    不规则黑框           = EffectMeta(\"不规则黑框\", False, \"6865921530488951309\", \"898673\", \"2457889e649132e1a427ccd9c258e51e\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    两屏                 = EffectMeta(\"两屏\", False, \"6706773500796867075\", \"635025\", \"69926ac7983e4e234c1b833e8c50896a\", [])\n    中枪了               = EffectMeta(\"中枪了\", False, \"6950894972291781127\", \"1100950\", \"ee96dc698c6213303442b30b963978ba\", [])\n    乌鸦飞过             = EffectMeta(\"乌鸦飞过\", False, \"6955028776094798366\", \"1113160\", \"a2583447f1ec5767bf063a831b893b9e\", [])\n    九屏                 = EffectMeta(\"九屏\", False, \"6719657094741496333\", \"635011\", \"8abb86f5699f22f9d2c8d1647458b55a\", [])\n    九屏跑马灯           = EffectMeta(\"九屏跑马灯\", False, \"6726773973683540491\", \"635031\", \"0bc85f7544b92909bfef4d20ad17c256\", [])\n    五彩纸屑             = EffectMeta(\"五彩纸屑\", False, \"7055567263029531143\", \"1535868\", \"f0afbedd02a658dec54e2fb588cf8b69\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.801, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认20%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认80%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    五彩缤纷             = EffectMeta(\"五彩缤纷\", False, \"7055594981683106312\", \"1543542\", \"d191e6184008984688f26f4797ec94b7\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.801, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_rotate: 默认80%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    亮片                 = EffectMeta(\"亮片\", False, \"6715209448521994755\", \"634129\", \"b27dcf2220fd8d3ff7216d9364d07b62\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    人鱼滤镜             = EffectMeta(\"人鱼滤镜\", False, \"6766876614862049795\", \"634199\", \"f97bd68cfc43174bcb30406a6fc46952\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认75%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认75%, 0% ~ 100%\n    effects_adjust_range: 默认100%, 0% ~ 100%\"\"\"\n    仙女变身             = EffectMeta(\"仙女变身\", False, \"6746483363567112707\", \"634173\", \"b45f02e327c3c242c54f91655798d9c0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    仙女变身_II          = EffectMeta(\"仙女变身 II\", False, \"6747515070114173447\", \"634171\", \"6963f2dab25279d695f581922ce9f87f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    仙女棒               = EffectMeta(\"仙女棒\", False, \"7314565034586149403\", \"35504704\", \"322d997e0f5a8a9af19acd3c871b98ff\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认20%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    仙尘闪闪             = EffectMeta(\"仙尘闪闪\", False, \"6963476143370408485\", \"1133662\", \"8b9da7f7b3cdd95bd73cc2444433017e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    低像素               = EffectMeta(\"低像素\", False, \"6810945511005098509\", \"703237\", \"07980fba1cb9edb304a39feaa92f009c\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    低像素_II            = EffectMeta(\"低像素 II\", False, \"6811399125544735245\", \"703239\", \"01c40b95e4a5b8f850bad330a1864f6a\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    倒计时_II            = EffectMeta(\"倒计时 II\", False, \"7051887173276013093\", \"1521390\", \"e01f6dadb794566d1ea3364d564f3f59\", [\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    像素画               = EffectMeta(\"像素画\", False, \"7081557169539125791\", \"1663132\", \"0e6597e2bcbc35fe670bd05501ff37ed\", [\n                              EffectParam(\"effects_adjust_color\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.755, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.688, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认80%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认76%, 0% ~ 100%\n    effects_adjust_number: 默认69%, 0% ~ 100%\n    effects_adjust_background_animation: 默认0%, 0% ~ 100%\"\"\"\n    像素纹理             = EffectMeta(\"像素纹理\", False, \"6763903685983474189\", \"634785\", \"d132cd0508064d64e92b946adfa5c8be\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    光斑虚化             = EffectMeta(\"光斑虚化\", False, \"7297154514262430259\", \"28151372\", \"2748cc7e4a94448bddefe35749cce1db\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_range: 默认0%, 0% ~ 100%\"\"\"\n    光斑飘落             = EffectMeta(\"光斑飘落\", False, \"6899747276718084622\", \"972749\", \"5106ce263097acfbe5f8319841bc1e7a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    光晕                 = EffectMeta(\"光晕\", False, \"6714239617916211716\", \"634095\", \"91a3d5329874b35dad2cf9fbf82956af\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    光晕_II              = EffectMeta(\"光晕 II\", False, \"6709701759398318604\", \"634093\", \"24ade7e79a0d72d1fe5792997640e15f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    全剧终               = EffectMeta(\"全剧终\", False, \"6710109932122804750\", \"634079\", \"b756f1d59534d07571ab6fac16d8bfda\", [])\n    六屏                 = EffectMeta(\"六屏\", False, \"6719657243039502851\", \"635013\", \"95d23405c9441a388784c0749ab99471\", [])\n    关月亮               = EffectMeta(\"关月亮\", False, \"6774656266833760780\", \"634277\", \"af6c277f693f08679dc142591bc97c52\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认33%, 0% ~ 100%\"\"\"\n    冰冷实验室           = EffectMeta(\"冰冷实验室\", False, \"7019265849047388680\", \"1398372\", \"0ba96868fd684b80b4cb82f058f35dc9\", [\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.267, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认27%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    冰霜                 = EffectMeta(\"冰霜\", False, \"6896417042090430989\", \"966514\", \"17d279016b1f0961c4e0167f2554b0f5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    冰霜_II              = EffectMeta(\"冰霜 II\", False, \"7047048873897890334\", \"1499080\", \"f278e4a04de56a4fbe693e2014f5da9e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.530, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认53%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    冲击波               = EffectMeta(\"冲击波\", False, \"6967180577875169799\", \"1146394\", \"ad8e0a154e7a3c78dc23407ec23da9b2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    冲刺                 = EffectMeta(\"冲刺\", False, \"6790536507905020430\", \"635003\", \"7efa92b9cc009384af9b207474f52b24\", [])\n    冲刺_II              = EffectMeta(\"冲刺 II\", False, \"6781392637216690700\", \"635001\", \"5781353d9e23652896b0dd8c43a51162\", [])\n    冲刺_III             = EffectMeta(\"冲刺 III\", False, \"6774324121783243271\", \"634981\", \"a2794140abd30a19ba136059f9f89e88\", [])\n    冲屏闪粉             = EffectMeta(\"冲屏闪粉\", False, \"6858138911487562248\", \"875969\", \"98753cc737cac50d460ec6f204cdae5b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    凄凉                 = EffectMeta(\"凄凉\", False, \"6955021464684728846\", \"1113134\", \"0491da81159994e95a68b3087a8709f3\", [])\n    几何图形             = EffectMeta(\"几何图形\", False, \"6871054818241155592\", \"920550\", \"0c558210a312c46568635767a3600a08\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    刀光剑影             = EffectMeta(\"刀光剑影\", False, \"6740539604509659662\", \"634741\", \"8017d7de152a4083d0607b903d716943\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    分屏开幕             = EffectMeta(\"分屏开幕\", False, \"7232198317671715385\", \"13525811\", \"98ecc4fbd0e619bddad881dc93a94964\", [\n                              EffectParam(\"effects_adjust_speed\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认70%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认40%, 0% ~ 100%\"\"\"\n    初雪_I               = EffectMeta(\"初雪 I\", False, \"7173558688605540901\", \"6940749\", \"8bbb39ead793c59a4baec469890be670\", [\n                              EffectParam(\"effects_adjust_speed\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认75%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认60%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    剪纸边框             = EffectMeta(\"剪纸边框\", False, \"6926456664228893191\", \"1038710\", \"c6596eaf8591e6a1298731ead45d6861\", [])\n    加载甜蜜             = EffectMeta(\"加载甜蜜\", False, \"6924873263994638856\", \"1031291\", \"224dafbed2fc8e3711e1cecacf68a95c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    动感模糊             = EffectMeta(\"动感模糊\", False, \"7009120603055591943\", \"1368758\", \"167deb8c5b35d5a3097cb107693c62c3\", [\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.850, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_horizontal_shift: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认85%, 0% ~ 100%\"\"\"\n    动感色卡             = EffectMeta(\"动感色卡\", False, \"7052644171240182280\", \"1524680\", \"8ad3539910485cadfc27eb3f8853317e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认40%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    动感荧光             = EffectMeta(\"动感荧光\", False, \"6755761739242934798\", \"635125\", \"d9f1ac0e1677dcd4475235ea113f03fa\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    动感蓝带             = EffectMeta(\"动感蓝带\", False, \"6970598283378954765\", \"1155430\", \"28edc10c2a172ca68f6be21037700538\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    单色涂鸦             = EffectMeta(\"单色涂鸦\", False, \"7265798651019006521\", \"20412423\", \"8a63108339eeb62c0a26122e2f22a850\", [\n                              EffectParam(\"effects_adjust_color\", 0.300, 0.050, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.570, 0.000, 0.810),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认30%, 5% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_number: 默认57%, 0% ~ 81%\n    effects_adjust_horizontal_shift: 默认70%, 0% ~ 100%\n    effects_adjust_background_animation: 默认70%, 0% ~ 100%\n    effects_adjust_size: 默认10%, 0% ~ 100%\n    effects_adjust_speed: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认0%, 0% ~ 100%\"\"\"\n    南瓜光斑             = EffectMeta(\"南瓜光斑\", False, \"6992844454453318157\", \"1403930\", \"3626a4cba39f68ed0bbf43b58c023e07\", [\n                              EffectParam(\"effects_adjust_speed\", 0.336, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认34%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    南瓜笑脸             = EffectMeta(\"南瓜笑脸\", False, \"6888208083202347534\", \"951196\", \"e28abcdb93864f4d4c1d340e9ce567a5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    卷动                 = EffectMeta(\"卷动\", False, \"6719657168292811278\", \"634735\", \"613ab501b1260fee424d266c6a214b5e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    原相机               = EffectMeta(\"原相机\", False, \"6753416178909057549\", \"635137\", \"bc6e1e30a3e6efd3ad60939a09e66323\", [])\n    友友商店             = EffectMeta(\"友友商店\", False, \"6977709836993565220\", \"1173234\", \"6fd942a59a1b4010a23b19f74a8fb08a\", [])\n    反转片_I             = EffectMeta(\"反转片 I\", False, \"7153084450593575454\", \"5114825\", \"442b39ec01b7ddefd1a2dfe1ce66d00e\", [\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认0%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    发光                 = EffectMeta(\"发光\", False, \"6961701455262650916\", \"1126104\", \"43648253eed7fb8ea727d167d28cd768\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认40%, 0% ~ 100%\"\"\"\n    取景框               = EffectMeta(\"取景框\", False, \"6712739398984667651\", \"635089\", \"1915e124716f1967476f78970f6e90b9\", [\n                              EffectParam(\"effects_adjust_noise\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_noise: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    取景框_II            = EffectMeta(\"取景框 II\", False, \"6871187132195541517\", \"920935\", \"a8af25fab9ceb2a477fb007d3dfc72b1\", [])\n    变形了               = EffectMeta(\"变形了\", False, \"6940134629282157064\", \"1068127\", \"45a40940622ed9173d57e23ff1b3ddee\", [])\n    变彩色               = EffectMeta(\"变彩色\", False, \"6720492336788279815\", \"634053\", \"0178a55e4f8c7deec8786d78d875d45e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    变清晰               = EffectMeta(\"变清晰\", False, \"6719658716750156291\", \"634019\", \"5aac9b2c125c7660728e4bf390a6c8ab\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.250, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认25%, 0% ~ 100%\"\"\"\n    变清晰_II            = EffectMeta(\"变清晰 II\", False, \"6948352810895282724\", \"1146596\", \"da0c95a0f050f7e26e672dfdcbddc226\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    变焦推镜             = EffectMeta(\"变焦推镜\", False, \"7296418835429593651\", \"27896191\", \"1ef600710b33cc1e4d6f858c47e4b98a\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    变秋天               = EffectMeta(\"变秋天\", False, \"7012941093520020004\", \"1381700\", \"c7aaafd076935ba5a0a42e58365a49cf\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    变黑白               = EffectMeta(\"变黑白\", False, \"6730911849706951179\", \"634055\", \"d38bd3379c22f994fc3f0819998962c9\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    告白氛围             = EffectMeta(\"告白氛围\", False, \"6798021156331852295\", \"635005\", \"ed6536056d82bcd5849014db48d9d912\", [])\n    咔嚓                 = EffectMeta(\"咔嚓\", False, \"6752780026900386317\", \"634073\", \"c742af6913646f7c936642aae51d58d2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    哈哈弹幕             = EffectMeta(\"哈哈弹幕\", False, \"6952852858656002590\", \"1106302\", \"777c2c44707c03f6e541c8d954b21f8a\", [])\n    哈苏胶片             = EffectMeta(\"哈苏胶片\", False, \"7078598928056193566\", \"1646830\", \"2eead808b8408e1fa4b74b6ad3c74b8d\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_noise: 默认30%, 0% ~ 100%\"\"\"\n    唱片                 = EffectMeta(\"唱片\", False, \"6978764021637845541\", \"1174596\", \"d4fef5476754cbe563d5004097369290\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    唱片封面             = EffectMeta(\"唱片封面\", False, \"6987741974455390734\", \"1196734\", \"11ca22f7daac786267a46f99dad47be3\", [])\n    啊啊啊啊             = EffectMeta(\"啊啊啊啊\", False, \"6951661272827957790\", \"1104164\", \"cec37f504863cc89308c256482286660\", [])\n    噪点                 = EffectMeta(\"噪点\", False, \"6706773498510971404\", \"634061\", \"3e5fc04a3ddff85aadb6b52681f00bcd\", [\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_noise: 默认50%, 0% ~ 100%\"\"\"\n    四屏                 = EffectMeta(\"四屏\", False, \"6706773500490682888\", \"635027\", \"f0074ead79e0a8dd9a10518667beb0f1\", [])\n    回弹摇摆             = EffectMeta(\"回弹摇摆\", False, \"7146090225855369742\", \"4720539\", \"e13659f2365eb5bc295f93342e50139f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认0%, 0% ~ 100%\"\"\"\n    回忆文件夹           = EffectMeta(\"回忆文件夹\", False, \"6998352498062791205\", \"1227934\", \"cf7de583f8e09da1476df20d95fc85f2\", [])\n    回忆胶片             = EffectMeta(\"回忆胶片\", False, \"6987725478912070174\", \"1196624\", \"3f4f6d7ce71f67e1e61b91d366da4e19\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认40%, 0% ~ 100%\"\"\"\n    圆形虚线放大镜       = EffectMeta(\"圆形虚线放大镜\", False, \"7065242222068765198\", \"1569306\", \"44370286a32ad2e26535a6af4842aa0b\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认0%, 0% ~ 100%\"\"\"\n    圣诞光斑             = EffectMeta(\"圣诞光斑\", False, \"6769436675958379021\", \"634209\", \"dd982dabe21c82f51a9815df29f83f09\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    圣诞星光             = EffectMeta(\"圣诞星光\", False, \"6767219683901837832\", \"634207\", \"3e41badb29cc40f017f2ece636d26557\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    地狱使者             = EffectMeta(\"地狱使者\", False, \"7007684840506003999\", \"1406882\", \"2338b8056d16c87a210717ef9bdc28b5\", [\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    基础黑框             = EffectMeta(\"基础黑框\", False, \"6712316216905568772\", \"635127\", \"534a1c475b222dfc97420bbaf85b7540\", [])\n    塑料封面             = EffectMeta(\"塑料封面\", False, \"6814664313496670728\", \"703221\", \"4df02db49968718592fe29998506b8e2\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    塑料封面_II          = EffectMeta(\"塑料封面 II\", False, \"6814664561082241550\", \"703219\", \"204ce6bc753bbc228d489e580c799768\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    塑料封面III          = EffectMeta(\"塑料封面III\", False, \"6815457699505902087\", \"703217\", \"48d99133cab78a4a9b178d8f7fe7be66\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    复古DV               = EffectMeta(\"复古DV\", False, \"6865959646092333576\", \"898868\", \"19e1584168d4d3570a91185b8149ad03\", [\n                              EffectParam(\"effects_adjust_blur\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认20%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_sharpen: 默认50%, 0% ~ 100%\"\"\"\n    复古DV_II            = EffectMeta(\"复古DV II\", False, \"6869650937841979911\", \"909740\", \"6979960d3bda8144b3406dee17e7255a\", [\n                              EffectParam(\"effects_adjust_blur\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认20%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_sharpen: 默认50%, 0% ~ 100%\"\"\"\n    复古DV_III           = EffectMeta(\"复古DV III\", False, \"6986958810619318792\", \"1194896\", \"ff4ee88f3d727ac817750ae84df099cc\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    复古DV_IV            = EffectMeta(\"复古DV IV\", False, \"6994703188611830303\", \"1217306\", \"d97c48bb4c8048cbeb2ec8ca8e16e43e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.550, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认55%, 0% ~ 100%\"\"\"\n    复古发光             = EffectMeta(\"复古发光\", False, \"6993267867214942733\", \"1212776\", \"cfea69839054bf3cd30f7a2ac3727ea4\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认20%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认60%, 0% ~ 100%\"\"\"\n    复古多格             = EffectMeta(\"复古多格\", False, \"6875631945510818318\", \"926324\", \"19a3d5873d394ff550d6a4367ef18a45\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_sharpen: 默认50%, 0% ~ 100%\"\"\"\n    复古弹窗_I           = EffectMeta(\"复古弹窗 I\", False, \"6709708058852856327\", \"635103\", \"2c2502e679630278461b6ad9d8482928\", [\n                              EffectParam(\"effects_adjust_noise\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_noise: 默认100%, 0% ~ 100%\"\"\"\n    复古弹窗_II          = EffectMeta(\"复古弹窗 II\", False, \"6764667280681865731\", \"635143\", \"168f6b6dfc18d80bf35853d6b7774030\", [])\n    复古漫画             = EffectMeta(\"复古漫画\", False, \"6847440397027774984\", \"784724\", \"1f89b68447a46e9feb69654e4dc97a7f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    复古甜心             = EffectMeta(\"复古甜心\", False, \"6926817888632312333\", \"1039434\", \"80dbaf8bbb2d7cecdaff271656a58126\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    复古碎钻             = EffectMeta(\"复古碎钻\", False, \"6948700335481295374\", \"1094804\", \"56f3d29724754f5fc9d50c7bf6c02e28\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_noise: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    复古蓝调             = EffectMeta(\"复古蓝调\", False, \"7078935944459457061\", \"1648234\", \"971c462f47f17dd2827ad4fde77fc015\", [\n                              EffectParam(\"effects_adjust_sharpen\", 0.630, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.630, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_sharpen: 默认63%, 0% ~ 100%\n    effects_adjust_blur: 默认35%, 0% ~ 100%\n    effects_adjust_luminance: 默认63%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    夏日冰块             = EffectMeta(\"夏日冰块\", False, \"7237437172733710909\", \"14244311\", \"46b643fafe2c93bfc6607b2fe5fdd429\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.230, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认80%, 0% ~ 100%\n    effects_adjust_blur: 默认20%, 0% ~ 100%\n    effects_adjust_number: 默认23%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    夏日泡泡_I           = EffectMeta(\"夏日泡泡 I\", False, \"7104624152044114462\", \"2488948\", \"9f8219296472225136b6e73bc4c23206\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.336, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认15%, 0% ~ 100%\n    effects_adjust_speed: 默认34%, 0% ~ 100%\"\"\"\n    夕阳                 = EffectMeta(\"夕阳\", False, \"6820595030743323149\", \"719376\", \"766398e7682640dc13bceb3f448847dc\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    夕阳_II              = EffectMeta(\"夕阳 II\", False, \"6823659895221391886\", \"720788\", \"eea48333e37961c63e8d45077552de5a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    夕阳_III             = EffectMeta(\"夕阳 III\", False, \"6836996542310650381\", \"762382\", \"6deca5bd30382b52c6a7985cee5c4ca2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    夜蝶                 = EffectMeta(\"夜蝶\", False, \"6748376019524129292\", \"634175\", \"8a1a97c0b237adfb31c8ae55faa64e74\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    夜视框               = EffectMeta(\"夜视框\", False, \"6733023209978860035\", \"635131\", \"cef5df7500848aeee3f4ea15c6cdaa5b\", [])\n    大雪                 = EffectMeta(\"大雪\", False, \"6767148963503018503\", \"635063\", \"950d1e82cf0093f609e864d11f8a005d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    大雪纷飞             = EffectMeta(\"大雪纷飞\", False, \"6894517304487318024\", \"961896\", \"84aa80de0bf14d5924dab46be29f7b5a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    天使光               = EffectMeta(\"天使光\", False, \"6721949326022545928\", \"634143\", \"37c4098ac98fc25188a5a727064a7729\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    天使降临             = EffectMeta(\"天使降临\", False, \"7020715912596558366\", \"1402689\", \"be7a34ae22c8b39d1750a602757e4867\", [])\n    失焦                 = EffectMeta(\"失焦\", False, \"6984625607376114190\", \"1188938\", \"468cbf025f095d34bc7dd08462c94eae\", [\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    夸夸弹幕             = EffectMeta(\"夸夸弹幕\", False, \"6956147849356644894\", \"1115952\", \"9a0e752e8d60267d088a2ade9fb7299d\", [])\n    夺冠                 = EffectMeta(\"夺冠\", False, \"6986857922076611080\", \"1194360\", \"fae722df471ae30a898ace2990cbbf3d\", [\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    孔明灯               = EffectMeta(\"孔明灯\", False, \"6734215575196668428\", \"635037\", \"f701053aea29c2163b02f98fd9c755ec\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    孔明灯_II            = EffectMeta(\"孔明灯 II\", False, \"7008056576514724365\", \"1363340\", \"c1a6557f355c41e09fa4c2723d5f5f3e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认60%, 0% ~ 100%\"\"\"\n    字幕投影             = EffectMeta(\"字幕投影\", False, \"6828021842695950856\", \"747802\", \"ad0ff707e15d0e2dedcc23ef0c57c29a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    字幕投影_II          = EffectMeta(\"字幕投影 II\", False, \"6829181074954785294\", \"747910\", \"d6388dec46d30dda96d8a273616978eb\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    字幕投影_III         = EffectMeta(\"字幕投影 III\", False, \"6847378675894063623\", \"784366\", \"5c5ede6eb3a35e275167b8845c7ee7d5\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.670, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认67%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    字幕投影_IV          = EffectMeta(\"字幕投影 IV\", False, \"6858139153020752397\", \"875967\", \"ebd3c54c9dbfe73027fd9d480c175888\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    定格闪烁             = EffectMeta(\"定格闪烁\", False, \"6998099471565328926\", \"1227402\", \"03704af752f236eec942f78ae1190d41\", [\n                              EffectParam(\"effects_adjust_speed\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认80%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    小剧场               = EffectMeta(\"小剧场\", False, \"6955083477708444174\", \"1113428\", \"602daf84aef020a2dcba8cbd52182b66\", [])\n    小动物               = EffectMeta(\"小动物\", False, \"6965381784674505246\", \"1138384\", \"93e09d8cd1a85e9faae8da2212be88eb\", [])\n    小花花               = EffectMeta(\"小花花\", False, \"6926823177670627848\", \"1039448\", \"6fe0a146c0133191fd663c439f213236\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    少女心               = EffectMeta(\"少女心\", False, \"6992842225541452325\", \"1209684\", \"41607b261ff3c0999a2c43370dd8c442\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认60%, 0% ~ 100%\"\"\"\n    少女心事             = EffectMeta(\"少女心事\", False, \"6924872492381114894\", \"1031294\", \"ebba75bb53013a6347814b486c6063eb\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    少女星闪             = EffectMeta(\"少女星闪\", False, \"6805098811694780942\", \"703255\", \"830c6652734b4d6c12604e6f5832c6a1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    左右摇晃             = EffectMeta(\"左右摇晃\", False, \"7166435460321907207\", \"6209717\", \"02b826db1b4f972ec812d76b50a49e05\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_distortion: 默认25%, 0% ~ 100%\n    effects_adjust_speed: 默认40%, 0% ~ 100%\n    effects_adjust_sharpen: 默认50%, 0% ~ 100%\"\"\"\n    布拉格               = EffectMeta(\"布拉格\", False, \"6869626257709994510\", \"909545\", \"b9b8d37e73f8a5a1c0abff8d6c7cd1b0\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    幻彩文字             = EffectMeta(\"幻彩文字\", False, \"6760975890806477319\", \"634737\", \"0d367c9f530e2fe08aef913cf1451443\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认100%, 0% ~ 100%\"\"\"\n    幻影                 = EffectMeta(\"幻影\", False, \"6723059630676644364\", \"634751\", \"44cb0b2f810fa3119f2c9f1ae396db9d\", [\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认100%, 0% ~ 100%\"\"\"\n    幻影_II              = EffectMeta(\"幻影 II\", False, \"6898958754792870413\", \"971332\", \"14e6364b3a6a1485f2583bdfc32b9f9a\", [\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认100%, 0% ~ 100%\"\"\"\n    幻术摇摆             = EffectMeta(\"幻术摇摆\", False, \"6926400232615842318\", \"1038152\", \"3bb76ef02392a04f5b387dbd46942458\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    幻觉                 = EffectMeta(\"幻觉\", False, \"6709706311455478285\", \"634723\", \"1fa56d867a4651cbefbf6a4f669aeafc\", [\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    广角                 = EffectMeta(\"广角\", False, \"7086792017837036046\", \"1700284\", \"646ffb6188a447622926872c4fc453d6\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.450, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认45%, 0% ~ 100%\"\"\"\n    庆祝彩带             = EffectMeta(\"庆祝彩带\", False, \"6984685757508096520\", \"1189232\", \"42197cc2549fafa41c4854c4ee086074\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    开幕                 = EffectMeta(\"开幕\", False, \"6706773534074491403\", \"631211\", \"7afa9c82c3d221742bb42a3b01d4fce7\", [])\n    开幕_II              = EffectMeta(\"开幕  II\", False, \"6708899027976458760\", \"631213\", \"9fd3ee125c1319e1a3d2345849bef96b\", [])\n    强锐化               = EffectMeta(\"强锐化\", False, \"6711567084741988876\", \"634783\", \"c9ae5be2cd096747898e905fe2b6836b\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.620, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认62%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    录像带               = EffectMeta(\"录像带\", False, \"6706773534074475012\", \"634887\", \"c880d7f9eb6b4f94bf4e8f790fcf3dc0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认45%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认40%, 0% ~ 100%\"\"\"\n    录像带_II            = EffectMeta(\"录像带 II\", False, \"6771299859803673101\", \"634811\", \"12b20ba900b09a9cd833ffb15eec5f74\", [\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_noise: 默认50%, 0% ~ 100%\n    effects_adjust_texture: 默认50%, 0% ~ 100%\"\"\"\n    录像带_III           = EffectMeta(\"录像带 III\", False, \"6804357689859117581\", \"703251\", \"de0caa2ec7151990960b56f62fedd3fc\", [])\n    录制框               = EffectMeta(\"录制框\", False, \"6709725898762883595\", \"634801\", \"bbed85838ac97f63298e51e2f2b0bb03\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.670, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_noise: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认67%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    录制边框             = EffectMeta(\"录制边框\", False, \"6720541178044879367\", \"635121\", \"5a388c880fe2fec47424d62a1e81c2c1\", [])\n    录制边框_II          = EffectMeta(\"录制边框 II\", False, \"6720541079080276484\", \"635119\", \"aeb6eaaa2881ed69afb5ece40c7c4eb4\", [])\n    录制边框_III         = EffectMeta(\"录制边框 III\", False, \"6894451240382501389\", \"961624\", \"bc759f18216aac435a0cf29b69bb5051\", [])\n    录制边框_IIII        = EffectMeta(\"录制边框 IIII\", False, \"6723065859260027403\", \"634063\", \"93297cd4887ae225ecc81f79e89c156b\", [])\n    彩信                 = EffectMeta(\"彩信\", False, \"7023692066152518152\", \"1418386\", \"d019bb0c5188a75893b08562c9951a4f\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认70%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认70%, 0% ~ 100%\"\"\"\n    彩噪画质             = EffectMeta(\"彩噪画质\", False, \"7135711291473138184\", \"4253680\", \"fbdce889885763ee82ffa7138de4d36b\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认15%, 0% ~ 100%\n    effects_adjust_size: 默认60%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认15%, 0% ~ 100%\n    effects_adjust_sharpen: 默认35%, 0% ~ 100%\n    effects_adjust_noise: 默认50%, 0% ~ 100%\"\"\"\n    彩带                 = EffectMeta(\"彩带\", False, \"7012933493663470088\", \"1381644\", \"c8b3549975f0ddca9247553c2ce79564\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    彩色描边             = EffectMeta(\"彩色描边\", False, \"6966904744564494878\", \"1143666\", \"28ab5ad6e46d74bc6cc36c8aed7bf3ee\", [])\n    彩色漫画             = EffectMeta(\"彩色漫画\", False, \"6795430958737658382\", \"634947\", \"329880da582a412ad4db0451755a2065\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    彩色负片             = EffectMeta(\"彩色负片\", False, \"6914995893653475847\", \"1005840\", \"a78b49205a5d3b7fbc04a19aebce80ea\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    彩虹光               = EffectMeta(\"彩虹光\", False, \"6719758141573042692\", \"634161\", \"e39f46b0d21562c05fecfd9404d5a22f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    彩虹光_II            = EffectMeta(\"彩虹光 II\", False, \"6738279134692119047\", \"634159\", \"03814fa76660bb3db88128e2a5ef000f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    彩虹光晕             = EffectMeta(\"彩虹光晕\", False, \"6768721870360416782\", \"634213\", \"3f04c39cc212c63ac3caa048f6c34588\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    彩虹射线             = EffectMeta(\"彩虹射线\", False, \"6808837459728667144\", \"703249\", \"5c817bb9e37fafa3f03966051050040c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    彩虹幻影             = EffectMeta(\"彩虹幻影\", False, \"6756845151630397960\", \"634281\", \"a5f61f00265cbcf6fbc430780f5b4c03\", [\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    彩虹气泡             = EffectMeta(\"彩虹气泡\", False, \"6717434470128947725\", \"634127\", \"cf2687ea75161551a44016ef2ee4782d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    彩虹爱心             = EffectMeta(\"彩虹爱心\", False, \"6924873147053249031\", \"1031292\", \"235be137b3284f3d586e03f021951dac\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    彩钻                 = EffectMeta(\"彩钻\", False, \"6986188114490298888\", \"1192480\", \"ba1ae230f2b24fe3383802194fb18e5d\", [\n                              EffectParam(\"effects_adjust_size\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认20%, 0% ~ 100%\n    effects_adjust_number: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    心河                 = EffectMeta(\"心河\", False, \"6740821434307711496\", \"634273\", \"e01e24abb316c5d1ef6f71946aeb1f16\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    心跳                 = EffectMeta(\"心跳\", False, \"6723068356821258764\", \"634753\", \"905af212d43a1e42756b068af6c0c087\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    心跳黑框             = EffectMeta(\"心跳黑框\", False, \"6732383404991451656\", \"634049\", \"167ba80ce0571ba3d1d17d59f5ef5ea1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    必杀技               = EffectMeta(\"必杀技\", False, \"6797658471840879111\", \"634979\", \"ac8846e43b1fec25f2afe182d13feb24\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    必杀技_II            = EffectMeta(\"必杀技 II\", False, \"6797346848391565831\", \"634977\", \"4e3e9d5edd2dc99af5881e3ca3d9344e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    怀旧边框             = EffectMeta(\"怀旧边框\", False, \"7113820806446060040\", \"3222474\", \"6d93d853611744ad573e113f8acd3ba6\", [\n                              EffectParam(\"effects_adjust_size\", 0.636, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"sticker\", 0.630, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认64%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    sticker: 默认63%, 0% ~ 100%\"\"\"\n    怀旧边框_II          = EffectMeta(\"怀旧边框 II\", False, \"7039331384183230989\", \"1475190\", \"97076a8938d8f45a233d97fd240951c3\", [])\n    怦然心动             = EffectMeta(\"怦然心动\", False, \"6924872657083044359\", \"1031293\", \"d5e216a1700db22637509d2966004b16\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    恐怖故事             = EffectMeta(\"恐怖故事\", False, \"6888563496133333511\", \"952539\", \"5ffc4c3a4ee71dd9aa5f728da300e0f2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    恐怖故事_II          = EffectMeta(\"恐怖故事 II\", False, \"6888562369627165191\", \"952540\", \"900c63e3517b6fb24b9ed1b66c29efe0\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    恐怖故事_III         = EffectMeta(\"恐怖故事 III\", False, \"6888594040959275527\", \"952742\", \"472194dc4d5622347368fc59c753d827\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    恐怖综艺             = EffectMeta(\"恐怖综艺\", False, \"7023349285592764941\", \"1416842\", \"733e0831b3facd0931d6e648e1b381fd\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.802, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    恭喜发财             = EffectMeta(\"恭喜发财\", False, \"6920164595214586381\", \"1020210\", \"6721627a5a76e4ef49ebfcbba8714305\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    恶灵冲屏             = EffectMeta(\"恶灵冲屏\", False, \"7022838857221542414\", \"1413882\", \"c440724a491336aba4e24910d5c7f6f1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    愛                   = EffectMeta(\"愛\", False, \"6831487239164269064\", \"756184\", \"310f9f3c69c75cbb8eb25011d01d5ac4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    我酸了               = EffectMeta(\"我酸了\", False, \"6955083374054609444\", \"1113430\", \"393059e1b508041d77792ef44ffc007b\", [])\n    手帐边框             = EffectMeta(\"手帐边框\", False, \"6761336384117543438\", \"635113\", \"737114bc5ff9b162c7f6fc403e308d63\", [])\n    手电筒               = EffectMeta(\"手电筒\", False, \"6860757586220683790\", \"886132\", \"42bd8193cfc9d60fdf4392ffaf3c5baa\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    手绘拍摄器           = EffectMeta(\"手绘拍摄器\", False, \"6997608849750364708\", \"1225274\", \"4bf0e18f35a6ce0778455fdce692415d\", [])\n    手绘边框_II          = EffectMeta(\"手绘边框 II\", False, \"6723044276625740296\", \"635101\", \"28cf85153cd70aa39187c96a74dd82e1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    扫描光条             = EffectMeta(\"扫描光条\", False, \"6798379345783034382\", \"703271\", \"6b14aef1e0c5759061bc35cbf33ccd9f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    抖动                 = EffectMeta(\"抖动\", False, \"6706773500796867084\", \"634759\", \"950894d4ae28d859d9b7136a73265ee6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.750, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认75%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认75%, 0% ~ 100%\"\"\"\n    折痕                 = EffectMeta(\"折痕\", False, \"6810944968396378638\", \"703227\", \"3f7adc8176999d58e232b5fa456088d5\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    折痕_II              = EffectMeta(\"折痕 II\", False, \"6925250879259939336\", \"1032270\", \"4efd4758f897b1d364549a688129e5d5\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    折痕_III             = EffectMeta(\"折痕 III\", False, \"6925288456943833608\", \"1032322\", \"7d4cb9c576864bc421faa8d9d2f4d67e\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    折痕_IV              = EffectMeta(\"折痕 IV\", False, \"6925288650011841031\", \"1032321\", \"b04966da3a2bbd9212aec61aaa995c33\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    折痕_V               = EffectMeta(\"折痕 V\", False, \"6925292438391099912\", \"1032418\", \"1530211bc181cd4003243fa6265574db\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    报纸_今日热门        = EffectMeta(\"报纸:今日热门\", False, \"6711575336955417095\", \"635091\", \"d10a4d42b6b91f3f899a1692bddfca08\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    摇摆                 = EffectMeta(\"摇摆\", False, \"6709706542674874888\", \"634743\", \"bb8e9483313416d32bea215d57855490\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\"\"\"\n    摇摆_II              = EffectMeta(\"摇摆 II\", False, \"6821460674577699342\", \"717392\", \"332436443a8cbe9014d6bf7c8531ff60\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认100%, 0% ~ 100%\"\"\"\n    撒星星               = EffectMeta(\"撒星星\", False, \"6839514681044898311\", \"768182\", \"620d63550356df332ba5c014b310d6d2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    撒星星_II            = EffectMeta(\"撒星星 II\", False, \"6849588023714124295\", \"788728\", \"5c5349039a938e2348ae58a7dee34302\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    撕纸涂鸦边框         = EffectMeta(\"撕纸涂鸦边框\", False, \"6969851947306193416\", \"1153996\", \"592359a5945a5723aa7ed8b50e8b5ef4\", [])\n    播放器               = EffectMeta(\"播放器\", False, \"6758630566578360845\", \"635141\", \"187409b4bd22026b48df1bacdf2f3cfa\", [\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认100%, 0% ~ 100%\"\"\"\n    播放器_II            = EffectMeta(\"播放器 II\", False, \"6792819149945967111\", \"635139\", \"38b3630f57f017191fb1d1bbbf9185f1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    擦拭开幕             = EffectMeta(\"擦拭开幕\", False, \"6841459176510591496\", \"773560\", \"6725bf6b227fc208a7bd343661637320\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    放大镜               = EffectMeta(\"放大镜\", False, \"7051836120224502308\", \"1520514\", \"5f89a973e9cea025690bdb37a293a959\", [\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\"\"\"\n    放映机               = EffectMeta(\"放映机\", False, \"7067049946049942030\", \"1576250\", \"a8bffa5b39a0ff0c1cdc278216e5041d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.801, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.339, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_intensity: 默认34%, 0% ~ 100%\"\"\"\n    放映机卡顿           = EffectMeta(\"放映机卡顿\", False, \"6706773499031081483\", \"634775\", \"53f4a563209223baecaaec2cfff02afe\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    放映机抖动           = EffectMeta(\"放映机抖动\", False, \"6771320983065203213\", \"634787\", \"3d7d53f809b52f7370380f358ef6081c\", [\n                              EffectParam(\"effects_adjust_range\", 0.250, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认25%, 0% ~ 100%\"\"\"\n    放映滚动             = EffectMeta(\"放映滚动\", False, \"6970890075907297806\", \"1155966\", \"d29c13ced2fda5dca2a486dc9d5b1c6f\", [])\n    故障                 = EffectMeta(\"故障\", False, \"6707050322696606222\", \"634797\", \"ec4f1908b716eec1e47b48b9c1ac836f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认100%, 0% ~ 100%\"\"\"\n    故障_II              = EffectMeta(\"故障 II\", False, \"6738265357825348103\", \"634795\", \"d4435f333055899ab5140a4cc69aced6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    故障读条             = EffectMeta(\"故障读条\", False, \"6912013942097187336\", \"999316\", \"1ae904081a2d916d6d893e538304494c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.620, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认62%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\"\"\"\n    文字闪动             = EffectMeta(\"文字闪动\", False, \"6886710931150082573\", \"949372\", \"417b001671b78236d47f16351c7fff85\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    斑斓                 = EffectMeta(\"斑斓\", False, \"7072258619646939679\", \"1607458\", \"7030b50aec89e949ea9ce706cfb1512c\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.040, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_number: 默认4%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    斜向模糊             = EffectMeta(\"斜向模糊\", False, \"6871185301071467015\", \"920936\", \"7865be92e2a2b811cea9639d08dab0c0\", [\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.250, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_rotate: 默认25%, 0% ~ 100%\"\"\"\n    新年倒数             = EffectMeta(\"新年倒数\", False, \"6921952071247729165\", \"1024106\", \"9daf33bd3465df6f5bfe131318211461\", [\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认100%, 0% ~ 100%\"\"\"\n    新年开幕             = EffectMeta(\"新年开幕\", False, \"6911144014624330248\", \"995666\", \"d7d65b8cc72db4aa83c01d74796af055\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    新年快乐             = EffectMeta(\"新年快乐\", False, \"6899747094840480269\", \"972751\", \"5fb6810c877c28869573c081b92ac8a4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    新春杂志             = EffectMeta(\"新春杂志\", False, \"7189543383222719034\", \"8573753\", \"40e13fa6203f4484b64b8a7bf0c180e8\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    新春祝福             = EffectMeta(\"新春祝福\", False, \"7189586707035984441\", \"8578565\", \"1779394ed10f0aafa3240006828f34f3\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.625, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认62%, 0% ~ 100%\"\"\"\n    方形取景器           = EffectMeta(\"方形取景器\", False, \"6706773499031097868\", \"635099\", \"23af10c231cf1b88104e206ca5b6d9ad\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.660, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认66%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    方形开幕             = EffectMeta(\"方形开幕\", False, \"6729055410835165708\", \"634043\", \"c216a88587da0864bfe1f477f2fd1880\", [])\n    旋转方块             = EffectMeta(\"旋转方块\", False, \"7041504567648850445\", \"1482636\", \"d41b7b274f570518ad7aedb88e7b687e\", [\n                              EffectParam(\"effects_adjust_size\", 0.714, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.250, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认71%, 0% ~ 100%\n    effects_adjust_speed: 默认25%, 0% ~ 100%\"\"\"\n    日式DV               = EffectMeta(\"日式DV\", False, \"6965747262165094942\", \"1146392\", \"2ba4db88748088d60090705ab0d921fd\", [])\n    日文字幕             = EffectMeta(\"日文字幕\", False, \"6858954575701873160\", \"881783\", \"1943875bfc98f928d2d60ac63c1a7271\", [\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    sticker: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    日落灯               = EffectMeta(\"日落灯\", False, \"6920147678248571406\", \"1020046\", \"0a5d6dc144c4a488cc223c14ef092d05\", [\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.560, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.610, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.640, 0.000, 1.000)])\n    \"\"\"参数:\n    sticker: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认56%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认61%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认64%, 0% ~ 100%\"\"\"\n    时光碎片             = EffectMeta(\"时光碎片\", False, \"6971332934288544286\", \"1157058\", \"97a217ce3f6f5c8a4729912f1b77ec23\", [])\n    时间停止             = EffectMeta(\"时间停止\", False, \"6948722700286169631\", \"1095262\", \"dce8f128927e797533d59dc0b1fb6c7d\", [])\n    星光                 = EffectMeta(\"星光\", False, \"6717433583289504268\", \"634117\", \"18ca299d377f85452542449185ccdcd9\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星光_II              = EffectMeta(\"星光 II\", False, \"6715209934738297358\", \"634113\", \"c0629f8eb980bc1cc9853fd15fcb49cd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星光绽放             = EffectMeta(\"星光绽放\", False, \"6760243564598268420\", \"634195\", \"af1fc6a5b22f4357b4f86ad314510851\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星光闪耀             = EffectMeta(\"星光闪耀\", False, \"6967255188730024455\", \"1146750\", \"3650ba757a4c5be9accd956d8dd47df1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星光闪闪             = EffectMeta(\"星光闪闪\", False, \"6871055398107877902\", \"920549\", \"6fe220ca67a2f626ffd888b28172bc29\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星夜                 = EffectMeta(\"星夜\", False, \"7008149210159649294\", \"1364164\", \"1c75b4cf948ba65efeb1af5a25b41a7e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星星冲屏             = EffectMeta(\"星星冲屏\", False, \"6769007480652435982\", \"634193\", \"52685a9660f7ddc2e9223f437485f4b2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    星星坠落             = EffectMeta(\"星星坠落\", False, \"6977257384120947213\", \"1171606\", \"8b8d284d0ea56e0ffc07a2e6710d990f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    星星彩绘             = EffectMeta(\"星星彩绘\", False, \"7395533077130252863\", \"76607736\", \"70c6dc5c306b59d80f68c8fae3c528f7\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\"\"\"\n    星星投影             = EffectMeta(\"星星投影\", False, \"6826530141586330120\", \"741906\", \"cfbf1b6be6d23e3575caf3a026f54082\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星星灯               = EffectMeta(\"星星灯\", False, \"6903072502369489422\", \"977478\", \"9a20a02448ef8d95a81c3b16ca881742\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星星闪烁             = EffectMeta(\"星星闪烁\", False, \"6778285088485413384\", \"634215\", \"f75821b85d4f8e7be6eb42ca17f2e343\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星星闪烁_II          = EffectMeta(\"星星闪烁 II\", False, \"6834010357728547335\", \"755806\", \"469b87318cdd87cefbb54223cd4633fd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星星闪烁_III         = EffectMeta(\"星星闪烁 III\", False, \"6871167583991632391\", \"920916\", \"ccdcf8be8c2d54b0c029ece6f85e4d51\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星月童话             = EffectMeta(\"星月童话\", False, \"6967255330958873124\", \"1146749\", \"310fe4000e5635f13ec28570736b60e3\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星河                 = EffectMeta(\"星河\", False, \"6734498838410695175\", \"634265\", \"5d1c03757b50feee9ef6bb4ac4d4d99c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星河_II              = EffectMeta(\"星河 II\", False, \"7010648091049071135\", \"1372810\", \"2273947aec8664bd5c7a0f410c8bebfb\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认60%, 0% ~ 100%\"\"\"\n    星火                 = EffectMeta(\"星火\", False, \"6715209198109463054\", \"634103\", \"c2811a4bdeb4394ae95f3aa9875dc4dc\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星火_II              = EffectMeta(\"星火 II\", False, \"6907053209173365256\", \"986477\", \"43a04949ebd13d27d7b38f5083882322\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星火炸开             = EffectMeta(\"星火炸开\", False, \"6808838081420988942\", \"703243\", \"bf25e21e5b4a025e984e2eed0a00345d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星移                 = EffectMeta(\"星移\", False, \"6778284619499311623\", \"634267\", \"f1c6583c2a7227b6ccf002863fdfdf65\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星空                 = EffectMeta(\"星空\", False, \"6734587005872640519\", \"635035\", \"dc11bf828dc298c85256509f24f0451d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星辰                 = EffectMeta(\"星辰\", False, \"6761722814157296141\", \"634271\", \"572ed0caff4d1d4ee69b8ab9914ae69a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    星辰_I               = EffectMeta(\"星辰 I\", False, \"6946113717100614158\", \"1087622\", \"3c8c6e57ebbcca08e0202a2ce489a109\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    星辰_II              = EffectMeta(\"星辰 II\", False, \"6946453051368542727\", \"1089758\", \"4776e97efe2b615622586f9eba683b81\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认100%, 0% ~ 100%\"\"\"\n    星辰_III             = EffectMeta(\"星辰 III\", False, \"6948700154874565156\", \"1094800\", \"7e62c362c751a7d4bc806e5036e1ce45\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\"\"\"\n    星雨                 = EffectMeta(\"星雨\", False, \"6766488666261950989\", \"634187\", \"ec147993b7ce136beccd018d179fae2c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    春日樱花             = EffectMeta(\"春日樱花\", False, \"6927185086685123086\", \"1041304\", \"0e308be06e990da9322e807a8a4b3783\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    春日边框             = EffectMeta(\"春日边框\", False, \"6942800783737885198\", \"1076064\", \"a8f4b178a0c820ab601f742ce4eb286a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    晴天光线             = EffectMeta(\"晴天光线\", False, \"6740540037563159047\", \"635071\", \"1d65a16823fdd3130901b3687f0107d0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    暗夜                 = EffectMeta(\"暗夜\", False, \"6886698114258833934\", \"949350\", \"17b5b34a9580eca1b093e3b9b730b5ad\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认100%, 0% ~ 100%\"\"\"\n    暗夜归来             = EffectMeta(\"暗夜归来\", False, \"7020715691355410951\", \"1402690\", \"7e0d21432508fde619dad195088275b8\", [])\n    暗夜彩虹             = EffectMeta(\"暗夜彩虹\", False, \"6823658782090859022\", \"720808\", \"123ffb581708c8e5df875d30fdf26b66\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    暗夜彩虹_II          = EffectMeta(\"暗夜彩虹 II\", False, \"6824046488419570184\", \"741832\", \"8411467f9cf5520fdb9cc14151bef011\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    暗夜彩虹III          = EffectMeta(\"暗夜彩虹III\", False, \"6824047157369115150\", \"741860\", \"3b1f50d0c90f48a42cdb0071beedb4a9\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    暗夜精灵             = EffectMeta(\"暗夜精灵\", False, \"6888573576870367751\", \"952536\", \"fd84a50ad750ae84e3b2ce62cd22a6e5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    暗夜蝙蝠             = EffectMeta(\"暗夜蝙蝠\", False, \"7021786820153184775\", \"1407954\", \"bbe314aced3bb2ab605a2c7c6b0adf93\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    暗角                 = EffectMeta(\"暗角\", False, \"6723086142658318860\", \"634057\", \"ef7abad9671e2f3da7993b7673ece5fc\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    暗黑剪影             = EffectMeta(\"暗黑剪影\", False, \"6886718600233619982\", \"949388\", \"e31ade9f9b38b5721fb601ad187bb163\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.670, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认67%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    暗黑噪点             = EffectMeta(\"暗黑噪点\", False, \"7022896066559218183\", \"1414024\", \"fae125ebf95a6bb9d8a4233ea9b3dced\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.801, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.801, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_background_animation: 默认80%, 0% ~ 100%\"\"\"\n    暗黑蝙蝠             = EffectMeta(\"暗黑蝙蝠\", False, \"6749064512390828548\", \"634179\", \"934fcfaf5b153a5a0fc91951b9d7d61b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认60%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认60%, 0% ~ 100%\"\"\"\n    曝光                 = EffectMeta(\"曝光\", False, \"6992043513365926408\", \"1207064\", \"e961c201b279f5ef164f119aa7ab2a78\", [\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认30%, 0% ~ 100%\n    effects_adjust_texture: 默认60%, 0% ~ 100%\"\"\"\n    曝光降低             = EffectMeta(\"曝光降低\", False, \"6765766949382132232\", \"634659\", \"be1c0676764ee83d32b63afc46272c28\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    月亮投影             = EffectMeta(\"月亮投影\", False, \"6826529572536717837\", \"741892\", \"c71386afba5abc8a66cd05a5c21fab2c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    月亮闪闪             = EffectMeta(\"月亮闪闪\", False, \"6876339287038628359\", \"931823\", \"11d24cd11738137f080ab6b050337f8f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    月光闪闪             = EffectMeta(\"月光闪闪\", False, \"6906802979861434887\", \"986344\", \"72e1573314be95270038e193db1def8d\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.750, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认75%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认75%, 0% ~ 100%\"\"\"\n    望远镜               = EffectMeta(\"望远镜\", False, \"6834012604759806472\", \"761578\", \"63e50736865f6248f87b6280c5b0d88b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    未来主义             = EffectMeta(\"未来主义\", False, \"6982870068069667365\", \"1185624\", \"5c8d55dd2769674a7c05099020ca1000\", [])\n    杂志                 = EffectMeta(\"杂志\", False, \"6810945952451400200\", \"703235\", \"c2d0a5d79d37501fb8d49502783145e6\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    树影                 = EffectMeta(\"树影\", False, \"6815830852035940872\", \"703215\", \"e94e1952adee72678c426490036dae61\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    树影_II              = EffectMeta(\"树影 II\", False, \"6820591707617235464\", \"719372\", \"068b6e28050ccaa8d0832419a0a185c4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    格纹纸质             = EffectMeta(\"格纹纸质\", False, \"6815834305084789262\", \"703223\", \"722c3de2c3639bbcaa23b0e8ff7b9486\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    格纹纸质_II          = EffectMeta(\"格纹纸质 II\", False, \"6815834434726531597\", \"703225\", \"af3ab7ecf7d9e53618301ea7652027e7\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    梦境                 = EffectMeta(\"梦境\", False, \"6841460732639318542\", \"773088\", \"37faa88347805d59c7d7db2e2267e0c9\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    梦境_II              = EffectMeta(\"梦境 II\", False, \"6849235870130639368\", \"788039\", \"715227fc796386820c16198a57fd5249\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    梦境_III             = EffectMeta(\"梦境 III\", False, \"6843319622385537544\", \"774964\", \"ae67e41be59533a1fa5de82ad641563a\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    梦境_IV              = EffectMeta(\"梦境 IV\", False, \"6841460608248844813\", \"773086\", \"23336e6ee5aef71cc59e7b072fede43b\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_soft: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    梦幻雪花             = EffectMeta(\"梦幻雪花\", False, \"6894208129534267912\", \"961480\", \"0d95d3c97bfac92fd5abc0f5c04431a5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    梦蝶                 = EffectMeta(\"梦蝶\", False, \"6998050316528652831\", \"1406766\", \"9a471302029b78e4ed7404a08d835467\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    梦魇                 = EffectMeta(\"梦魇\", False, \"7024080087163081229\", \"1419974\", \"b678d12a5275aa28637557b455299c5c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.336, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认34%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    梵高背景             = EffectMeta(\"梵高背景\", False, \"6967354298275467807\", \"1147066\", \"52e5b1690a75d4e6ca88c7f18f47b7e7\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    模糊                 = EffectMeta(\"模糊\", False, \"6739752823140913675\", \"634025\", \"abb0b0e8472b73a42e796086c708d216\", [\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    模糊开幕             = EffectMeta(\"模糊开幕\", False, \"6758752103092457991\", \"634071\", \"c0827630f211d83cc2a8258ce59d8c78\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.250, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认25%, 0% ~ 100%\"\"\"\n    模糊星光             = EffectMeta(\"模糊星光\", False, \"6771299961171612174\", \"634255\", \"f40e2044c0482290ab34e4db7dfdabcb\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.750, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认75%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认75%, 0% ~ 100%\"\"\"\n    模糊星光_II          = EffectMeta(\"模糊星光 II\", False, \"6806254134619017741\", \"703247\", \"5f0825e579151faded0b25cdac27324f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    模糊闭幕             = EffectMeta(\"模糊闭幕\", False, \"6821460725517521416\", \"717394\", \"b42ba749d552dbb865daa4c0a8e8ae6d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.250, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认25%, 0% ~ 100%\"\"\"\n    横向闭幕             = EffectMeta(\"横向闭幕\", False, \"6876339694825640455\", \"931822\", \"b7abe840af4f942b11e0ccda971d4df7\", [])\n    横纹故障             = EffectMeta(\"横纹故障\", False, \"6806254428358709767\", \"703269\", \"fbc084265465ab0db5ba8e2b3624c4d0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    横纹故障_II          = EffectMeta(\"横纹故障 II\", False, \"6815093228216259079\", \"703267\", \"a9061d0f59a826dc552e96ecc38c94c4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    樱花朵朵             = EffectMeta(\"樱花朵朵\", False, \"6940448547137393159\", \"1069014\", \"3c1cb50f953aea57451da040eeade612\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    橘色负片             = EffectMeta(\"橘色负片\", False, \"6914995976608420365\", \"1005839\", \"95ddc63de88b65e1782c88c300c7e90e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    欧根纱               = EffectMeta(\"欧根纱\", False, \"7273334324106105403\", \"21803568\", \"08e90c7652fb03ccbc30f7e92519bb65\", [\n                              EffectParam(\"effects_adjust_size\", 0.300, 0.000, 0.600),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.280, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.125, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认30%, 0% ~ 60%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认28%, 0% ~ 100%\n    effects_adjust_rotate: 默认12%, 0% ~ 100%\"\"\"\n    毛刺                 = EffectMeta(\"毛刺\", False, \"6709706457543086605\", \"634711\", \"08b418c92900f56a493cd0efb570f0e1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认75%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    毛玻璃               = EffectMeta(\"毛玻璃\", False, \"7031846864198570532\", \"1445528\", \"a846bba99039c2625c15da18fa265960\", [])\n    水墨晕染             = EffectMeta(\"水墨晕染\", False, \"6746486938137530884\", \"634101\", \"561b55373df7ee5e9e6f10d5cb235190\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    水彩晕染             = EffectMeta(\"水彩晕染\", False, \"6733378866686988803\", \"634099\", \"85757609b1d1f799ebf542aec9662fce\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    水波纹               = EffectMeta(\"水波纹\", False, \"6940173521905521159\", \"1068390\", \"61ab10b10def92e31b0400ac87e43088\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\"\"\"\n    水波纹投影           = EffectMeta(\"水波纹投影\", False, \"6847018706887774727\", \"783644\", \"4b0042213e23e9050cfb066f2365564b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    水滴模糊             = EffectMeta(\"水滴模糊\", False, \"6911935918433636871\", \"998722\", \"99d7b39f93c993e17cca03313041aa8d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    水滴滚动             = EffectMeta(\"水滴滚动\", False, \"6863328348920091144\", \"892170\", \"25bf851759c3c6ebdf2036ee357866d3\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    油画泼墨             = EffectMeta(\"油画泼墨\", False, \"7398059491545059876\", \"77243667\", \"8fd86200709777bc0ff0c5ff3af2af22\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认30%, 0% ~ 100%\"\"\"\n    油画纹理             = EffectMeta(\"油画纹理\", False, \"6808442362314887693\", \"645833\", \"e3fc6aa919c13ff59280907da88d2bf3\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    泡泡                 = EffectMeta(\"泡泡\", False, \"6806254230614053383\", \"703241\", \"060b8178d3ac554eaa0d22e04989e70c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    泡泡变焦             = EffectMeta(\"泡泡变焦\", False, \"7133105682881974821\", \"4118383\", \"84c9bae7a15dc1118072ee3ab1ddf3c2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\"\"\"\n    波点彩绘             = EffectMeta(\"波点彩绘\", False, \"7398099732884623908\", \"77269362\", \"12ab8828a3361cffb159f67f2d098d71\", [\n                              EffectParam(\"effects_adjust_color\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认70%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    波纹扭曲             = EffectMeta(\"波纹扭曲\", False, \"7368745372081984035\", \"63865672\", \"c0db14b731d4f04c95332348a0488089\", [\n                              EffectParam(\"effects_adjust_sharpen\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.550, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_sharpen: 默认35%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认20%, 0% ~ 100%\n    effects_adjust_speed: 默认20%, 0% ~ 100%\n    effects_adjust_intensity: 默认40%, 0% ~ 100%\n    effects_adjust_distortion: 默认55%, 0% ~ 100%\"\"\"\n    波纹色差             = EffectMeta(\"波纹色差\", False, \"6709347834690277892\", \"634285\", \"57d2f602616ff3f9ce589e2b3150e364\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认60%, 0% ~ 100%\"\"\"\n    流动烟雾             = EffectMeta(\"流动烟雾\", False, \"7257495407712801317\", \"18648774\", \"ab6aa4d420ef1cf322d25b24a054a7c6\", [\n                              EffectParam(\"effects_adjust_size\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.900, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认70%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认80%, 0% ~ 100%\n    effects_adjust_filter: 默认90%, 0% ~ 100%\n    effects_adjust_texture: 默认90%, 0% ~ 100%\n    effects_adjust_color: 默认90%, 0% ~ 100%\"\"\"\n    流星雨               = EffectMeta(\"流星雨\", False, \"6974750495415996936\", \"1164794\", \"fa635717b7c3eeefed138087de04c267\", [])\n    浓雾                 = EffectMeta(\"浓雾\", False, \"6751566830206194190\", \"635047\", \"b69f839d17cd1fa3ca2b67df18b95519\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    浪漫氛围             = EffectMeta(\"浪漫氛围\", False, \"6790533020215415304\", \"634253\", \"af18c87e794b96c831549e8406c8f8c5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    浪漫氛围_II          = EffectMeta(\"浪漫氛围 II\", False, \"6814667933684339207\", \"705081\", \"7021b0ea7b01f0dc0be39b091c3431a2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    涂鸦切割边框         = EffectMeta(\"涂鸦切割边框\", False, \"6969850948969566756\", \"1153998\", \"e477d2fe74226d0905247b351722848c\", [])\n    淡彩边框             = EffectMeta(\"淡彩边框\", False, \"6753512270598246925\", \"635117\", \"3da6d9d4146803479ed0b4ab840219a2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    清新绿格子           = EffectMeta(\"清新绿格子\", False, \"6966132680211567135\", \"1141780\", \"add7f1470b3da2f309c52f337722fe1b\", [])\n    渐显开幕             = EffectMeta(\"渐显开幕\", False, \"6722343568188379661\", \"634041\", \"a299b022ab4d7a1830ac72dce3d21d95\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    渐渐放大             = EffectMeta(\"渐渐放大\", False, \"6730912024596845063\", \"634067\", \"56b46f1ebc45c47730d3f7c2569200fc\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.660, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认66%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    渐隐闭幕             = EffectMeta(\"渐隐闭幕\", False, \"6723050814006366734\", \"634039\", \"05c17ac3298c0521cd91a720850a27de\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    温柔细闪             = EffectMeta(\"温柔细闪\", False, \"6995497812221760030\", \"1220300\", \"90a28bc4dcde319ec961b8f07a81c817\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    游戏界面             = EffectMeta(\"游戏界面\", False, \"6983877697524994567\", \"1187140\", \"79fc508b1d127dc744a0b6bf9d63c8ea\", [])\n    满屏问号             = EffectMeta(\"满屏问号\", False, \"6950902993294201358\", \"1101078\", \"168794f69f32cdb6011ebca4b5bf3382\", [])\n    漏光噪点             = EffectMeta(\"漏光噪点\", False, \"6810944598874001934\", \"703229\", \"2e08fe198f1c351fb6d19ded110a5a84\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    火光                 = EffectMeta(\"火光\", False, \"6748623656181568011\", \"634167\", \"8ae6b74e205a7ba0e3fcd3f01e93b72d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    火光刷过             = EffectMeta(\"火光刷过\", False, \"6803160938603090440\", \"705085\", \"94e472584aebf6d8fe65675b50184165\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    火光包围             = EffectMeta(\"火光包围\", False, \"6803162714148442632\", \"705033\", \"3d4fa21f005a3526c2f3189f29c03d0a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    火光翻滚             = EffectMeta(\"火光翻滚\", False, \"6809889314860700173\", \"703263\", \"b613ef50916282ef8dca4babe5d1006d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    火光蔓延             = EffectMeta(\"火光蔓延\", False, \"6803162375148016135\", \"703265\", \"eca67ce53f0d86e643af3dc6de2b8a0a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    灵魂出窍             = EffectMeta(\"灵魂出窍\", False, \"6706773500784284172\", \"634709\", \"7cd3e52c6ee775c334f44bec43b54325\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认100%, 0% ~ 100%\"\"\"\n    炫彩                 = EffectMeta(\"炫彩\", False, \"6732693992225378828\", \"634091\", \"c58f672e5d95a2ee49b3659006871671\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    炫彩_II              = EffectMeta(\"炫彩 II\", False, \"6933131104274616840\", \"1145374\", \"3c4e2ce8a947354ca1e0687b9b2b3810\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    烟花                 = EffectMeta(\"烟花\", False, \"6782461740274684424\", \"635073\", \"4e7301f2c6232050b71d95e750d67861\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    烟花_II              = EffectMeta(\"烟花 II\", False, \"7010666068997837342\", \"1373018\", \"4037759ec478f5a033d160f1bab07f90\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    烟花_III             = EffectMeta(\"烟花 III\", False, \"7052201781241057805\", \"1522424\", \"5d6d7516368c1dcdfb2bb274c2600416\", [\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.336, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认34%, 0% ~ 100%\"\"\"\n    烟雾                 = EffectMeta(\"烟雾\", False, \"6733145063997575694\", \"634145\", \"f7e8f3aee8e513dc63a56c43f58b0287\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    烟雾炸开             = EffectMeta(\"烟雾炸开\", False, \"6804317747351130638\", \"703261\", \"c4687b9722a4e7299039fd06f7956742\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    爆炸                 = EffectMeta(\"爆炸\", False, \"6740540228194275844\", \"635067\", \"7b4df7ff18f6e6ccb1b49bf58611499e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    爱心Kira             = EffectMeta(\"爱心Kira\", False, \"6896058666357625351\", \"965696\", \"565508851b78d5a08f2abfb2bed717fd\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    爱心bling            = EffectMeta(\"爱心bling\", False, \"6709706255105004045\", \"634133\", \"182cd7556ffdc70c9a8fdb98947f9d8c\", [\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    爱心光斑             = EffectMeta(\"爱心光斑\", False, \"6709706178340852236\", \"634135\", \"58c897c26fa3df544d100541167c02b8\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    爱心光斑_II          = EffectMeta(\"爱心光斑 II\", False, \"6791647108974776839\", \"634261\", \"85619b11f963ebd32b545b069cd75221\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    爱心光波             = EffectMeta(\"爱心光波\", False, \"6746014633942848007\", \"634191\", \"6d42bba28607f45ca90a7359b7c6ab74\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    爱心啵啵             = EffectMeta(\"爱心啵啵\", False, \"6924869659476890125\", \"1031295\", \"dce0f289716b6e4c4c7256a4ab364188\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    爱心射线             = EffectMeta(\"爱心射线\", False, \"6805099653730669070\", \"703257\", \"d75a8189380e55c63785b24d8050f9c6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    爱心投影             = EffectMeta(\"爱心投影\", False, \"6828020234876621325\", \"741958\", \"7515290b9cb341d5816bc502bafaabab\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    爱心方块             = EffectMeta(\"爱心方块\", False, \"7041103714647544334\", \"1480898\", \"076a41421bbc4a6419fcccdc3c1ce80c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.634, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认63%, 0% ~ 100%\"\"\"\n    爱心暗角             = EffectMeta(\"爱心暗角\", False, \"6925342127807271431\", \"1033842\", \"1991e877ef3ba32d48bcbe62a2e326cb\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.670, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认67%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    爱心气泡             = EffectMeta(\"爱心气泡\", False, \"6792405144655893005\", \"634235\", \"3b6d673988e3e82046b3159f59a5c12a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    爱心泡泡             = EffectMeta(\"爱心泡泡\", False, \"6886709503136371207\", \"949386\", \"bc428e7342600fc4cf0daa1515f3aac6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    爱心爆炸             = EffectMeta(\"爱心爆炸\", False, \"6855563744123032071\", \"824444\", \"39dfc6d5b4e0a4fa623d5d5e959c4095\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    爱心缤纷             = EffectMeta(\"爱心缤纷\", False, \"6790534436153725448\", \"634259\", \"5cd7d926814e4c5b6baca975bf3f8a80\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    爱心缤纷_II          = EffectMeta(\"爱心缤纷 II\", False, \"6792092999468716558\", \"634257\", \"d7391e2297dbeea1409bd53de6f2064e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    爱心跳动             = EffectMeta(\"爱心跳动\", False, \"6790547496394297863\", \"634275\", \"68b31593ac0e5c661e1d610ce540d64b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    爱心跳动_II          = EffectMeta(\"爱心跳动 II\", False, \"6858138763290219021\", \"875970\", \"e246526e1234846c538b718d4be7dbf2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    爱心闪烁             = EffectMeta(\"爱心闪烁\", False, \"6792109800135070222\", \"634231\", \"e8eb70ffb513761efe8662314e411974\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    牛皮纸关闭           = EffectMeta(\"牛皮纸关闭\", False, \"6966139059194303013\", \"1140082\", \"f2fb4e0bf0ea133b39eb068152acce74\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    牛皮纸打开           = EffectMeta(\"牛皮纸打开\", False, \"6966136913010889223\", \"1140078\", \"bc67263387f709f884b84337e67fe6d6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    牛皮纸边框_I         = EffectMeta(\"牛皮纸边框 I\", False, \"6966139444382405134\", \"1140086\", \"db111daab71339846516a5c01402752e\", [])\n    牛皮纸边框_II        = EffectMeta(\"牛皮纸边框 II\", False, \"6966139579912950286\", \"1140085\", \"e91bd852184f4ac248f6291a4c8d1826\", [])\n    玫瑰花瓣             = EffectMeta(\"玫瑰花瓣\", False, \"6734619627051028996\", \"635051\", \"abd9d7c89fa42048f1ad1fe68b867ba0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    玻璃破碎             = EffectMeta(\"玻璃破碎\", False, \"6912015453892121102\", \"999326\", \"cb76d83cf3c3b3674b2207c33bcaf67d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    甜心投影             = EffectMeta(\"甜心投影\", False, \"7058961500060258847\", \"1552216\", \"24068e8b49b64d8802e7d62ca05acc07\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.435, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_number: 默认10%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_rotate: 默认44%, 0% ~ 100%\n    effects_adjust_blur: 默认20%, 0% ~ 100%\"\"\"\n    生日快乐             = EffectMeta(\"生日快乐\", False, \"6899747371593241096\", \"972748\", \"7e2e3e9671c48ebdd4abf0f8efa0b3eb\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    电光包围             = EffectMeta(\"电光包围\", False, \"6809889225144537613\", \"703259\", \"41db536d57ca3c1d547f13b658c2386d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    电光漩涡             = EffectMeta(\"电光漩涡\", False, \"6797341815377760782\", \"634975\", \"363d8c0772a4e49a3f51f233748dd86b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    电子屏               = EffectMeta(\"电子屏\", False, \"6847692508449739278\", \"785074\", \"7e3720dced915006968402e0f245f955\", [\n                              EffectParam(\"effects_adjust_noise\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_noise: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    电影刮花             = EffectMeta(\"电影刮花\", False, \"6722366799003783692\", \"634789\", \"10c7d224fcc46291509c22a902efeb6e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    电影感               = EffectMeta(\"电影感\", False, \"6719333680713568771\", \"634029\", \"1beeb560b0796fc181f265df1e83fa66\", [])\n    电影感画幅           = EffectMeta(\"电影感画幅\", False, \"6746135410218373646\", \"634083\", \"f37cf7f307b394d1d496d5264c7b2a86\", [\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认50%, 0% ~ 100%\"\"\"\n    电脑桌面             = EffectMeta(\"电脑桌面\", False, \"7026619341839798820\", \"1482288\", \"1625f25739fdc13d63b9867589929cae\", [\n                              EffectParam(\"effects_adjust_color\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认10%, 0% ~ 100%\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认70%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    电视关机             = EffectMeta(\"电视关机\", False, \"6719656840646365707\", \"634805\", \"c2ef989d8286f4b2e5a747bca129602a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认60%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认60%, 0% ~ 100%\"\"\"\n    电视开机             = EffectMeta(\"电视开机\", False, \"6719661856434164237\", \"634807\", \"b7f303766220a86078204b79a4db2566\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认60%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认60%, 0% ~ 100%\"\"\"\n    电视彩虹屏           = EffectMeta(\"电视彩虹屏\", False, \"6852503085672043021\", \"815546\", \"d6ef86b7e37c1996e336d6541f5c4d7a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    电视纹理             = EffectMeta(\"电视纹理\", False, \"6763933311933878791\", \"634803\", \"12829eb28e30b3c046bcb9ce3fdd8641\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认100%, 0% ~ 100%\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\"\"\"\n    画展边框             = EffectMeta(\"画展边框\", False, \"6839527903424680456\", \"768176\", \"594fd22d6effa8153b7a619746b1dd0f\", [])\n    白噪点边框           = EffectMeta(\"白噪点边框\", False, \"6970599572976439839\", \"1155426\", \"ffe0f3ffa043687873060dabb41e45ac\", [])\n    白胶边框             = EffectMeta(\"白胶边框\", False, \"6865979592264389127\", \"898956\", \"77fb2991364f2882ef4b61317f7a10dc\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    白色描边             = EffectMeta(\"白色描边\", False, \"6953169122649707045\", \"1107244\", \"647776c50dafcbfab55f1dcb36d28792\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    白色渐显             = EffectMeta(\"白色渐显\", False, \"6723790385069429262\", \"634037\", \"94b1df840d30218f14e8a5e509df5c8e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    白色爱心             = EffectMeta(\"白色爱心\", False, \"6868556923503907342\", \"904792\", \"6fbffdaff4f4a6f3894af0a29f5fe8cc\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    白色线框             = EffectMeta(\"白色线框\", False, \"6753512551536923149\", \"635109\", \"66d6c8dffd954669fbb74410f28ac6c0\", [])\n    白色边框             = EffectMeta(\"白色边框\", False, \"6974602583411266079\", \"1164159\", \"799ac5c78fddad12e395047e180f4328\", [])\n    百叶窗               = EffectMeta(\"百叶窗\", False, \"6823654892872143367\", \"719380\", \"bde8d2cb9d033a45c92615f9b18b47a1\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    百叶窗_II            = EffectMeta(\"百叶窗 II\", False, \"6823656768334205454\", \"719404\", \"380df1dbfbfb93a560b389d5683043e7\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    监控                 = EffectMeta(\"监控\", False, \"6773542922030682632\", \"634941\", \"82748b8ee1cc9a6619aa3571c5e59183\", [\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认40%, 0% ~ 100%\n    effects_adjust_intensity: 默认40%, 0% ~ 100%\"\"\"\n    盗梦空间             = EffectMeta(\"盗梦空间\", False, \"7024053604596060680\", \"1419276\", \"ab8caff5408905d424c23bef34af0853\", [\n                              EffectParam(\"effects_adjust_size\", 0.336, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.667, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.801, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认34%, 0% ~ 100%\n    effects_adjust_distortion: 默认70%, 0% ~ 100%\n    effects_adjust_rotate: 默认67%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\"\"\"\n    盛世美颜             = EffectMeta(\"盛世美颜\", False, \"6860757421283873293\", \"886130\", \"16d39197cd79d2753ce8c58f409c78a2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    相机网格             = EffectMeta(\"相机网格\", False, \"6725730715138265612\", \"634051\", \"7569da277fd0c96d1a8ab45a024baa96\", [])\n    相纸                 = EffectMeta(\"相纸\", False, \"6713856991086776835\", \"635093\", \"14d50603fdd87a40a787e71172901a56\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_soft: 默认70%, 0% ~ 100%\"\"\"\n    瞬间模糊             = EffectMeta(\"瞬间模糊\", False, \"6903409009210954253\", \"979300\", \"eae568b2fa0c05249efc7dbcbfcf8e2e\", [\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认100%, 0% ~ 100%\"\"\"\n    破冰                 = EffectMeta(\"破冰\", False, \"7047049192832766477\", \"1499079\", \"35814c493387bfc7af1eadf958e28d71\", [\n                              EffectParam(\"effects_adjust_speed\", 0.336, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认34%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    磨砂纹理             = EffectMeta(\"磨砂纹理\", False, \"6732693826135134734\", \"634027\", \"4ea2d570ea1d66a407d6973006c199a0\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    祝福环绕             = EffectMeta(\"祝福环绕\", False, \"7324617866056045106\", \"40453164\", \"f04f5974c31731224645e5d0374e3e04\", [\n                              EffectParam(\"effects_adjust_color\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"sticker\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认75%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    sticker: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认40%, 0% ~ 100%\"\"\"\n    福气满满             = EffectMeta(\"福气满满\", False, \"6922029632040473095\", \"1024408\", \"d4f990d1dd3aa556526945fae1bafcab\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    秋日暖黄             = EffectMeta(\"秋日暖黄\", False, \"7005090271696261640\", \"1352364\", \"962a7be1764e7dcdb8ab54198a6bde14\", [])\n    空灵                 = EffectMeta(\"空灵\", False, \"7021096050899292680\", \"1404120\", \"c0bbb93750bb7fe5b9b2900ff853adb6\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    窗格                 = EffectMeta(\"窗格\", False, \"6719656757175521800\", \"634781\", \"6c832fb174c39c2c7f8af853987e89e4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    窗格光               = EffectMeta(\"窗格光\", False, \"6823659309428118030\", \"719378\", \"6bd27e2b68879bb788d7ef0265648795\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    简约边框             = EffectMeta(\"简约边框\", False, \"7039329234170417701\", \"1475188\", \"a130a890772cc684fc987dcf2ec22124\", [\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    箭头放大镜           = EffectMeta(\"箭头放大镜\", False, \"7067461440960991752\", \"1579942\", \"e0540ac533119123deb057f99419b6dc\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认75%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认0%, 0% ~ 100%\"\"\"\n    粉红老电视           = EffectMeta(\"粉红老电视\", False, \"6839596824936845838\", \"770876\", \"10efcbd56eb7d9dd9cea22bb55bf443c\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认60%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    粉红芭比边框         = EffectMeta(\"粉红芭比边框\", False, \"6986591867999621668\", \"1193772\", \"3500630cec44ef4028af9ea40b325c99\", [])\n    粉色闪粉             = EffectMeta(\"粉色闪粉\", False, \"6858953149974057486\", \"881784\", \"e0294c868dacfeb1f83c406d4e21e121\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    粉黄渐变             = EffectMeta(\"粉黄渐变\", False, \"7008413208721494559\", \"1365502\", \"36f666ce547c61a8bbe9fc634cb79b69\", [])\n    精灵闪粉             = EffectMeta(\"精灵闪粉\", False, \"6967274435963261476\", \"1146790\", \"4a4d26ee6fcb0a71ee15666b8864498f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    精细锐化             = EffectMeta(\"精细锐化\", False, \"7250368600911909413\", \"16609879\", \"df34b01300ddefbfd8b04bee900ae432\", [\n                              EffectParam(\"effects_adjust_blur\", 0.120, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.080, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认12%, 0% ~ 100%\n    effects_adjust_sharpen: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认8%, 0% ~ 100%\n    effects_adjust_range: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\"\"\"\n    糖果纸               = EffectMeta(\"糖果纸\", False, \"6782100631638249998\", \"634217\", \"37ae35224ded86cd0e5d5bc2d58e3cc8\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    紫色波纹             = EffectMeta(\"紫色波纹\", False, \"6987321998036701704\", \"1195758\", \"4e80d6d461e093799fa7ce721d7dbd89\", [])\n    紫色负片             = EffectMeta(\"紫色负片\", False, \"6915313694884762125\", \"1007834\", \"a21c94f366e16f2aa8bd9e491ec226c5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    紫雾                 = EffectMeta(\"紫雾\", False, \"6886335679681270279\", \"948716\", \"bf106ce53d50ff0a7ebabe323a69b097\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    繁星点点             = EffectMeta(\"繁星点点\", False, \"6839577027939406344\", \"768166\", \"5342526311c51bc957c5abc25b2f5280\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    红晕                 = EffectMeta(\"红晕\", False, \"7011032152380805640\", \"1373928\", \"70d59f036e08cfdaad5ff191d8db7b00\", [])\n    纵向开幕             = EffectMeta(\"纵向开幕\", False, \"6876338988437737997\", \"931824\", \"d75e138469226782f6d918983725d700\", [])\n    纵向模糊             = EffectMeta(\"纵向模糊\", False, \"6716684911840858628\", \"634137\", \"ad65a8717a75208aaa742e099b91a881\", [\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    纸膜边框_I           = EffectMeta(\"纸膜边框 I\", False, \"6981464043542286879\", \"1181888\", \"d76f129d3e1a3c4a0350a6537c382c13\", [])\n    纸膜边框_II          = EffectMeta(\"纸膜边框 II\", False, \"6981464169736311327\", \"1181886\", \"b95690afb9846aeacdfccd0cb05cef27\", [])\n    纸质撕边             = EffectMeta(\"纸质撕边\", False, \"6843686214025875981\", \"784032\", \"fd5588f68a681b8eba1449a5d0240097\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    纸质边框             = EffectMeta(\"纸质边框\", False, \"6844765419853582856\", \"780656\", \"554d4d330b4d17f0b404e598a66f05c9\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    纸质边框_II          = EffectMeta(\"纸质边框 II\", False, \"6844832937272152589\", \"780658\", \"b3fbce0bfe68298555ab18ed39fc817a\", [])\n    纸醉金迷             = EffectMeta(\"纸醉金迷\", False, \"7050402737174876702\", \"1511534\", \"dcfb9e8703b3ac243e73afdb664c2b2e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.801, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_rotate: 默认80%, 0% ~ 100%\n    effects_adjust_noise: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    细闪                 = EffectMeta(\"细闪\", False, \"6847773569435308558\", \"785536\", \"9f35060cd9e36abab8c5ebb80d8efbf6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    细闪_II              = EffectMeta(\"细闪 II\", False, \"6893002658420888078\", \"959412\", \"186c623a413a10ddbf28bfa0215a55f4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    细闪_III             = EffectMeta(\"细闪 III\", False, \"6963598424113418783\", \"1134290\", \"432b12f72fe1b0f081dc292bc415dbb0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    美式                 = EffectMeta(\"美式\", False, \"6849214832856535560\", \"787752\", \"d3c405c7369854dd009dd63f6a4b2b46\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_sharpen: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认60%, 0% ~ 100%\"\"\"\n    美式_II              = EffectMeta(\"美式 II\", False, \"6843320153900323335\", \"774972\", \"cd7423d39d5a115fc4d5d7f5db43658c\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认60%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    美式_III             = EffectMeta(\"美式 III\", False, \"6843319785522991623\", \"774968\", \"d936f602060a9b010a261e85166b5a14\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认75%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    美式_IV              = EffectMeta(\"美式 IV\", False, \"6850006476472193543\", \"812078\", \"0bddd63da76f2f117140ff240c57daee\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.620, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_sharpen: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认62%, 0% ~ 100%\"\"\"\n    美式_V               = EffectMeta(\"美式 V\", False, \"6849225862588404237\", \"787968\", \"26f287cc23166dc878589197c5800842\", [\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    美漫                 = EffectMeta(\"美漫\", False, \"6981339244547543560\", \"1181360\", \"d17c9fedb83124be5b0f758d90eea0be\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    羽毛                 = EffectMeta(\"羽毛\", False, \"6709706658815152643\", \"634295\", \"135a9b19d3a4d08dfdd5bb1c9eabbfec\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    老照片               = EffectMeta(\"老照片\", False, \"6815764475375784462\", \"703231\", \"140119b43a843a5732e5b4064a58576e\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    老照片_II            = EffectMeta(\"老照片 II\", False, \"6815767788490068494\", \"703233\", \"25921facf51181e20ad0947556517792\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    老照片_III           = EffectMeta(\"老照片 III\", False, \"6813924503148564999\", \"719374\", \"e199463a70a8b3840f248dbc9fac6769\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    老电影               = EffectMeta(\"老电影\", False, \"6706773498506777095\", \"635095\", \"3ffab78abca09b413e5b7178511f903d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    老电影_II            = EffectMeta(\"老电影 II\", False, \"6865921078858879496\", \"898674\", \"62b508cb16fd1c0da7a2989da5bd49fd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    老电视卡顿           = EffectMeta(\"老电视卡顿\", False, \"6706773499052036615\", \"634771\", \"da767092b3d91fa36fae380e90f11cdd\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    聚光灯               = EffectMeta(\"聚光灯\", False, \"6750075966053159427\", \"634081\", \"49c61bf16894adb9926b79d18993c3bd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    聚焦                 = EffectMeta(\"聚焦\", False, \"6710056993287049742\", \"635083\", \"97b20e018b0bdd4ff12025b5358a6e81\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    胡言乱语             = EffectMeta(\"胡言乱语\", False, \"6951364520048595492\", \"1102990\", \"2b069d3c512bb55aa56b9837d6244eee\", [])\n    胶片                 = EffectMeta(\"胶片\", False, \"6708624565657932292\", \"635097\", \"c85a5c6d8841e2e6dd65813cbe60505c\", [\n                              EffectParam(\"effects_adjust_noise\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_noise: 默认20%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    胶片_II              = EffectMeta(\"胶片 II\", False, \"6710090540643258891\", \"635087\", \"9c4e00c766b4fd4f603bed3a720397b9\", [\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.550, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_horizontal_chromatic: 默认55%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认55%, 0% ~ 100%\"\"\"\n    胶片_III             = EffectMeta(\"胶片 III\", False, \"6841053178406900231\", \"773562\", \"2413a56c73f8432072f1cf4429648193\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    胶片_IV              = EffectMeta(\"胶片 IV\", False, \"6896439221179912718\", \"966552\", \"9f76eb0fd12192188a8ace928de37416\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    胶片抖动             = EffectMeta(\"胶片抖动\", False, \"7075213848558440990\", \"1625760\", \"86c6710992682fa9d51b9bfea52d2b47\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_noise: 默认50%, 0% ~ 100%\"\"\"\n    胶片显影             = EffectMeta(\"胶片显影\", False, \"6830336944111620616\", \"744244\", \"a09195689037df58fd23db7f28d3a2b6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_soft: 默认100%, 0% ~ 100%\"\"\"\n    胶片框               = EffectMeta(\"胶片框\", False, \"6974600629268255262\", \"1164161\", \"393b58c3e98a33f92ea16ac611919909\", [])\n    胶片框_II            = EffectMeta(\"胶片框 II\", False, \"6974600475999998477\", \"1164162\", \"fd84488800ef5683555188564886ab76\", [])\n    胶片框_III           = EffectMeta(\"胶片框 III\", False, \"6987714956401578510\", \"1196596\", \"d0169ca7d23e5196df0e4604bcfbe2c1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    胶片漏光             = EffectMeta(\"胶片漏光\", False, \"6815093106841489934\", \"705083\", \"179080155bccbfd7ddf7e37137eb2747\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    胶片漏光_II          = EffectMeta(\"胶片漏光 II\", False, \"6814743838964322829\", \"718872\", \"0a0b12f5a4e442871708fcbf14fdec5d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    胶片连拍             = EffectMeta(\"胶片连拍\", False, \"6994787976613990925\", \"1218011\", \"cb017def5c29fc1af5de0041469d4ff4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    自然                 = EffectMeta(\"自然\", False, \"6843319885339038216\", \"774970\", \"b692892ba55b4cbd18c97704102b9938\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    自然_II              = EffectMeta(\"自然 II\", False, \"6841460795394494990\", \"773090\", \"7196a6d5e3b895f781a453e70abb971a\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    自然_III             = EffectMeta(\"自然 III\", False, \"6843680748856152584\", \"775998\", \"6d80537f452debf98b09f2df79080e37\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    自然_IV              = EffectMeta(\"自然 IV\", False, \"6843680812584407559\", \"776000\", \"29800968f49ad39520d47e999024becb\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    自然_V               = EffectMeta(\"自然 V\", False, \"6843319715499086343\", \"774966\", \"6ff4d109673eb689778b2be2f5af1c3e\", [\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    色差                 = EffectMeta(\"色差\", False, \"6706773498561303044\", \"634059\", \"737c54ea0dcf628cc78714a77eef52a3\", [\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_horizontal_chromatic: 默认60%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    色差开幕             = EffectMeta(\"色差开幕\", False, \"6868546720783929870\", \"904723\", \"fc98a601f63bacc514067ecfa2849137\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.670, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认67%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\"\"\"\n    色差放大             = EffectMeta(\"色差放大\", False, \"6883360769992299016\", \"945036\", \"894bef97217ae4bab59ae710228bdf40\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认33%, 0% ~ 100%\"\"\"\n    色差放射             = EffectMeta(\"色差放射\", False, \"6716422405511713287\", \"634777\", \"e6a7d2cfcb41ea58d450dc08d17828e0\", [\n                              EffectParam(\"effects_adjust_blur\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.550, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认25%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认55%, 0% ~ 100%\"\"\"\n    色差故障             = EffectMeta(\"色差故障\", False, \"6706773498922013191\", \"634773\", \"6ee1a1ab0be0849602a3c983a025c47a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.670, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认67%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    色差故障_II          = EffectMeta(\"色差故障 II\", False, \"6706773498561319428\", \"634769\", \"638565d68ac2845eb2c552497efec3d8\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认75%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    色差星闪             = EffectMeta(\"色差星闪\", False, \"6904921853635072520\", \"982304\", \"c13d9ca825a2adb976c429456af2ead0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认60%, 0% ~ 100%\"\"\"\n    色差默片             = EffectMeta(\"色差默片\", False, \"6719362972239532548\", \"634793\", \"82cc4ec1b530fc13e1af9be9e4b63c4f\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.750, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_noise: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认75%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认75%, 0% ~ 100%\"\"\"\n    节日彩带             = EffectMeta(\"节日彩带\", False, \"6907438556793278983\", \"987446\", \"47ca5466c833a9287af563c9890f8159\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    花火                 = EffectMeta(\"花火\", False, \"6767147410671014407\", \"634223\", \"4e7b79927a6067a2080ce6b61da8faf9\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    花火_II              = EffectMeta(\"花火 II\", False, \"6907051960180937229\", \"986478\", \"8a3f34e4c9650409a8aa6059f8610e14\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    花瓣飘落             = EffectMeta(\"花瓣飘落\", False, \"6796905369932141064\", \"635059\", \"a772c059e7fb8304292e7ebb870e8eb3\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    花瓣飞扬             = EffectMeta(\"花瓣飞扬\", False, \"6796903619762328072\", \"635057\", \"24c3c52fe9d54c8677ee514c0530528c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    荡漾_II              = EffectMeta(\"荡漾 II\", False, \"7140929198763282980\", \"4493526\", \"7a08a3c5aa067e55cd0f638cd3161a1b\", [\n                              EffectParam(\"effects_adjust_range\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.350, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认35%, 0% ~ 100%\n    effects_adjust_intensity: 默认35%, 0% ~ 100%\"\"\"\n    荡秋千               = EffectMeta(\"荡秋千\", False, \"7388040405465436722\", \"73935190\", \"bee293df8d3c2a62e722c60eca82aab3\", [])\n    荧光扫描             = EffectMeta(\"荧光扫描\", False, \"7041474808986472967\", \"1482382\", \"4c6263913593bbf1fc06f01e8c3fcf8b\", [\n                              EffectParam(\"effects_adjust_color\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    荧光爱心             = EffectMeta(\"荧光爱心\", False, \"6792095053360665096\", \"634227\", \"b9b9be20aed7761f81c6757a4428a034\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    荧光线描             = EffectMeta(\"荧光线描\", False, \"6795826477590909454\", \"634945\", \"8f9738a2f4d1a9de9d844dc27c84361a\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    荧光绿               = EffectMeta(\"荧光绿\", False, \"6858138988834722312\", \"875968\", \"7cbaffedca388899dec7c7219592074c\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    荧光蝙蝠             = EffectMeta(\"荧光蝙蝠\", False, \"6886339116561076749\", \"948715\", \"ad61d53ca404616d198bc766e6c64df8\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    荧幕噪点             = EffectMeta(\"荧幕噪点\", False, \"6706773534066086413\", \"634779\", \"f090492c306fe35f917eed1216f14f8c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    荧幕噪点_II          = EffectMeta(\"荧幕噪点 II\", False, \"6803161742789579277\", \"703253\", \"53ff3188476c74715a73aa34f08a1edf\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    萤光                 = EffectMeta(\"萤光\", False, \"6715209844216828420\", \"634107\", \"59a3ea0709d076e3043555a7d5d40945\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    萤光飞舞             = EffectMeta(\"萤光飞舞\", False, \"6877098783209951751\", \"932242\", \"d34177a4c2caf9581e67b0206cf6a919\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    萤火                 = EffectMeta(\"萤火\", False, \"7006265184050221576\", \"1357502\", \"d473ca7fa127312a7651ec1523a6e880\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    落叶                 = EffectMeta(\"落叶\", False, \"6740863535674298888\", \"635043\", \"5e8db93a52a15e7254dc7e1c115c145c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    落樱                 = EffectMeta(\"落樱\", False, \"6924859706661933576\", \"1031296\", \"7372d9708980266944aec9650ccde843\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    蒸汽波               = EffectMeta(\"蒸汽波\", False, \"6719658860539286020\", \"634147\", \"08d620dca82aea6bf5d71d48ba4a6b3d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    蒸汽波投影           = EffectMeta(\"蒸汽波投影\", False, \"6830351103272423949\", \"747926\", \"83c74d3a0dd8f6d11d3cc3063f1eadfa\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    蒸汽波路灯           = EffectMeta(\"蒸汽波路灯\", False, \"6829184472349413895\", \"755808\", \"564a4710d8ece86ade31f9eee89deb01\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    蒸汽腾腾             = EffectMeta(\"蒸汽腾腾\", False, \"6894200076227318286\", \"961482\", \"f852e42917f0ea29be56bbb12891c920\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    蓝光扫描             = EffectMeta(\"蓝光扫描\", False, \"7254126209540297274\", \"17710554\", \"5f9918f9606b3dfbb8e8c8b7b90ca0e3\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认30%, 0% ~ 100%\n    effects_adjust_intensity: 默认30%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认70%, 0% ~ 100%\"\"\"\n    蓝线模糊             = EffectMeta(\"蓝线模糊\", False, \"6920136330563293704\", \"1019968\", \"770dd5360aa3cfc96d97738f62627957\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\"\"\"\n    蓝色负片             = EffectMeta(\"蓝色负片\", False, \"6914996050382033421\", \"1005838\", \"c40c9ca0a5c2ea1a22c54a3dc943b3de\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    蓝色闪电边框         = EffectMeta(\"蓝色闪电边框\", False, \"6989911842575356446\", \"1201878\", \"f69acdd1cea097f4db0bf01ed015559b\", [])\n    蔡国强烟花           = EffectMeta(\"蔡国强烟花\", False, \"7187218013710455354\", \"8311325\", \"045edeb9b6908325a6cc04edda428a8a\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.930, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认93%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    虚化                 = EffectMeta(\"虚化\", False, \"6756397840785740295\", \"634065\", \"5b22f93757ce6807874cc5e1530db8b3\", [\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    蝙蝠Kira             = EffectMeta(\"蝙蝠Kira\", False, \"6888977985697747463\", \"953420\", \"408ee7831b71cbae827138898d26c934\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认60%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认33%, 0% ~ 100%\"\"\"\n    蝴蝶                 = EffectMeta(\"蝴蝶\", False, \"6706773499836404228\", \"634157\", \"559a055318e1a9940281c8eb31954ee9\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    蝴蝶_II              = EffectMeta(\"蝴蝶 II\", False, \"6747586717672280584\", \"634155\", \"014a7aa25087ad6a6bfa14ca6146bedd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    蝴蝶光斑             = EffectMeta(\"蝴蝶光斑\", False, \"6748307256959308299\", \"634183\", \"45377639fc1c0b29cc889f71f6ca2fd0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    蝶舞                 = EffectMeta(\"蝶舞\", False, \"6747946665312784910\", \"634177\", \"b6c530af2bd744d77df4d5b70e3497f8\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    表面模糊             = EffectMeta(\"表面模糊\", False, \"7244073793562350140\", \"15249743\", \"8629e4a00fdb51b73c98842bc7a6f0c5\", [\n                              EffectParam(\"effects_adjust_blur\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认70%, 0% ~ 100%\n    effects_adjust_sharpen: 默认70%, 0% ~ 100%\"\"\"\n    裂开了               = EffectMeta(\"裂开了\", False, \"6944914067702157861\", \"1082654\", \"48084a37dbea8252814a0d96520dcaee\", [])\n    视频分割             = EffectMeta(\"视频分割\", False, \"6729023693739004419\", \"634747\", \"a9338d60042f719860346409954ed387\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.670, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认67%, 0% ~ 100%\"\"\"\n    视频界面             = EffectMeta(\"视频界面\", False, \"6752799091941446147\", \"635135\", \"ecbdf02c28278b4436c1dfaf3b733650\", [])\n    诡异分割             = EffectMeta(\"诡异分割\", False, \"7021800634621891109\", \"1408118\", \"2755d9f7c9b46356a832ef58ef405df7\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.630, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认63%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认70%, 0% ~ 100%\"\"\"\n    负片闪烁             = EffectMeta(\"负片闪烁\", False, \"6863353894152442375\", \"892686\", \"ed476f61f551e99709b62ce8ed922323\", [\n                              EffectParam(\"effects_adjust_speed\", 0.560, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认56%, 0% ~ 100%\"\"\"\n    财富满满             = EffectMeta(\"财富满满\", False, \"6920520407179072007\", \"1020906\", \"e4d25768a4e675f98501b34454a2fb79\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    财富满满_II          = EffectMeta(\"财富满满 II\", False, \"6925663127845474830\", \"1036164\", \"0b9127c39f743a166ea4783b0afd2df1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    赞赞赞               = EffectMeta(\"赞赞赞\", False, \"7057055647472292359\", \"1543072\", \"a927f8d9d6b8fcefd4671cb53455d8d5\", [])\n    蹦迪光               = EffectMeta(\"蹦迪光\", False, \"6716419849544798723\", \"634733\", \"5b3449fa5476bfd93851d0b4cce7b8c9\", [\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认100%, 0% ~ 100%\"\"\"\n    蹦迪彩光             = EffectMeta(\"蹦迪彩光\", False, \"6716450942285255182\", \"634731\", \"355d46c4bff8c9b6286f3324fb6e27b7\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    车窗                 = EffectMeta(\"车窗\", False, \"7012926200767058463\", \"1381596\", \"e16d42dbe728d95e6cdc2585a817a3e2\", [])\n    车窗影               = EffectMeta(\"车窗影\", False, \"6834006887415943694\", \"761222\", \"d37540d91f173eaeef40a3ac6a2de42e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    轻微抖动             = EffectMeta(\"轻微抖动\", False, \"7258208250896585274\", \"18798726\", \"b5235343ec32572db40123246a22fefa\", [\n                              EffectParam(\"effects_adjust_range\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认15%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    轻微放大             = EffectMeta(\"轻微放大\", False, \"6791743223522923021\", \"634077\", \"c09004507723569a3e762494d4ffda7d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\"\"\"\n    边缘glitch           = EffectMeta(\"边缘glitch\", False, \"6777238992816443912\", \"634749\", \"516eb9ef0e22a58d17984712a9301b23\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认75%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\"\"\"\n    边缘加色             = EffectMeta(\"边缘加色\", False, \"6781315516909752844\", \"634757\", \"1d5ac14cba4e6e8559cacd2c37d62c43\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    边缘加色_II          = EffectMeta(\"边缘加色 II\", False, \"6790180635555140109\", \"634755\", \"ff84c6f908752eda1298021c2e382e0f\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    边缘加色_III         = EffectMeta(\"边缘加色 III\", False, \"6901190770473046535\", \"974844\", \"91c834c21a94810977500c0f0f0d406b\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    边缘发光             = EffectMeta(\"边缘发光\", False, \"6769065553207235086\", \"634069\", \"656e16d4aff7d609ff25c2ff8abc156c\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.250, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认25%, 0% ~ 100%\"\"\"\n    边缘荧光             = EffectMeta(\"边缘荧光\", False, \"6903064458008990215\", \"977454\", \"270610eeb2c6810b2cd43743033bebee\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    运动一夏             = EffectMeta(\"运动一夏\", False, \"6984393713208267301\", \"1188619\", \"c78c14c0ce8641f5de8ba5a03f8dce29\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    迪斯科               = EffectMeta(\"迪斯科\", False, \"6756113382840996360\", \"634739\", \"975bfbd37de349a6c2390576a61d243e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    迷幻烟雾             = EffectMeta(\"迷幻烟雾\", False, \"6719661667447214605\", \"634089\", \"d03e2cc41acde9dd8e3eab333c43ba2c\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    迷离                 = EffectMeta(\"迷离\", False, \"6706773549362713095\", \"634721\", \"7c2f3180ded615ee30e6d1a5bafc5392\", [\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认100%, 0% ~ 100%\"\"\"\n    迷雾                 = EffectMeta(\"迷雾\", False, \"6887505634791526926\", \"950488\", \"057c2404619359f8ceec96e20eee0f2f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    逆光对焦             = EffectMeta(\"逆光对焦\", False, \"6992032047959118344\", \"1218244\", \"ff6610f6b575f0038d39736972b8e695\", [\n                              EffectParam(\"effects_adjust_soft\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_soft: 默认70%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认33%, 0% ~ 100%\"\"\"\n    选中框               = EffectMeta(\"选中框\", False, \"6712358020417851917\", \"635081\", \"f65a653528911a459a3011c647b68cf4\", [])\n    邮票边框             = EffectMeta(\"邮票边框\", False, \"7012988323387937293\", \"1382084\", \"f14c0b2288f110621f814c237c5471a6\", [\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认20%, 0% ~ 100%\"\"\"\n    金属背景             = EffectMeta(\"金属背景\", False, \"7044853948456374814\", \"1493772\", \"44ec1abb4102d0886e6cb4e60a80ae72\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.505, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.710, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认100%, 0% ~ 100%\n    effects_adjust_noise: 默认51%, 0% ~ 100%\n    effects_adjust_intensity: 默认71%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    金片                 = EffectMeta(\"金片\", False, \"6771299796058640908\", \"634229\", \"5ff7544cd83c2ec196b1acc8f47bf51c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    金片_II              = EffectMeta(\"金片 II\", False, \"6924589854269379079\", \"1030626\", \"3100003d53722ae2d1e8ca0bde4a1043\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    金片炸开             = EffectMeta(\"金片炸开\", False, \"6899747182816006669\", \"972750\", \"075cfd56ba9a170c62a6ad8150d4845d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    金粉                 = EffectMeta(\"金粉\", False, \"6709706378702754312\", \"631215\", \"0443a82ca7b709b643abaf8da7051cca\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    金粉_II              = EffectMeta(\"金粉 II\", False, \"6774672940651778573\", \"634289\", \"75dc8419d6ebcca570bb85b0daeb883f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    金粉_III             = EffectMeta(\"金粉 III\", False, \"6984393847467938335\", \"1188618\", \"752d69c565983fbed6bb13c3d8542ca7\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    金粉撒落             = EffectMeta(\"金粉撒落\", False, \"6907439016547717646\", \"987445\", \"c84cfe1f31a1a79e5a9b362bc744d3d3\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    金粉旋转             = EffectMeta(\"金粉旋转\", False, \"7033654301050278431\", \"1452336\", \"14fd0f24372acd5be33505ee5759ca11\", [\n                              EffectParam(\"effects_adjust_speed\", 0.336, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认34%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    金粉聚拢             = EffectMeta(\"金粉聚拢\", False, \"6806254339821146637\", \"703245\", \"a4d9c4c3bde58e6aa6db39fcef692108\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    金粉闪闪             = EffectMeta(\"金粉闪闪\", False, \"7034048554318434830\", \"1453820\", \"a552dfa820b5aba27e4f09e3d83b8643\", [\n                              EffectParam(\"effects_adjust_speed\", 0.336, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认34%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    钻光                 = EffectMeta(\"钻光\", False, \"6723824479216079368\", \"634097\", \"c9c730b13ac00e7b8b16af1d882fe31c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    钻石碎片             = EffectMeta(\"钻石碎片\", False, \"7077487066476450340\", \"1639618\", \"7c201b5477a02796bddb330377b7fce7\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_number: 默认50%, 0% ~ 100%\"\"\"\n    镜像                 = EffectMeta(\"镜像\", False, \"6956148985400660517\", \"1115964\", \"0e68989382af0ece7e1e864cc2107c67\", [])\n    镜头变焦             = EffectMeta(\"镜头变焦\", False, \"6868546663607177736\", \"904724\", \"59273e718263fae7a1001c65fe44ad3a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认30%, 0% ~ 100%\"\"\"\n    镭射边框             = EffectMeta(\"镭射边框\", False, \"7041103833056940574\", \"1480896\", \"bfb7e1244b2c158ad9ebb311c33e6463\", [\n                              EffectParam(\"effects_adjust_speed\", 0.336, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认34%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    长虹玻璃             = EffectMeta(\"长虹玻璃\", False, \"6992081595976913416\", \"1235644\", \"2f5917be32e664eef67419212e54cad0\", [\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认0%, 0% ~ 100%\n    effects_adjust_blur: 默认20%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    闪亮登场             = EffectMeta(\"闪亮登场\", False, \"6760547949349966350\", \"634185\", \"a1c096efd5f98b438ab0f762bea9c41a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    闪亮登场_II          = EffectMeta(\"闪亮登场 II\", False, \"6891946116212855303\", \"958186\", \"0a249f3cd35bef5ca846a49680248812\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    闪光灯_Ⅰ             = EffectMeta(\"闪光灯 Ⅰ\", False, \"6844432942563856904\", \"777760\", \"c602afac7537de506bb822c37e9f2191\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    闪光震动             = EffectMeta(\"闪光震动\", False, \"7260437169389441597\", \"19279654\", \"17416edf590446330a683c9eb4f5c9e3\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.580, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_range: 默认58%, 0% ~ 100%\n    effects_adjust_background_animation: 默认0%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    闪动                 = EffectMeta(\"闪动\", False, \"6717639344577843725\", \"634725\", \"0bc9ee34335ba4f9d75e4a2b21f4d6e5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    闪动光斑             = EffectMeta(\"闪动光斑\", False, \"6753169731617821191\", \"634181\", \"d7c42c303074967c0cad7c7a6adfe896\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    闪屏                 = EffectMeta(\"闪屏\", False, \"6758298031608566280\", \"634729\", \"51b2af1e78502e00abb3d47b21a55796\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    闪电                 = EffectMeta(\"闪电\", False, \"6734215409513271820\", \"635069\", \"6191fcf13bfd15e4288a81a174ba0ed8\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    闪白                 = EffectMeta(\"闪白\", False, \"6706773500792672781\", \"634761\", \"f0804cb2cb4e88a036ecf87dcf031cf0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    闪耀星光             = EffectMeta(\"闪耀星光\", False, \"6784346950385799694\", \"634219\", \"93c0a1e7829ec10d8502466ea74846dd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    闪闪                 = EffectMeta(\"闪闪\", False, \"6869625970437919246\", \"909546\", \"29a49337bf58c7a042d7b19b5c8a3262\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    闪闪发光_II          = EffectMeta(\"闪闪发光 II\", False, \"7013264306959553060\", \"1382870\", \"9a723996777d5f56d3802b53c8cc46bb\", [\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认100%, 0% ~ 100%\"\"\"\n    闪黑                 = EffectMeta(\"闪黑\", False, \"6863327462470717960\", \"892171\", \"383b8ace93434f0c5d17689933140422\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    闪黑II               = EffectMeta(\"闪黑II\", False, \"7221377929467400765\", \"12078089\", \"3c25ccac35121fe42e647b119e37a21f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认80%, 0% ~ 100%\n    effects_adjust_intensity: 默认20%, 0% ~ 100%\n    effects_adjust_size: 默认25%, 0% ~ 100%\n    effects_adjust_distortion: 默认40%, 0% ~ 100%\"\"\"\n    闭幕                 = EffectMeta(\"闭幕\", False, \"6725685146323784205\", \"634035\", \"6a59cb9db4036a187d4b1ca3a2cab8f3\", [])\n    闭幕_II              = EffectMeta(\"闭幕 II\", False, \"6729065630013592067\", \"634033\", \"47ad4fe486fe97a4529998d53e5e93b3\", [])\n    随机色块             = EffectMeta(\"随机色块\", False, \"7026674824537707038\", \"1427664\", \"a7e3cf890d40734c1b44172eff546c41\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认20%, 0% ~ 100%\n    effects_adjust_number: 默认30%, 0% ~ 100%\n    effects_adjust_color: 默认60%, 0% ~ 100%\"\"\"\n    随机色块_II          = EffectMeta(\"随机色块 II\", False, \"7030742849134006792\", \"1441868\", \"0d5b2c847554024c4bd5dbaf06d842fb\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认20%, 0% ~ 100%\n    effects_adjust_number: 默认30%, 0% ~ 100%\n    effects_adjust_color: 默认60%, 0% ~ 100%\"\"\"\n    随机裁剪             = EffectMeta(\"随机裁剪\", False, \"6991794787464516127\", \"1206444\", \"348f8137cc25a994e2a676a5639d3bd9\", [\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    隐形人               = EffectMeta(\"隐形人\", False, \"7020318315310486046\", \"1400804\", \"2cf16035b605ce73f4b44bcd650adfb3\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.350, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认35%, 0% ~ 100%\"\"\"\n    隔行扫描             = EffectMeta(\"隔行扫描\", False, \"6976152376457564708\", \"1168118\", \"e8349feb07866b44bbce9c9effa6f51a\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认40%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    雨滴晕开             = EffectMeta(\"雨滴晕开\", False, \"6792488562869670414\", \"635041\", \"2bded973503eaa2ce5644ef44354d90d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    雪窗                 = EffectMeta(\"雪窗\", False, \"7168743948528128548\", \"6431703\", \"823ecc00612b35e63837f9ce6f4f4af5\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认80%, 0% ~ 100%\n    effects_adjust_blur: 默认40%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    雪花                 = EffectMeta(\"雪花\", False, \"7030728702258319909\", \"1441796\", \"aa711f9666bdc3e51ff72de0d7c073a8\", [\n                              EffectParam(\"effects_adjust_speed\", 0.336, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认34%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    雪花冲屏             = EffectMeta(\"雪花冲屏\", False, \"6769435378806952455\", \"634203\", \"2c07239e54041e85518b111b1ad8eb86\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    雪花开幕             = EffectMeta(\"雪花开幕\", False, \"6730429759425090059\", \"634045\", \"8c3a0db33fda83398b66a5a8ab64cc41\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    雪花故障             = EffectMeta(\"雪花故障\", False, \"6847689727261282824\", \"785064\", \"f24f4cebfa22bc28d74c9b30aa17f1a0\", [\n                              EffectParam(\"effects_adjust_range\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.550, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认15%, 0% ~ 100%\n    effects_adjust_noise: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认55%, 0% ~ 100%\"\"\"\n    雪花细闪             = EffectMeta(\"雪花细闪\", False, \"6770604155561054734\", \"634201\", \"3eab18374e64043e209c3deac2bbe56d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    零点解锁             = EffectMeta(\"零点解锁\", False, \"6907054642123772430\", \"6470260\", \"e3628803155db5b9d465c9fbf5db249d\", [\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    雾气                 = EffectMeta(\"雾气\", False, \"6734619830449607171\", \"635049\", \"add061ec46e4f013ed3482a6dc87c9b9\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    雾气_II              = EffectMeta(\"雾气 II\", False, \"6740539818666627588\", \"635045\", \"6e963a8a2e1fd100e7ac3d2f21100a8a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    雾气光线             = EffectMeta(\"雾气光线\", False, \"6715209712129806851\", \"635065\", \"607f77fe518da5a26e7457ea932f5ad7\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    震动                 = EffectMeta(\"震动\", False, \"6761645818723176968\", \"634075\", \"d11532bfbfbd6f9af59026c2c42f2570\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    霓虹投影             = EffectMeta(\"霓虹投影\", False, \"7058961173743407630\", \"1552220\", \"46a3a7dbb114d888726b1cf9a22189c2\", [\n                              EffectParam(\"effects_adjust_soft\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_soft: 默认80%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认80%, 0% ~ 100%\n    effects_adjust_size: 默认30%, 0% ~ 100%\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认40%, 0% ~ 100%\"\"\"\n    霓虹摇摆             = EffectMeta(\"霓虹摇摆\", False, \"6925387220073320974\", \"1034626\", \"f7ce2e949d495d22dab8f6a2b032a9b9\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\"\"\"\n    霓虹灯               = EffectMeta(\"霓虹灯\", False, \"6829182808485794311\", \"742028\", \"35a6f9b3c544b0f97ccbf3fea89e6010\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    预警                 = EffectMeta(\"预警\", False, \"6955083255825568264\", \"1113432\", \"3dfcefd286a1684818c543e17b7d5bc6\", [])\n    颤抖                 = EffectMeta(\"颤抖\", False, \"6863326875649839623\", \"892172\", \"7cb6c1646c43d86a394245e194e3f451\", [\n                              EffectParam(\"effects_adjust_range\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认15%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    飘落花瓣             = EffectMeta(\"飘落花瓣\", False, \"6719658795661791747\", \"634153\", \"c39b069df62f67308de64f86b920dbbd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    飘落闪粉             = EffectMeta(\"飘落闪粉\", False, \"6720029963602366979\", \"634165\", \"517bbcd8e398072ce95c0d9763c4c914\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    飘落闪粉_II          = EffectMeta(\"飘落闪粉 II\", False, \"6720029866504229390\", \"634163\", \"6bd90b0f33d3722d759b0fc2d5ddc9bd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    飘雪                 = EffectMeta(\"飘雪\", False, \"6732360625214722572\", \"635061\", \"8e2909d8fe6a77833f62fccf73630aa7\", [])\n    飘雪_II              = EffectMeta(\"飘雪 II\", False, \"6763531573594690061\", \"635055\", \"e4c07894c4f11edbbc580486b50f4b8e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    飞速计算             = EffectMeta(\"飞速计算\", False, \"6951364383477862948\", \"1102992\", \"b08f9e05c86b2e980444d336d9db7427\", [])\n    马赛克               = EffectMeta(\"马赛克\", False, \"6770564289074827784\", \"639477\", \"c9f3bf5b93d53bdc514be0d9c480fcf0\", [\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    高光瞬间             = EffectMeta(\"高光瞬间\", False, \"6955021144156017188\", \"1113136\", \"7e50ea3473876ee7bbc0f9105cc6c65e\", [])\n    魅力光束             = EffectMeta(\"魅力光束\", False, \"6814668066882851335\", \"705071\", \"8c305048985cc4cd8236d08b716c2d16\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    魔法                 = EffectMeta(\"魔法\", False, \"7000199435372204580\", \"1232490\", \"98296a4bc028cef2bb3b06ffbb490faf\", [\n                              EffectParam(\"effects_adjust_speed\", 0.336, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.802, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认34%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    魔法变身             = EffectMeta(\"魔法变身\", False, \"6964608751231832613\", \"1136674\", \"4ec729c610f93a85cd08b9a9474aaecf\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    魔法边框             = EffectMeta(\"魔法边框\", False, \"7020407234798555655\", \"1401520\", \"f995faa8d65405b92637e54d90d4d9a9\", [])\n    魔法边框_II          = EffectMeta(\"魔法边框 II\", False, \"7021795690149843463\", \"1408090\", \"6f23fdea097c9e547d934e0c134cd0c9\", [])\n    鱼眼                 = EffectMeta(\"鱼眼\", False, \"6867722963865571854\", \"901430\", \"d72c01234779615a8d370861bcc305c9\", [\n                              EffectParam(\"effects_adjust_distortion\", 0.770, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_distortion: 默认77%, 0% ~ 100%\"\"\"\n    黄蓝星芒             = EffectMeta(\"黄蓝星芒\", False, \"7000312634574639653\", \"1232996\", \"290f59cb09438e3b8681f055a9b4a967\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    黑白VHS              = EffectMeta(\"黑白VHS\", False, \"7021795095900852772\", \"1408072\", \"1a53630780dee01e236cff7233d35d01\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.530, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.430, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认53%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认43%, 0% ~ 100%\"\"\"\n    黑白三格             = EffectMeta(\"黑白三格\", False, \"6719657002571665934\", \"635017\", \"e4022fb9e226f41f58c33d255c647eed\", [])\n    黑白漫画             = EffectMeta(\"黑白漫画\", False, \"6795826673993388551\", \"634953\", \"f5e6a157bc591221429ad4d0af4764b3\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    黑白漫画_II          = EffectMeta(\"黑白漫画 II\", False, \"6904876576735760904\", \"981864\", \"93e7188b36f51f6aa660cf2cf44569b7\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    黑白线描             = EffectMeta(\"黑白线描\", False, \"6795430643154031111\", \"634951\", \"68c0d3c64a515b7cdc99b2cf0b6914fe\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    黑线故障             = EffectMeta(\"黑线故障\", False, \"6970572741116170788\", \"1155300\", \"fc0dca637063d415f92ab45869d9f8d5\", [])\n    黑羽毛               = EffectMeta(\"黑羽毛\", False, \"6716441529084285454\", \"634151\", \"9be9c2290cd7574af6d47f1779e4519a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    黑羽毛_II            = EffectMeta(\"黑羽毛 II\", False, \"6751257389422350860\", \"634149\", \"8e20f4ef27e5d50c3839eabcde5c292d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    黑胶边框             = EffectMeta(\"黑胶边框\", False, \"6865958778265670151\", \"898866\", \"30c353317f11b9a5dcdf5b64708955ad\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    黑色噪点             = EffectMeta(\"黑色噪点\", False, \"6888561214125773326\", \"952514\", \"e7baebcf969437d4d5cdb607578bbf89\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    黑色老电视           = EffectMeta(\"黑色老电视\", False, \"6738276072246219277\", \"635123\", \"87b8b83900d283b06e02ead6f09111e5\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n\n    # 付费特效\n    _2024边框            = EffectMeta(\"2024边框\", True, \"7322367359967040037\", \"39438457\", \"7f263af44c94942d8f67e6709926c0d1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认35%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认30%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    _2025气球泡泡        = EffectMeta(\"2025气球泡泡\", True, \"7460731559339889203\", \"101569751\", \"8ad80a536f2d8737e637efa7242e9ae5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    _360运镜             = EffectMeta(\"360运镜\", True, \"7430701460901335603\", \"87985393\", \"d2035259bb0765fc66c528e0e13a2f70\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    _360运镜_II          = EffectMeta(\"360运镜 II\", True, \"7434813086239822387\", \"89453641\", \"ac75ef9cb8e94297b5b2537e9e9f9edf\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.100, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_luminance: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认10%, 0% ~ 100%\"\"\"\n    _3D春联              = EffectMeta(\"3D春联\", True, \"7460821768022790665\", \"101633856\", \"27c92fc147dc89671963d45d58f1e28b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    _3D环绕              = EffectMeta(\"3D环绕\", True, \"7452986473306919433\", \"98657836\", \"96d33ee88360e17d149d61e53f71bcf3\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    _3D环绕屏            = EffectMeta(\"3D环绕屏\", True, \"7436018394580652553\", \"89952914\", \"58f30d06f89764104d9917d3e0b0a99e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.320, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认32%, 0% ~ 100%\"\"\"\n    Bling飘落            = EffectMeta(\"Bling飘落\", True, \"7306819369571455515\", \"31620429\", \"5425c855f5395166464034278b51afc2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.450, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认15%, 0% ~ 100%\n    effects_adjust_number: 默认45%, 0% ~ 100%\n    effects_adjust_background_animation: 默认80%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认90%, 0% ~ 100%\n    effects_adjust_filter: 默认45%, 0% ~ 100%\"\"\"\n    C300                 = EffectMeta(\"C300\", True, \"7226241938649780793\", \"12744891\", \"3bc3db89a7d77cbeb49d42a9566b575f\", [\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.550, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_soft: 默认40%, 0% ~ 100%\n    effects_adjust_noise: 默认20%, 0% ~ 100%\n    effects_adjust_sharpen: 默认30%, 0% ~ 100%\n    effects_adjust_blur: 默认55%, 0% ~ 100%\"\"\"\n    IXUS                 = EffectMeta(\"IXUS\", True, \"7213660933942415930\", \"11068675\", \"b2f6c464c625ce63c950298627775e0f\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.440, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.150, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认44%, 0% ~ 100%\n    effects_adjust_texture: 默认30%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    sticker: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认15%, 0% ~ 100%\"\"\"\n    Ins描边              = EffectMeta(\"Ins描边\", True, \"7265936765175730744\", \"20434943\", \"402b239494189ae949538500b9fd6e50\", [\n                              EffectParam(\"effects_adjust_color\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.460, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认10%, 0% ~ 100%\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认30%, 0% ~ 100%\n    effects_adjust_speed: 默认70%, 0% ~ 100%\n    effects_adjust_range: 默认70%, 0% ~ 100%\n    effects_adjust_size: 默认80%, 0% ~ 100%\n    effects_adjust_number: 默认46%, 0% ~ 100%\n    effects_adjust_filter: 默认30%, 0% ~ 100%\"\"\"\n    PASSION              = EffectMeta(\"PASSION\", True, \"7431776147530060314\", \"88353245\", \"2c1f3566c8ff77f26376e2ab562ad200\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\"\"\"\n    S形运镜              = EffectMeta(\"S形运镜\", True, \"7291263159023702584\", \"26271784\", \"1a137ba40b56a10809190892c3850f95\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\n    effects_adjust_rotate: 默认70%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认40%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    W830                 = EffectMeta(\"W830\", True, \"7226197862529372731\", \"12732403\", \"ba2c08dcaa80a24edf38a0d69ccff56d\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_blur: 默认70%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_sharpen: 默认80%, 0% ~ 100%\"\"\"\n    一刀两断             = EffectMeta(\"一刀两断\", True, \"7290460914174661177\", \"26002592\", \"6e66b782a69fa0c2712deeaf50d4aadf\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\n    effects_adjust_size: 默认40%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\"\"\"\n    丁达尔旋焦           = EffectMeta(\"丁达尔旋焦\", True, \"7361697260960223759\", \"59474165\", \"815fe4564516ccb104dd6a12682e6ac2\", [\n                              EffectParam(\"effects_adjust_texture\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认80%, 0% ~ 100%\n    effects_adjust_filter: 默认40%, 0% ~ 100%\n    effects_adjust_luminance: 默认55%, 0% ~ 100%\n    effects_adjust_blur: 默认40%, 0% ~ 100%\n    effects_adjust_range: 默认40%, 0% ~ 100%\n    effects_adjust_background_animation: 默认30%, 0% ~ 100%\n    effects_adjust_size: 默认100%, 0% ~ 100%\"\"\"\n    万向镜像             = EffectMeta(\"万向镜像\", True, \"7414043485189181978\", \"82495223\", \"bf6fa505f4a9e6ebe3685196fa35e3e5\", [\n                              EffectParam(\"effects_adjust_rotate\", 0.120, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_rotate: 默认12%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认10%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    三段式黑白           = EffectMeta(\"三段式黑白\", True, \"7447351620641231369\", \"96240756\", \"5a47368758c30ac86bead6f943caf268\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    上上签               = EffectMeta(\"上上签\", True, \"7460731920393966118\", \"101569718\", \"aae06fb86ca90f297dfb0556002f0399\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    下雨涟漪             = EffectMeta(\"下雨涟漪\", True, \"7434055685576331786\", \"89190637\", \"611edf767c951b6f31a2b4de0457db2d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    丝印涂鸦             = EffectMeta(\"丝印涂鸦\", True, \"7270068054040515131\", \"21210786\", \"0e342cccb5b95dafc6e99f0f51603b04\", [\n                              EffectParam(\"effects_adjust_color\", 0.200, 0.050, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.570, 0.000, 0.810),\n                              EffectParam(\"effects_adjust_speed\", 0.430, 0.000, 0.700),\n                              EffectParam(\"effects_adjust_texture\", 0.120, 0.000, 0.500)])\n    \"\"\"参数:\n    effects_adjust_color: 默认20%, 5% ~ 100%\n    effects_adjust_intensity: 默认25%, 0% ~ 100%\n    effects_adjust_size: 默认60%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\n    effects_adjust_number: 默认57%, 0% ~ 81%\n    effects_adjust_speed: 默认43%, 0% ~ 70%\n    effects_adjust_texture: 默认12%, 0% ~ 50%\"\"\"\n    丝滑运镜             = EffectMeta(\"丝滑运镜\", True, \"7382145257607008809\", \"71888371\", \"9333197e30c47f6aab8eb7b6bba7bd38\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.667, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认67%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\"\"\"\n    两屏分割             = EffectMeta(\"两屏分割\", True, \"7069602912057430558\", \"1594946\", \"2eba26aa15c0e44d2c258ce63a38d243\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.100, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_range: 默认10%, 0% ~ 100%\"\"\"\n    中轴旋转             = EffectMeta(\"中轴旋转\", True, \"7224407224460775994\", \"12495253\", \"16c94e8b38c2d306c11b0d4cfb63dec9\", [\n                              EffectParam(\"effects_adjust_speed\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认60%, 0% ~ 100%\n    effects_adjust_rotate: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\"\"\"\n    二次元运镜           = EffectMeta(\"二次元运镜\", True, \"7450031573962887731\", \"97484026\", \"eb9c27e0a6820a5378dfa46271a05a1f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    云朵绵绵             = EffectMeta(\"云朵绵绵\", True, \"7287143540033851964\", \"24962948\", \"66f0d5b98e5c703d596c6d5053b36a73\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    sticker: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    五星好评             = EffectMeta(\"五星好评\", True, \"7176947440350663223\", \"7318779\", \"68b302b2bea8da7aea6db5fef3da518e\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    交叉震闪             = EffectMeta(\"交叉震闪\", True, \"7291135461697786423\", \"26216294\", \"c008c7e122d99b87378292db514ed6cb\", [\n                              EffectParam(\"effects_adjust_color\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认30%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认30%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_distortion: 默认30%, 0% ~ 100%\"\"\"\n    仙女棒II             = EffectMeta(\"仙女棒II\", True, \"7447044441463853594\", \"96135790\", \"d8d59ffd556810c73d7a65dd0aa8f523\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    低保真               = EffectMeta(\"低保真\", True, \"7300933146923504178\", \"29478846\", \"afb3e21fb90b170bc431dd088513b2ed\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_noise: 默认70%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认75%, 0% ~ 100%\n    effects_adjust_sharpen: 默认20%, 0% ~ 100%\"\"\"\n    侧移模糊             = EffectMeta(\"侧移模糊\", True, \"7291553469180154423\", \"26353150\", \"7b7baa2a697b1d7a119902167b7bff4a\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认40%, 0% ~ 100%\n    effects_adjust_speed: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认30%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    信号干扰             = EffectMeta(\"信号干扰\", True, \"7447351621220045338\", \"96240755\", \"49f0a32af467b676f274dc00af78e562\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    倒带                 = EffectMeta(\"倒带\", True, \"7358381380687893027\", \"57670397\", \"7eb38d3b30ae8e18748fcd3ed726aab2\", [\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认80%, 0% ~ 100%\n    effects_adjust_blur: 默认20%, 0% ~ 100%\"\"\"\n    倒计时               = EffectMeta(\"倒计时\", True, \"7042501782014005773\", \"1485906\", \"06c20494725c2b5873c5aac7fcea3205\", [])\n    倒计时_III           = EffectMeta(\"倒计时 III\", True, \"7454157863196299802\", \"99131598\", \"7bd1e54fade0f0560b63b4ec3f76a6f4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.375, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认38%, 0% ~ 100%\"\"\"\n    倒计时II             = EffectMeta(\"倒计时II\", True, \"7449262940080837129\", \"97150131\", \"f3a56b61e8254873d4d29dd2651db54c\", [])\n    假日闪闪_Ⅱ           = EffectMeta(\"假日闪闪 Ⅱ\", True, \"7173558602580365838\", \"6940703\", \"ee3bcd824b78992d1a9ee05289f724bb\", [\n                              EffectParam(\"effects_adjust_size\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.650, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认55%, 0% ~ 100%\n    effects_adjust_number: 默认15%, 0% ~ 100%\n    effects_adjust_rotate: 默认25%, 0% ~ 100%\n    effects_adjust_intensity: 默认40%, 0% ~ 100%\n    effects_adjust_filter: 默认65%, 0% ~ 100%\"\"\"\n    像素屏闪             = EffectMeta(\"像素屏闪\", True, \"7242581780866273850\", \"14975389\", \"a0b46f005c19589d83743e33b8f7f05c\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\n    effects_adjust_background_animation: 默认65%, 0% ~ 100%\n    effects_adjust_color: 默认15%, 0% ~ 100%\n    effects_adjust_soft: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    像素扫描             = EffectMeta(\"像素扫描\", True, \"7345080472545792521\", \"50297398\", \"a37ca96c39e545f397ec3ff4c6c9a5b1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\n    effects_adjust_color: 默认30%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    像素拉伸_II          = EffectMeta(\"像素拉伸 II\", True, \"7355396055397044790\", \"56071748\", \"867a13e17bbab1fff0bc2344a41c4559\", [\n                              EffectParam(\"effects_adjust_rotate\", 0.600, 0.200, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_rotate: 默认60%, 20% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\"\"\"\n    像素排序             = EffectMeta(\"像素排序\", True, \"7223659432419267132\", \"12385973\", \"24e9de1fa2c77ec26045f7113fdc79f9\", [\n                              EffectParam(\"effects_adjust_number\", 0.940, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_number: 默认94%, 0% ~ 100%\n    effects_adjust_luminance: 默认70%, 0% ~ 100%\n    effects_adjust_noise: 默认0%, 0% ~ 100%\"\"\"\n    像素故障             = EffectMeta(\"像素故障\", True, \"7239557281942082107\", \"14523597\", \"964299673ae36eb232abec3452f50624\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_texture: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认40%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    像素爱心             = EffectMeta(\"像素爱心\", True, \"7058961362550002212\", \"1552218\", \"cbf62902df7101761116f28616cbbabc\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    像素震闪             = EffectMeta(\"像素震闪\", True, \"7349147660290363944\", \"52648474\", \"5eed2819a04cfccafd198a00309ad2a0\", [\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    光线扫描             = EffectMeta(\"光线扫描\", True, \"7047492648587760142\", \"1500914\", \"815e6f766c2f5ba2e6b6eea27844b2d1\", [\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.380, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.150, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\n    effects_adjust_color: 默认38%, 0% ~ 100%\n    effects_adjust_distortion: 默认70%, 0% ~ 100%\n    effects_adjust_number: 默认15%, 0% ~ 100%\"\"\"\n    光线拖影             = EffectMeta(\"光线拖影\", True, \"7254547939194835515\", \"17852396\", \"1cee833d647541e86d24bb2f7b7635ea\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.340, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认70%, 0% ~ 100%\n    effects_adjust_blur: 默认30%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认34%, 0% ~ 100%\"\"\"\n    光谱扫描             = EffectMeta(\"光谱扫描\", True, \"7257452387160298021\", \"18636946\", \"67af44e346aa4efe5ff5bbac34c5075d\", [\n                              EffectParam(\"effects_adjust_background_animation\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.614, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.642, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认61%, 0% ~ 100%\n    effects_adjust_luminance: 默认64%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认33%, 0% ~ 100%\"\"\"\n    兔个好彩头           = EffectMeta(\"兔个好彩头\", True, \"7187795247936574013\", \"8571129\", \"6a1d2107432c6421a9a3cbfe6a755f04\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认60%, 0% ~ 100%\"\"\"\n    兔兔碎闪             = EffectMeta(\"兔兔碎闪\", True, \"7184326422612152887\", \"8343041\", \"375943efb400de1f186e9701e1f4b8e6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_number: 默认80%, 0% ~ 100%\n    effects_adjust_size: 默认60%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    兔年红包             = EffectMeta(\"兔年红包\", True, \"7189544276651414073\", \"8617039\", \"24bafcb7079b6e420ed621476a35f362\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    全屏烟花             = EffectMeta(\"全屏烟花\", True, \"7447044440864068105\", \"96135791\", \"710288319a7e330e78098399b22c7728\", [])\n    全屏祝福语           = EffectMeta(\"全屏祝福语\", True, \"7460729732548530698\", \"101570129\", \"02d2e5b7be8c0f7d663486c9f64f7414\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    全息扫描             = EffectMeta(\"全息扫描\", True, \"7246746366108504636\", \"15772481\", \"7de6cab0dbc13aaaa9ccc25e1259c3da\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.260, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.570, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认75%, 0% ~ 100%\n    effects_adjust_blur: 默认26%, 0% ~ 100%\n    effects_adjust_background_animation: 默认40%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认57%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认60%, 0% ~ 100%\"\"\"\n    分区显色             = EffectMeta(\"分区显色\", True, \"7447351620641231397\", \"96240753\", \"bd5c91e7d8ab94c0133cba9a839470f4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    分屏漏光             = EffectMeta(\"分屏漏光\", True, \"7276332732051886649\", \"22335555\", \"b19b89d0f4daf5988d2f390e5364077e\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"sticker\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    sticker: 默认0%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    剪纸窗花             = EffectMeta(\"剪纸窗花\", True, \"7458222774511735305\", \"100675645\", \"29b8ba1503b6a8eb59522c8b21b753e1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    动态侦测             = EffectMeta(\"动态侦测\", True, \"7348407437877056009\", \"52247519\", \"930511ab136c4558e75177f724587990\", [\n                              EffectParam(\"effects_adjust_speed\", 55.000, 0.000, 100.000),\n                              EffectParam(\"effects_adjust_number\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.980, 0.000, 1.000),\n                              EffectParam(\"sticker\", 0.240, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.100, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认5500%, 0% ~ 10000%\n    effects_adjust_number: 默认70%, 0% ~ 100%\n    effects_adjust_color: 默认98%, 0% ~ 100%\n    sticker: 默认24%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认20%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_texture: 默认20%, 0% ~ 100%\n    effects_adjust_size: 默认10%, 0% ~ 100%\"\"\"\n    动态格               = EffectMeta(\"动态格\", True, \"7065593660921877028\", \"1570398\", \"eb35001e4b8d3d9e2c7b797578d1e97c\", [\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    动感光束             = EffectMeta(\"动感光束\", True, \"7162091309375689223\", \"5779099\", \"89af4a6484b09943dd5ce0313b6f3300\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.581, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.398, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认58%, 0% ~ 100%\n    effects_adjust_range: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认80%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认40%, 0% ~ 100%\"\"\"\n    动感变焦             = EffectMeta(\"动感变焦\", True, \"7338707315987583488\", \"47239575\", \"a36edfb925cbfa69a86a5bdd53f7237f\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    动感扫光             = EffectMeta(\"动感扫光\", True, \"7345724656642429452\", \"50636467\", \"8df52caeaddcd571a2b6bb325b7209ae\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_size: 默认25%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\n    effects_adjust_color: 默认10%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认30%, 0% ~ 100%\"\"\"\n    动感推镜             = EffectMeta(\"动感推镜\", True, \"7330964667252085248\", \"43472640\", \"f482dc307814b8b0697bbf9aa678b5e8\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    动感竖线             = EffectMeta(\"动感竖线\", True, \"7339899789795922468\", \"47905484\", \"798630fbe18ab78b9a751a48341aed8b\", [\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.210, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认21%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_soft: 默认40%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\"\"\"\n    动感运镜             = EffectMeta(\"动感运镜\", True, \"7340866533943415308\", \"48296868\", \"e258bc9e064d90c2b65ec5fed2320885\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    十字模糊             = EffectMeta(\"十字模糊\", True, \"7156060838334304775\", \"5508159\", \"1855e87e914fb04b0aae6a4e8bfe8eb0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认100%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认0%, 0% ~ 100%\n    effects_adjust_blur: 默认40%, 0% ~ 100%\"\"\"\n    十字爆闪             = EffectMeta(\"十字爆闪\", True, \"7291868496558821915\", \"26443872\", \"04a1a4ff3dec382e6c2b00586ceb301a\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认33%, 0% ~ 100%\n    effects_adjust_luminance: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认33%, 0% ~ 100%\"\"\"\n    单向移动             = EffectMeta(\"单向移动\", True, \"7221408305871065661\", \"12087461\", \"1efa77e2563de9f51ecf4c8639a995bc\", [\n                              EffectParam(\"effects_adjust_speed\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.490, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认80%, 0% ~ 100%\n    effects_adjust_rotate: 默认49%, 0% ~ 100%\"\"\"\n    单彩渐变             = EffectMeta(\"单彩渐变\", True, \"7296751848508101158\", \"28007443\", \"bb064dadbd40eda875b9a632d07c4e3f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认60%, 0% ~ 100%\n    effects_adjust_rotate: 默认90%, 0% ~ 100%\n    effects_adjust_filter: 默认10%, 0% ~ 100%\n    effects_adjust_intensity: 默认30%, 0% ~ 100%\n    effects_adjust_luminance: 默认70%, 0% ~ 100%\"\"\"\n    单色填充             = EffectMeta(\"单色填充\", True, \"7128329164314120717\", \"3956309\", \"7647e2c7607c75922abb4cd232e83dff\", [\n                              EffectParam(\"effects_adjust_range\", 0.760, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.360, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认76%, 0% ~ 100%\n    effects_adjust_color: 默认36%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    卡机                 = EffectMeta(\"卡机\", True, \"7046676785693463071\", \"1498082\", \"ea84ea931c93434b86263b92aabbadd4\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    卡通渲染             = EffectMeta(\"卡通渲染\", True, \"7358012370125328937\", \"57459941\", \"a0b8524e28d2e4cb243ae5c6a0448fb1\", [\n                              EffectParam(\"effects_adjust_size\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认30%, 0% ~ 100%\n    effects_adjust_blur: 默认40%, 0% ~ 100%\n    effects_adjust_color: 默认90%, 0% ~ 100%\n    effects_adjust_filter: 默认75%, 0% ~ 100%\n    effects_adjust_range: 默认30%, 0% ~ 100%\"\"\"\n    卷轴打开             = EffectMeta(\"卷轴打开\", True, \"7460778048531468809\", \"101601751\", \"c46d2acf47c8fc4a53f671c9e8ab1f0b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    厚卡纸               = EffectMeta(\"厚卡纸\", True, \"7460821872972665381\", \"101633890\", \"88ccfab321b305013a9d1726faa2c55c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    原相机拉近           = EffectMeta(\"原相机拉近\", True, \"7400658188275552804\", \"78211648\", \"fb068afb4095572e738a13599a8a95f6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.318, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.780, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认32%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认78%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    原相机滤镜           = EffectMeta(\"原相机滤镜\", True, \"7436273714724868646\", \"90036897\", \"ce1631792d44856de5c592b5915cf796\", [\n                              EffectParam(\"effects_adjust_speed\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认20%, 0% ~ 100%\"\"\"\n    原相机缩放           = EffectMeta(\"原相机缩放\", True, \"7436273714724868634\", \"90036894\", \"0df47b4b88ed4bf2468491698c35e21d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    双重辉光             = EffectMeta(\"双重辉光\", True, \"7408494348532191807\", \"80799118\", \"cc39c639f79823193a72fb2af2510b41\", [\n                              EffectParam(\"effects_adjust_range\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认30%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认30%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认70%, 0% ~ 100%\n    effects_adjust_blur: 默认80%, 0% ~ 100%\n    effects_adjust_luminance: 默认70%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\"\"\"\n    发光_II              = EffectMeta(\"发光 II\", True, \"7347959501246435850\", \"51997290\", \"7ea9db818289cf323dc4eff20e79a23f\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    发光HDR              = EffectMeta(\"发光HDR\", True, \"7265989852099777061\", \"20444395\", \"013d2a977c61215ad11af89fb35ea160\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.150, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认45%, 0% ~ 100%\n    effects_adjust_sharpen: 默认70%, 0% ~ 100%\n    effects_adjust_background_animation: 默认90%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认15%, 0% ~ 100%\"\"\"\n    取景器               = EffectMeta(\"取景器\", True, \"7145432172021682725\", \"4694121\", \"76868b9a58758e29212eb76abe18eef2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.336, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.802, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认34%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    变焦烟花             = EffectMeta(\"变焦烟花\", True, \"7445177785401741874\", \"95320464\", \"be0a829782f17e209e1192f25347e784\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    变色狙击             = EffectMeta(\"变色狙击\", True, \"7146096867544142367\", \"5418579\", \"f4876e6aa0a710888c0dded6dd35879c\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    变色闪光             = EffectMeta(\"变色闪光\", True, \"7257436414965453368\", \"18628864\", \"3f06e59c32f2e12dd4b63686844a0121\", [\n                              EffectParam(\"effects_adjust_range\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.850, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认65%, 0% ~ 100%\n    effects_adjust_size: 默认25%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_luminance: 默认70%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认80%, 0% ~ 100%\n    effects_adjust_intensity: 默认90%, 0% ~ 100%\n    effects_adjust_blur: 默认85%, 0% ~ 100%\"\"\"\n    变速推镜             = EffectMeta(\"变速推镜\", True, \"7338347637009027618\", \"47074578\", \"81bb946b8dfe47610a322d7f2d2496d9\", [\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 2.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 2.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 2.000),\n                              EffectParam(\"effects_adjust_range\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 200%\n    effects_adjust_background_animation: 默认100%, 0% ~ 200%\n    effects_adjust_luminance: 默认100%, 0% ~ 200%\n    effects_adjust_range: 默认70%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    变速推镜II           = EffectMeta(\"变速推镜II\", True, \"7349154305045172736\", \"53195413\", \"5b71a4a5390f261a4e400c0dd2e31d0f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认70%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认40%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    可爱圣诞             = EffectMeta(\"可爱圣诞\", True, \"7449596462645645851\", \"97260688\", \"f670d3c8ddc82f751f03376f08b09885\", [])\n    可爱涂鸦             = EffectMeta(\"可爱涂鸦\", True, \"7267137261697765943\", \"20662139\", \"3b8f6203dfedcd2ff5d17ff6ac6bef78\", [\n                              EffectParam(\"sticker\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.180, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    sticker: 默认40%, 0% ~ 100%\n    effects_adjust_number: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认18%, 0% ~ 100%\n    effects_adjust_speed: 默认30%, 0% ~ 100%\"\"\"\n    吓到失魂             = EffectMeta(\"吓到失魂\", True, \"7149057547792552456\", \"4884447\", \"2ce39d4b185862a94ebaf6d9ca871b96\", [\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.707, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.100, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认71%, 0% ~ 100%\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_blur: 默认10%, 0% ~ 100%\"\"\"\n    哈哈镜               = EffectMeta(\"哈哈镜\", True, \"7461830381428281893\", \"101947466\", \"9e2e04882505dca562eeab6dcf200f8a\", [])\n    噪点屏闪             = EffectMeta(\"噪点屏闪\", True, \"7425529107548475955\", \"86397729\", \"c7eb0a537b7ec9317a0f4f5912fc95eb\", [\n                              EffectParam(\"effects_adjust_speed\", 0.091, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认9%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_noise: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    噪片映射             = EffectMeta(\"噪片映射\", True, \"7130233403898597902\", \"4002845\", \"e974f7b6381909e805e37d72c955ab1f\", [\n                              EffectParam(\"effects_adjust_noise\", 0.343, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_noise: 默认34%, 0% ~ 100%\n    effects_adjust_size: 默认10%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    圆形分屏             = EffectMeta(\"圆形分屏\", True, \"7298664552793641522\", \"28683046\", \"3674e65bf11eb5b60c9ebcb4f7591dbd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.100, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认10%, 0% ~ 100%\"\"\"\n    圆形烟花             = EffectMeta(\"圆形烟花\", True, \"7444470107008406066\", \"95041383\", \"b2b498726f30b8dd06294896cdfba566\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    圆形监控             = EffectMeta(\"圆形监控\", True, \"7405798478032409125\", \"79985522\", \"5487531876f19bc15620efc82dc648e7\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认30%, 0% ~ 100%\n    effects_adjust_size: 默认40%, 0% ~ 100%\n    effects_adjust_noise: 默认80%, 0% ~ 100%\n    effects_adjust_range: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    圣诞CD               = EffectMeta(\"圣诞CD\", True, \"7447044441430299173\", \"96135792\", \"4198b6fa3293c7f12dc0bbc4873420c5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    圣诞Kira             = EffectMeta(\"圣诞Kira\", True, \"7445177785401741850\", \"95320466\", \"6e2013b11ab5a18c0084a6795bd6cc2f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    圣诞日记             = EffectMeta(\"圣诞日记\", True, \"7308639868085604901\", \"32448752\", \"360c82d08c822cecb16e79b201768177\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.780, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_size: 默认78%, 0% ~ 100%\n    effects_adjust_filter: 默认10%, 0% ~ 100%\n    effects_adjust_speed: 默认20%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    圣诞明信片           = EffectMeta(\"圣诞明信片\", True, \"7444470107041960485\", \"95041382\", \"f3e9fa3f91efcdec4d9521e800da3b98\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    圣诞边框             = EffectMeta(\"圣诞边框\", True, \"7446622476928307762\", \"95912239\", \"67f5d6ad7ae49110f1fbb5fe49b0f412\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.003, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认0%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    圣诞限定             = EffectMeta(\"圣诞限定\", True, \"7448898555621675529\", \"97032429\", \"a170baca7a422904e3482c6d72b8d5dd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认0%, 0% ~ 100%\"\"\"\n    复古半调             = EffectMeta(\"复古半调\", True, \"7406210463857381925\", \"80123254\", \"e298eec847f6bd958611ce434786745d\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    复古彩虹             = EffectMeta(\"复古彩虹\", True, \"7269735872445026877\", \"21148898\", \"75886bbc57543881343141e58e0c3871\", [\n                              EffectParam(\"effects_adjust_size\", 0.720, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 0.800),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.900, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认72%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 80%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_texture: 默认90%, 0% ~ 100%\"\"\"\n    复古拼贴             = EffectMeta(\"复古拼贴\", True, \"7264510800415429177\", \"20159886\", \"8628c4e9455115f3c9fac5411de3241e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.440, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认60%, 0% ~ 100%\n    effects_adjust_filter: 默认60%, 0% ~ 100%\n    effects_adjust_texture: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认10%, 0% ~ 100%\n    effects_adjust_intensity: 默认44%, 0% ~ 100%\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\"\"\"\n    复古撕纸             = EffectMeta(\"复古撕纸\", True, \"7406211198057714203\", \"80123827\", \"0a64aeaaafa89349b0b22f65042178bf\", [])\n    复古电视             = EffectMeta(\"复古电视\", True, \"7406209423548355081\", \"80122613\", \"f4def18f6cc20d9e7f52e9b4aedf17f3\", [])\n    复古电视机           = EffectMeta(\"复古电视机\", True, \"7447044440859873802\", \"96135789\", \"548f22047b7f7a55884c3b5efa25039d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    复古紫调             = EffectMeta(\"复古紫调\", True, \"7273707462107075130\", \"21870120\", \"eb8220e91369535e0cd5a471fd98b2a2\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.340, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.380, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.260, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.560, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认34%, 0% ~ 100%\n    effects_adjust_sharpen: 默认38%, 0% ~ 100%\n    effects_adjust_intensity: 默认26%, 0% ~ 100%\n    effects_adjust_filter: 默认56%, 0% ~ 100%\"\"\"\n    复古红调             = EffectMeta(\"复古红调\", True, \"7170897764744696356\", \"7308411\", \"2a96e0c8e739c577b3f3860bad1d0c0a\", [\n                              EffectParam(\"effects_adjust_size\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认80%, 0% ~ 100%\n    effects_adjust_number: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认80%, 0% ~ 100%\n    effects_adjust_sharpen: 默认70%, 0% ~ 100%\"\"\"\n    复古辉光             = EffectMeta(\"复古辉光\", True, \"7439255870900277811\", \"92005922\", \"d0e35be65f4fae73654b72609bc01edc\", [])\n    复古边框             = EffectMeta(\"复古边框\", True, \"7436273714729062938\", \"90036896\", \"62ce0da2496c633476e7fc2f11a22578\", [\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    复古连拍             = EffectMeta(\"复古连拍\", True, \"7078198448045953572\", \"1644374\", \"154f59ff4dd71886d96aa36391656a64\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.160, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_noise: 默认16%, 0% ~ 100%\"\"\"\n    复古闪闪             = EffectMeta(\"复古闪闪\", True, \"7039549945338139150\", \"1475376\", \"bd1494bd893e3e113ef7ca922f2db8a5\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_number: 默认30%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    复古频闪             = EffectMeta(\"复古频闪\", True, \"7343141676828856844\", \"49278125\", \"83e65027b467568dbc6dd666658e07d8\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.850, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认85%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\n    effects_adjust_distortion: 默认30%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    大字祝福             = EffectMeta(\"大字祝福\", True, \"7460730608377926195\", \"101569841\", \"c1e66f467f49c72e96c416b90246e72f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    大爆竹               = EffectMeta(\"大爆竹\", True, \"7460441486266470938\", \"101483768\", \"0369cd7b627d9abd3a67d561f4dba61d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    失焦CCD              = EffectMeta(\"失焦CCD\", True, \"7189438884340568633\", \"8556597\", \"e08db3117c2c608d3c1ea94129ff6b27\", [\n                              EffectParam(\"effects_adjust_blur\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认30%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_soft: 默认30%, 0% ~ 100%\n    effects_adjust_luminance: 默认40%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\"\"\"\n    失焦光斑             = EffectMeta(\"失焦光斑\", True, \"7280121081208246845\", \"23238701\", \"01947e259c3fa9990faa6c58345af775\", [\n                              EffectParam(\"effects_adjust_size\", 0.120, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.850, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.340, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认12%, 0% ~ 100%\n    effects_adjust_number: 默认85%, 0% ~ 100%\n    effects_adjust_filter: 默认30%, 0% ~ 100%\n    effects_adjust_speed: 默认34%, 0% ~ 100%\"\"\"\n    夸张信号             = EffectMeta(\"夸张信号\", True, \"7447351620645425691\", \"96240758\", \"887f0d435a6721395ac38d90bcd1bfec\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    定格祝福             = EffectMeta(\"定格祝福\", True, \"7321603111791890982\", \"39287043\", \"6ec72c24a543383a74db927a3022e5c1\", [\n                              EffectParam(\"effects_adjust_color\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认55%, 0% ~ 100%\n    effects_adjust_filter: 默认20%, 0% ~ 100%\n    effects_adjust_speed: 默认70%, 0% ~ 100%\"\"\"\n    实况开幕             = EffectMeta(\"实况开幕\", True, \"7367289783153857024\", \"63011918\", \"58a0d76b10a23a76f1d7834f097e888a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认30%, 0% ~ 100%\"\"\"\n    密码解锁             = EffectMeta(\"密码解锁\", True, \"7398180847427260963\", \"77292235\", \"08292b54063b060925b648edafb79afd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.560, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认20%, 0% ~ 100%\n    effects_adjust_size: 默认56%, 0% ~ 100%\n    effects_adjust_intensity: 默认10%, 0% ~ 100%\n    effects_adjust_luminance: 默认20%, 0% ~ 100%\n    effects_adjust_blur: 默认60%, 0% ~ 100%\"\"\"\n    对焦DV               = EffectMeta(\"对焦DV\", True, \"7195792007309038117\", \"9034919\", \"e9646eb7d4a371f41bd5e3c151f65589\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认40%, 0% ~ 100%\n    effects_adjust_blur: 默认20%, 0% ~ 100%\n    effects_adjust_sharpen: 默认45%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认20%, 0% ~ 100%\"\"\"\n    局部推镜             = EffectMeta(\"局部推镜\", True, \"7301528497577529906\", \"29684830\", \"a607e28c273a94691df816231b0d5f3c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认40%, 0% ~ 100%\n    effects_adjust_distortion: 默认30%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    局部色彩             = EffectMeta(\"局部色彩\", True, \"7041515097927193125\", \"1482682\", \"5a629b9f88febe47a6c99a5113c02d06\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    居中闪切             = EffectMeta(\"居中闪切\", True, \"7273800436128158264\", \"21899077\", \"aa9b2f9a5fc0d35455795069117748c6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_noise: 默认0%, 0% ~ 100%\"\"\"\n    屏幕律动             = EffectMeta(\"屏幕律动\", True, \"7119437097697546782\", \"3529421\", \"0736478f60e481067bdeadeb1c620e00\", [\n                              EffectParam(\"effects_adjust_speed\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认60%, 0% ~ 100%\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认33%, 0% ~ 100%\"\"\"\n    幻动光斑             = EffectMeta(\"幻动光斑\", True, \"7337641482376974883\", \"46674042\", \"5ee226902be5ac3294d53fb015b428d8\", [\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_size: 默认30%, 0% ~ 100%\"\"\"\n    幻彩故障             = EffectMeta(\"幻彩故障\", True, \"6912383907191067149\", \"1005744\", \"76f90178a99f63e7c95869f597c568cd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    幻影_I               = EffectMeta(\"幻影 I\", True, \"7212904257043829307\", \"10969387\", \"6699feabadc4f59732b8087620fc95a6\", [\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    幻觉_II              = EffectMeta(\"幻觉 II\", True, \"7429260401365226021\", \"87569749\", \"3060aba349dbdf58c4a44c06843c8ad3\", [\n                              EffectParam(\"effects_adjust_speed\", 0.120, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.050, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认12%, 0% ~ 100%\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认25%, 0% ~ 100%\n    effects_adjust_soft: 默认5%, 0% ~ 100%\"\"\"\n    广告运镜             = EffectMeta(\"广告运镜\", True, \"7435897594078827034\", \"89895356\", \"6003cb85205bfa86f67ffa3a7e8a8b6d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    弯曲故障             = EffectMeta(\"弯曲故障\", True, \"7403295225700946441\", \"79148302\", \"46b05fc90d596733bf661ec54a35c88c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.699, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.250, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_distortion: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认20%, 0% ~ 100%\n    effects_adjust_texture: 默认20%, 0% ~ 100%\n    effects_adjust_intensity: 默认20%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_range: 默认25%, 0% ~ 100%\"\"\"\n    弹动摇镜             = EffectMeta(\"弹动摇镜\", True, \"7332839146907505215\", \"44400476\", \"79ba3b0f0b1687e56a7514a0301e6af0\", [\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认50%, 0% ~ 100%\"\"\"\n    弹动旋入             = EffectMeta(\"弹动旋入\", True, \"7377307494097359371\", \"69256604\", \"cc9bb0039ebba34a0951ff9c9b8118c4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\"\"\"\n    弹性闪动             = EffectMeta(\"弹性闪动\", True, \"7161280260435087885\", \"5718993\", \"a852817db39ecb51dd2217523a53a032\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_distortion: 默认30%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_range: 默认45%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\"\"\"\n    弹震运镜             = EffectMeta(\"弹震运镜\", True, \"7392137368624435752\", \"75492745\", \"80e4086c6478ade8690a96c80d2e549e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.667, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认67%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    彩光幻影             = EffectMeta(\"彩光幻影\", True, \"7429623957759726107\", \"87673618\", \"722df70196f3b1e98da6dda3c6184a37\", [\n                              EffectParam(\"effects_adjust_speed\", 0.474, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.714, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.667, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认47%, 0% ~ 100%\n    effects_adjust_luminance: 默认71%, 0% ~ 100%\n    effects_adjust_distortion: 默认67%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\"\"\"\n    彩光摇晃             = EffectMeta(\"彩光摇晃\", True, \"7359557508014281268\", \"58342723\", \"b5ec6622597ef93c0ec5c983c2da730b\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认40%, 0% ~ 100%\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\"\"\"\n    彩光频闪             = EffectMeta(\"彩光频闪\", True, \"7221126479793361465\", \"12061167\", \"41afdc49bdf68220c2a01997091e5cf5\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.850, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.260, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认40%, 0% ~ 100%\n    effects_adjust_blur: 默认85%, 0% ~ 100%\n    effects_adjust_color: 默认26%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    彩带飘落             = EffectMeta(\"彩带飘落\", True, \"7460732448666554889\", \"101569557\", \"ab1fd30d61d7eb0b5a17a9a91f1a59a9\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    彩色像素             = EffectMeta(\"彩色像素\", True, \"7254126716489044538\", \"17710540\", \"8073d46c5c3b46cee867e6a3c0f86154\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.270, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认40%, 0% ~ 100%\n    effects_adjust_blur: 默认15%, 0% ~ 100%\n    effects_adjust_background_animation: 默认30%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认70%, 0% ~ 100%\n    effects_adjust_number: 默认70%, 0% ~ 100%\n    effects_adjust_size: 默认27%, 0% ~ 100%\"\"\"\n    彩色流光_I           = EffectMeta(\"彩色流光 I\", True, \"7246400747665887802\", \"15698169\", \"77ec3549e15d944b01992551e3e0c35e\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.590, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认30%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认59%, 0% ~ 100%\n    effects_adjust_rotate: 默认70%, 0% ~ 100%\n    effects_adjust_distortion: 默认0%, 0% ~ 100%\"\"\"\n    彩色流光_II          = EffectMeta(\"彩色流光 II\", True, \"7251502652549239354\", \"16940779\", \"eb006a9670d27e811c07bd7b689bbd99\", [\n                              EffectParam(\"effects_adjust_size\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.030, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认30%, 0% ~ 100%\n    effects_adjust_luminance: 默认40%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认3%, 0% ~ 100%\n    effects_adjust_blur: 默认65%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\"\"\"\n    彩色流光_III         = EffectMeta(\"彩色流光 III\", True, \"7246410407399658043\", \"15699849\", \"c605c345e8bfc8d98d054f577d31dc55\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认60%, 0% ~ 100%\n    effects_adjust_range: 默认20%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认60%, 0% ~ 100%\"\"\"\n    彩色火焰             = EffectMeta(\"彩色火焰\", True, \"6966855040380178981\", \"1142428\", \"dc42fa8bd976690e7b99d72532400a54\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    彩色珠滴             = EffectMeta(\"彩色珠滴\", True, \"7223201236621726264\", \"12323189\", \"68bfe7d647af605724dbff1911ad05f6\", [\n                              EffectParam(\"effects_adjust_number\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.260, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_number: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认30%, 0% ~ 100%\n    effects_adjust_speed: 默认40%, 0% ~ 100%\n    effects_adjust_background_animation: 默认90%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认26%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    彩色电光             = EffectMeta(\"彩色电光\", True, \"7275262942348579389\", \"22296923\", \"4486aefcbd511057cafcdcbc13e4f057\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.680, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认68%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\"\"\"\n    彩色碎彩             = EffectMeta(\"彩色碎彩\", True, \"7181402247824151099\", \"7743725\", \"4638f92e49b284396403035e0d9f543f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认60%, 0% ~ 100%\"\"\"\n    彩色碎片             = EffectMeta(\"彩色碎片\", True, \"7101592529811804679\", \"2148348\", \"48d0dd4f0d70a5d8c6b4846792068335\", [\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    sticker: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认20%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    彩色碎片_II          = EffectMeta(\"彩色碎片 II\", True, \"7104546559747953166\", \"2483800\", \"0a021da140d56312adf53a90ea3780e5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认20%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_noise: 默认20%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\"\"\"\n    彩色碎闪             = EffectMeta(\"彩色碎闪\", True, \"7446672733347254796\", \"95964975\", \"b5a00d871b742cbb145d598df80f8a1d\", [\n                              EffectParam(\"effects_adjust_number\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.660, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.250, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_number: 默认45%, 0% ~ 100%\n    effects_adjust_intensity: 默认66%, 0% ~ 100%\n    effects_adjust_size: 默认65%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_speed: 默认25%, 0% ~ 100%\"\"\"\n    彩色闪烁             = EffectMeta(\"彩色闪烁\", True, \"7222939637260489274\", \"12297327\", \"c6596eb98732614cf8a13a639cfde78c\", [\n                              EffectParam(\"effects_adjust_color\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认55%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_sharpen: 默认15%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    彩色雪花             = EffectMeta(\"彩色雪花\", True, \"7001001281166774792\", \"1235380\", \"510005a5c6cffd42ad6eb21b2a056aef\", [\n                              EffectParam(\"effects_adjust_color\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.660, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认75%, 0% ~ 100%\n    effects_adjust_number: 默认66%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认35%, 0% ~ 100%\n    effects_adjust_background_animation: 默认80%, 0% ~ 100%\"\"\"\n    彩虹光影             = EffectMeta(\"彩虹光影\", True, \"7377004728208593447\", \"69089511\", \"122551eb93dd49877b59586f7d66d42f\", [\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.660, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认40%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\n    effects_adjust_size: 默认66%, 0% ~ 100%\n    effects_adjust_filter: 默认60%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    彩虹棱镜             = EffectMeta(\"彩虹棱镜\", True, \"7195867446429880889\", \"9053951\", \"c96f1eba3950dc1bbe134a216ef4a6bb\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_range: 默认40%, 0% ~ 100%\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_luminance: 默认30%, 0% ~ 100%\"\"\"\n    彩虹泛光             = EffectMeta(\"彩虹泛光\", True, \"7195112049876144698\", \"10021925\", \"75a2d417b48815ffec602d06baa28e02\", [\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_number: 默认70%, 0% ~ 100%\n    effects_adjust_range: 默认40%, 0% ~ 100%\"\"\"\n    彩虹闪屏             = EffectMeta(\"彩虹闪屏\", True, \"7343557569589285413\", \"49499805\", \"aaeae77e0c74db18769bd2cbab83360a\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    彩边频闪             = EffectMeta(\"彩边频闪\", True, \"7352815372510171688\", \"54679766\", \"9ddcc579cbfbb6350934ea279f7f9f50\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_luminance: 默认70%, 0% ~ 100%\n    effects_adjust_range: 默认0%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    微信祝福             = EffectMeta(\"微信祝福\", True, \"7462226660188754458\", \"102188349\", \"64e1e8f4869f8567ce5665f9386979d6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    微震闪黑             = EffectMeta(\"微震闪黑\", True, \"7377721589900513818\", \"69480931\", \"28471a0d035b66c5b99d954cbcbf496a\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认20%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认20%, 0% ~ 100%\n    effects_adjust_speed: 默认30%, 0% ~ 100%\"\"\"\n    心花怒放             = EffectMeta(\"心花怒放\", True, \"7125743711144645127\", \"3803337\", \"2fcb974444894c6e83dd18cb5e01bb1c\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.150, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认80%, 0% ~ 100%\n    effects_adjust_blur: 默认80%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认15%, 0% ~ 100%\"\"\"\n    心花怒放III          = EffectMeta(\"心花怒放III\", True, \"7447067834632376869\", \"96154625\", \"602d96dfa15a42e76945665b3b958ef4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    心跳_II              = EffectMeta(\"心跳 II\", True, \"7140620970934407693\", \"4478025\", \"e940e6b4377d03450c4a53ab618b99f0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.360, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认33%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_distortion: 默认70%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认36%, 0% ~ 100%\"\"\"\n    快速变焦             = EffectMeta(\"快速变焦\", True, \"7281494629483024952\", \"23539651\", \"9af1277c92286811b1890ebe1d682237\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.285, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认30%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认28%, 0% ~ 100%\"\"\"\n    快闪运镜             = EffectMeta(\"快闪运镜\", True, \"7366140711969755674\", \"62251172\", \"4e85edcb46572136ce3343e9cdc197d2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\n    effects_adjust_sharpen: 默认50%, 0% ~ 100%\"\"\"\n    怀旧画质             = EffectMeta(\"怀旧画质\", True, \"7404740894194143763\", \"79669475\", \"1889895837632cf260ba340813aa0dae\", [\n                              EffectParam(\"effects_adjust_texture\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认33%, 0% ~ 100%\n    effects_adjust_noise: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认30%, 0% ~ 100%\n    effects_adjust_color: 默认30%, 0% ~ 100%\"\"\"\n    恐怖涂鸦             = EffectMeta(\"恐怖涂鸦\", True, \"7117142803863310855\", \"5418578\", \"b37405a2ca50f0059744dae5b66ff997\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.220, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.900, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认22%, 0% ~ 100%\n    effects_adjust_filter: 默认90%, 0% ~ 100%\"\"\"\n    恭喜发财_II          = EffectMeta(\"恭喜发财 II\", True, \"7462352353199395366\", \"102289828\", \"28b09e5e04e27962f904b486dff9149f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    慢门拖影             = EffectMeta(\"慢门拖影\", True, \"7317916065353175579\", \"37514660\", \"0bc4e48d7665268ab0f911979fbec195\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.140, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认14%, 0% ~ 100%\"\"\"\n    手写边框             = EffectMeta(\"手写边框\", True, \"7111253709614486029\", \"3099452\", \"1562db9ef86c866cdd951885f1fa26f4\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.260, 0.000, 1.000),\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_noise: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认26%, 0% ~ 100%\n    sticker: 默认100%, 0% ~ 100%\"\"\"\n    手持运镜             = EffectMeta(\"手持运镜\", True, \"7434412782293881382\", \"89308029\", \"e83d397fd1b2c5fc0a3099a9a535c493\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    扭动变焦             = EffectMeta(\"扭动变焦\", True, \"7338354272280515106\", \"47079994\", \"83df4a1fadf009b94e737565720debef\", [\n                              EffectParam(\"effects_adjust_size\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认30%, 0% ~ 100%\n    effects_adjust_distortion: 默认80%, 0% ~ 100%\n    effects_adjust_speed: 默认40%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认30%, 0% ~ 100%\"\"\"\n    扭曲变焦             = EffectMeta(\"扭曲变焦\", True, \"7299392770534281765\", \"28941014\", \"643635cac6435ea88dd6c4a9ae91303f\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认20%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认0%, 0% ~ 100%\"\"\"\n    扭曲模糊             = EffectMeta(\"扭曲模糊\", True, \"7210652297754317367\", \"10694297\", \"a48e3fb197688fb20a959a961ab54383\", [\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.455, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认45%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\"\"\"\n    抖动模糊             = EffectMeta(\"抖动模糊\", True, \"7202812661405323813\", \"9780487\", \"416a2f55681bf6951f25fd3c7336025b\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认20%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认20%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    折叠拜年             = EffectMeta(\"折叠拜年\", True, \"7460466187265118747\", \"101494014\", \"21c575c35d432b01784a501ec8e2b4f0\", [\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_horizontal_shift: 默认33%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\n    effects_adjust_distortion: 默认75%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_range: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认75%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    抽帧拖影             = EffectMeta(\"抽帧拖影\", True, \"7353197719587918362\", \"54890386\", \"000c2f583ffa31993308fef29dea7913\", [\n                              EffectParam(\"effects_adjust_blur\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认75%, 0% ~ 100%\n    effects_adjust_range: 默认80%, 0% ~ 100%\n    effects_adjust_speed: 默认40%, 0% ~ 100%\n    effects_adjust_filter: 默认20%, 0% ~ 100%\"\"\"\n    拉伸旋镜             = EffectMeta(\"拉伸旋镜\", True, \"7359100199437865506\", \"58077796\", \"8dd1ef0645dddee8170190583a1ff51a\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.670, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认40%, 0% ~ 100%\n    effects_adjust_luminance: 默认40%, 0% ~ 100%\n    effects_adjust_distortion: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认67%, 0% ~ 100%\"\"\"\n    拉扯震动             = EffectMeta(\"拉扯震动\", True, \"7240010949938123320\", \"14603013\", \"3fb05905a15df5a9b23f36a940016e4e\", [\n                              EffectParam(\"effects_adjust_distortion\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_distortion: 默认40%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认0%, 0% ~ 100%\"\"\"\n    拉镜开幕             = EffectMeta(\"拉镜开幕\", True, \"7340923698955686451\", \"48340294\", \"5e3de3ba75f157a19687d84df4545bb0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\n    effects_adjust_luminance: 默认70%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认60%, 0% ~ 100%\"\"\"\n    拍照定格             = EffectMeta(\"拍照定格\", True, \"7358795504966177292\", \"57913226\", \"49d70fec464c90afff087cb5854997dd\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\"\"\"\n    拍立得成像           = EffectMeta(\"拍立得成像\", True, \"7450356960953635354\", \"97589170\", \"7dea9b0c5f44ad7eeb623dd11fe65d7b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认35%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    拖影灯光             = EffectMeta(\"拖影灯光\", True, \"7328017754584257075\", \"42028150\", \"3e1f119bd6387d1495fe234cf746e5f8\", [\n                              EffectParam(\"effects_adjust_number\", 0.698, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.336, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_number: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认90%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认34%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    拟截图放大镜         = EffectMeta(\"拟截图放大镜\", True, \"7028458557058060831\", \"1478160\", \"4c962a1294de796686ec24a81a63fe7e\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认0%, 0% ~ 100%\"\"\"\n    推拉跟随             = EffectMeta(\"推拉跟随\", True, \"7380236931893826089\", \"70944695\", \"a6fb9367f095b33fa0047a43c2161e74\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认30%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    推拉运镜             = EffectMeta(\"推拉运镜\", True, \"7382100760630137381\", \"71865342\", \"4b123b8db48a337b91327c2871ca81e0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.656, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.849, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认66%, 0% ~ 100%\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认85%, 0% ~ 100%\"\"\"\n    推近推远             = EffectMeta(\"推近推远\", True, \"7434055685572137523\", \"89190636\", \"946248ab05631310e821625cee0948bf\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    摇摇乐               = EffectMeta(\"摇摇乐\", True, \"7460778162570400265\", \"101601833\", \"e29bb4e98d1ded7bd67ba9a769154c1c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    摇晃叠影             = EffectMeta(\"摇晃叠影\", True, \"7307264899422360073\", \"31866711\", \"2f82ba674fd1d78a14ccb5d384ee3704\", [\n                              EffectParam(\"effects_adjust_speed\", 0.350, 0.100, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认35%, 10% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    摇晃推镜             = EffectMeta(\"摇晃推镜\", True, \"7311585733976789554\", \"33958767\", \"2b806738c3a5e3126a2013cebc2c4913\", [\n                              EffectParam(\"effects_adjust_range\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    摇晃运镜             = EffectMeta(\"摇晃运镜\", True, \"7241063267357954619\", \"14730265\", \"bbc5f812f50b8ea1aadb3fd6ac2dd6f0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认35%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认80%, 0% ~ 100%\n    effects_adjust_size: 默认80%, 0% ~ 100%\"\"\"\n    撕纸定格             = EffectMeta(\"撕纸定格\", True, \"7409923919739621898\", \"81222744\", \"c2740a0fe86e96022287dd56ffe2f926\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    撕纸特写             = EffectMeta(\"撕纸特写\", True, \"7235886675845452349\", \"14014573\", \"c322a330e87f550e0e56c7cef60e6465\", [\n                              EffectParam(\"effects_adjust_speed\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认35%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    播放界面             = EffectMeta(\"播放界面\", True, \"7078880636584333838\", \"1647944\", \"ce6641cd0add17ae5b20286b8a8ff72f\", [\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_noise: 默认20%, 0% ~ 100%\"\"\"\n    放大镜视角           = EffectMeta(\"放大镜视角\", True, \"7447417965676335667\", \"96299420\", \"31143fd0a3da22429e96c2540f45727c\", [\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    故障定格             = EffectMeta(\"故障定格\", True, \"7223652101287580216\", \"12383111\", \"18c3c5143edfcf076876fc70566fd521\", [\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    故障开幕             = EffectMeta(\"故障开幕\", True, \"7338335435959046656\", \"47063402\", \"43a746efc920f57c2b2196446992f4cf\", [\n                              EffectParam(\"effects_adjust_sharpen\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_sharpen: 默认20%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    故障震闪             = EffectMeta(\"故障震闪\", True, \"7315262223213924873\", \"35954280\", \"510623ce6e6c3d77151024fe04eb30dd\", [\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.714, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认71%, 0% ~ 100%\"\"\"\n    散光弹动             = EffectMeta(\"散光弹动\", True, \"7347985147662176807\", \"52013378\", \"1d1f9cc33d051f8c2942cbc86de9f6dd\", [\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认70%, 0% ~ 100%\"\"\"\n    散光闪烁             = EffectMeta(\"散光闪烁\", True, \"7338348256226710016\", \"47894032\", \"6353300f8b3c913e3a1d60321fd2cc21\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    数字矩阵             = EffectMeta(\"数字矩阵\", True, \"7254547645903934010\", \"17852330\", \"933acfd32f6fa44785c5ba93e42cbc59\", [\n                              EffectParam(\"effects_adjust_blur\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认20%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认35%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认33%, 0% ~ 100%\"\"\"\n    数学公式             = EffectMeta(\"数学公式\", True, \"7410350357768835594\", \"81347687\", \"13e4c5b8e054e552385a7d38d0804e5d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    斜线震动             = EffectMeta(\"斜线震动\", True, \"7244511673409606201\", \"15332069\", \"154a4e843d36fe8660f15624a330d2a1\", [\n                              EffectParam(\"effects_adjust_size\", 0.409, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.704, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.339, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认41%, 0% ~ 100%\n    effects_adjust_speed: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认70%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认34%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    新年仙女棒           = EffectMeta(\"新年仙女棒\", True, \"7321990419351343653\", \"39297699\", \"878e6aaf1e19c6de170d4544c22c38b2\", [\n                              EffectParam(\"effects_adjust_size\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.480, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.780, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认45%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认48%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认78%, 0% ~ 100%\n    effects_adjust_range: 默认55%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认0%, 0% ~ 100%\"\"\"\n    新年兔气球           = EffectMeta(\"新年兔气球\", True, \"7189956032095851063\", \"8629763\", \"94b2f47fa2a2115f935f82d5d6c902c0\", [\n                              EffectParam(\"effects_adjust_size\", 0.070, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认7%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    新年投影             = EffectMeta(\"新年投影\", True, \"7448898555617481267\", \"97032431\", \"5222b9d02e697ad7515c61fd87e4e842\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    新年烟花_II          = EffectMeta(\"新年烟花 II\", True, \"7448907790933824010\", \"97041325\", \"09b16968309c9a38e7bf8f26a9eba800\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认75%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    新年的一封信         = EffectMeta(\"新年的一封信\", True, \"7460777723925893683\", \"101601588\", \"d721c0ff24cc69c74ec34dcad63a8603\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    新年礼花             = EffectMeta(\"新年礼花\", True, \"7459729290070856229\", \"101222490\", \"f7cf5ec7f6c00d06238237d05f024477\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_noise: 默认100%, 0% ~ 100%\"\"\"\n    新年边框             = EffectMeta(\"新年边框\", True, \"7460778303587095077\", \"101601911\", \"7e084ec7bf88a95753793f83b4a99be3\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    新春唱片             = EffectMeta(\"新春唱片\", True, \"7458223206294360626\", \"100675597\", \"a1783c8c9c16e73e17e4752fa8e4518b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    新春海报             = EffectMeta(\"新春海报\", True, \"7462629172121178633\", \"102355526\", \"7b0e7ca4d976cf8e9499b58ea1d29d0a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认10%, 0% ~ 100%\n    effects_adjust_size: 默认20%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_noise: 默认100%, 0% ~ 100%\"\"\"\n    新春边框             = EffectMeta(\"新春边框\", True, \"7462628644221882906\", \"102355090\", \"af8866b274da11d7bffb54b8c85b0fc6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    方形模糊             = EffectMeta(\"方形模糊\", True, \"7384032238951731739\", \"72505526\", \"0883434b90fbeaf428ac86a0f87cb4fe\", [\n                              EffectParam(\"effects_adjust_blur\", 0.877, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.450, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认88%, 0% ~ 100%\n    effects_adjust_rotate: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认40%, 0% ~ 100%\n    effects_adjust_color: 默认25%, 0% ~ 100%\n    effects_adjust_luminance: 默认45%, 0% ~ 100%\"\"\"\n    旋焦                 = EffectMeta(\"旋焦\", True, \"7224445669698703909\", \"12505491\", \"c83771425ffddd97d3389480f0f68927\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    旋焦推镜             = EffectMeta(\"旋焦推镜\", True, \"7351324357425107519\", \"53786746\", \"bfffafcc16a30af7d6faaf7816bd09cf\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认0%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    旋转变焦             = EffectMeta(\"旋转变焦\", True, \"7311544501057622555\", \"33928843\", \"46f6856d1b6c40a7d6b7c6da0ae24439\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.150, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认35%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认15%, 0% ~ 100%\n    effects_adjust_filter: 默认15%, 0% ~ 100%\"\"\"\n    旋转回弹             = EffectMeta(\"旋转回弹\", True, \"7343557174058029568\", \"49499445\", \"fcc043da345af8e07d700f1d13d32dd8\", [\n                              EffectParam(\"effects_adjust_speed\", 0.660, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认66%, 0% ~ 100%\n    effects_adjust_rotate: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认70%, 0% ~ 100%\n    effects_adjust_blur: 默认60%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\"\"\"\n    旋转圆球             = EffectMeta(\"旋转圆球\", True, \"7382147305350107700\", \"71888863\", \"bc332eeb63f21a5f48f90221ed709196\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    旋转抖动             = EffectMeta(\"旋转抖动\", True, \"7324315025558999602\", \"40324156\", \"a2df1870a268dac31ac369382c42cf43\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_rotate: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\"\"\"\n    旋转抖动_II          = EffectMeta(\"旋转抖动 II\", True, \"7347956961318539826\", \"51995951\", \"a080eeb37e5c98ff3a510c395463727a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认45%, 0% ~ 100%\n    effects_adjust_blur: 默认70%, 0% ~ 100%\n    effects_adjust_rotate: 默认80%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认80%, 0% ~ 100%\"\"\"\n    日进斗金             = EffectMeta(\"日进斗金\", True, \"7447044440868262426\", \"96135794\", \"9016efc4f35a98308a39209cbeb43f86\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    时尚涂鸦             = EffectMeta(\"时尚涂鸦\", True, \"7395106209155518987\", \"76494544\", \"90de3d14a2ed928534e397c20ddb6213\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    星光变焦             = EffectMeta(\"星光变焦\", True, \"7400757039498007079\", \"78259894\", \"8f4aef341a825f2a61f14caa75f6e377\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_number: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    星星变焦             = EffectMeta(\"星星变焦\", True, \"7169474672671592991\", \"6661731\", \"daedab920b87b778c4f7c672928dbf96\", [\n                              EffectParam(\"effects_adjust_size\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认70%, 0% ~ 100%\"\"\"\n    曝光变焦             = EffectMeta(\"曝光变焦\", True, \"7259639809491079737\", \"19104048\", \"b66ceb2594aee2fd5a1ace6a67e4db0f\", [\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_soft: 默认70%, 0% ~ 100%\n    effects_adjust_luminance: 默认70%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    曝光扩散             = EffectMeta(\"曝光扩散\", True, \"7340136879615906344\", \"47990686\", \"f01002b2853ba8736b02ee943e132421\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认33%, 0% ~ 100%\n    effects_adjust_soft: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认0%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    曲线模糊             = EffectMeta(\"曲线模糊\", True, \"7340622176065688098\", \"48215352\", \"b140dc7906477e7462636a93f5c9fe3c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.366, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.425, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认40%, 0% ~ 100%\n    effects_adjust_luminance: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认35%, 0% ~ 100%\n    effects_adjust_rotate: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认37%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认42%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\"\"\"\n    极速旋转             = EffectMeta(\"极速旋转\", True, \"7343542497651462708\", \"49487569\", \"c6f8519f592a44f74424411e304bd46b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\"\"\"\n    柔和辉光             = EffectMeta(\"柔和辉光\", True, \"7249209626829263421\", \"16279737\", \"805d415643265f3625c1fb9d55822e32\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认55%, 0% ~ 100%\n    effects_adjust_size: 默认25%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    梦幻辉光             = EffectMeta(\"梦幻辉光\", True, \"7355386179308491300\", \"56065875\", \"4f0997824f81dc66309050646ce45bae\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.300, 0.000, 2.000),\n                              EffectParam(\"effects_adjust_blur\", 0.200, 0.000, 1.500)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认55%, 0% ~ 100%\n    effects_adjust_range: 默认65%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_soft: 默认60%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_sharpen: 默认30%, 0% ~ 200%\n    effects_adjust_blur: 默认20%, 0% ~ 150%\"\"\"\n    模拟拍照             = EffectMeta(\"模拟拍照\", True, \"7349154734537708084\", \"53350183\", \"2cb9807eebb8a358bc01e02e4a1d48b9\", [\n                              EffectParam(\"effects_adjust_blur\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认10%, 0% ~ 100%\n    effects_adjust_range: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    横向闪光             = EffectMeta(\"横向闪光\", True, \"7242555690965799483\", \"14965785\", \"0e48afbc4e9aa05505644493cbb7156a\", [\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认20%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    横条开幕             = EffectMeta(\"横条开幕\", True, \"7381442168759521792\", \"71626094\", \"5fa33938a1ad4a956bbac1b3e9805969\", [\n                              EffectParam(\"effects_adjust_speed\", 0.667, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认67%, 0% ~ 100%\n    effects_adjust_luminance: 默认55%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    樱花飘落             = EffectMeta(\"樱花飘落\", True, \"7207718227382637113\", \"10348463\", \"3aec4aa18e09e74760fc39d63c8de932\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认80%, 0% ~ 100%\n    effects_adjust_blur: 默认70%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认10%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    欧根纱II             = EffectMeta(\"欧根纱II\", True, \"7366882927801537024\", \"62749085\", \"aebc534e02b822de7d014b33d5ac103c\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认20%, 0% ~ 100%\n    effects_adjust_range: 默认40%, 0% ~ 100%\n    effects_adjust_filter: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认35%, 0% ~ 100%\n    effects_adjust_number: 默认40%, 0% ~ 100%\"\"\"\n    气球满屏             = EffectMeta(\"气球满屏\", True, \"7449596462649840155\", \"97260689\", \"64a41fdbb893cc4da9a8a58428ab18c2\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    气球花花             = EffectMeta(\"气球花花\", True, \"7231385092193522235\", \"13400477\", \"bd2685c4dba13e0e4e44cd4f0a9ff834\", [\n                              EffectParam(\"effects_adjust_speed\", 0.700, 0.000, 1.000),\n                              EffectParam(\"sticker\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认70%, 0% ~ 100%\n    sticker: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    氛围边框             = EffectMeta(\"氛围边框\", True, \"7308944810646180379\", \"32599175\", \"657d08f76bf5e462d0acb066315d7e32\", [\n                              EffectParam(\"effects_adjust_texture\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.800),\n                              EffectParam(\"effects_adjust_luminance\", 0.100, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_background_animation: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认20%, 0% ~ 100%\n    effects_adjust_speed: 默认100%, 0% ~ 180%\n    effects_adjust_luminance: 默认10%, 0% ~ 100%\"\"\"\n    水光影               = EffectMeta(\"水光影\", True, \"7122736441053942285\", \"3687389\", \"0e8f5cf28c600c62140c2f3666dbe18b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.150, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认60%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_distortion: 默认15%, 0% ~ 100%\"\"\"\n    水波倒影             = EffectMeta(\"水波倒影\", True, \"7313842878847914547\", \"35129784\", \"22ba205844e9fd4ed60701a2c04e213f\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认35%, 0% ~ 100%\n    effects_adjust_size: 默认80%, 0% ~ 100%\n    effects_adjust_distortion: 默认30%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认40%, 0% ~ 100%\"\"\"\n    水波模糊             = EffectMeta(\"水波模糊\", True, \"7047088638932292127\", \"1499278\", \"99199baa75373b4a0faa08aa1c27a37a\", [\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_horizontal_chromatic: 默认70%, 0% ~ 100%\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认60%, 0% ~ 100%\n    effects_adjust_blur: 默认60%, 0% ~ 100%\n    effects_adjust_filter: 默认60%, 0% ~ 100%\"\"\"\n    水波泛起             = EffectMeta(\"水波泛起\", True, \"7250433374882370103\", \"16641371\", \"eda468a5537c139c6355e5abd75004de\", [\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.440, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.460, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认10%, 0% ~ 100%\n    effects_adjust_number: 默认44%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认30%, 0% ~ 100%\n    effects_adjust_speed: 默认46%, 0% ~ 100%\"\"\"\n    水波流动             = EffectMeta(\"水波流动\", True, \"7140273505630687780\", \"4458607\", \"7dd5dbc55d5db8553d233fee727c40ac\", [\n                              EffectParam(\"effects_adjust_distortion\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_distortion: 默认35%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认30%, 0% ~ 100%\n    effects_adjust_number: 默认60%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认65%, 0% ~ 100%\n    effects_adjust_speed: 默认40%, 0% ~ 100%\"\"\"\n    水波负片             = EffectMeta(\"水波负片\", True, \"7436273714733257267\", \"90036895\", \"0e8047d765b4a29f10881df2c8137250\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\"\"\"\n    水滴扩散             = EffectMeta(\"水滴扩散\", True, \"7221508316852130362\", \"12112703\", \"b4690abcdd92f98e3291fdcb74444f5b\", [\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认20%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认0%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认100%, 0% ~ 100%\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认20%, 0% ~ 100%\"\"\"\n    水雾消散             = EffectMeta(\"水雾消散\", True, \"7447371185806905865\", \"96257972\", \"1370588adcfb47e9aab36a8d160c1c6b\", [])\n    油画模糊             = EffectMeta(\"油画模糊\", True, \"7232232188278739493\", \"13537551\", \"f727569dc65078e90f66c9e63d3f9712\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.403, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认80%, 0% ~ 100%\n    effects_adjust_soft: 默认80%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_texture: 默认40%, 0% ~ 100%\"\"\"\n    油纸伞               = EffectMeta(\"油纸伞\", True, \"7460777943397044745\", \"101601695\", \"3dcddee973d2d2f61d3435f403aa7f1c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    法式暖调             = EffectMeta(\"法式暖调\", True, \"7090546987170271780\", \"1747384\", \"f47d4affff8b734ed6c3b9042e81f7a4\", [\n                              EffectParam(\"effects_adjust_size\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认30%, 0% ~ 100%\n    effects_adjust_number: 默认30%, 0% ~ 100%\n    effects_adjust_range: 默认20%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    法式涂鸦             = EffectMeta(\"法式涂鸦\", True, \"7253039682877919803\", \"17395354\", \"2519d69e2fe1fbe64a653b570e786a0c\", [\n                              EffectParam(\"effects_adjust_color\", 0.610, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.661, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.720, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认61%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_number: 默认70%, 0% ~ 100%\n    effects_adjust_size: 默认30%, 0% ~ 100%\n    effects_adjust_texture: 默认66%, 0% ~ 100%\n    effects_adjust_speed: 默认72%, 0% ~ 100%\"\"\"\n    泛光扫描             = EffectMeta(\"泛光扫描\", True, \"7134989289498087967\", \"4217252\", \"5c2fe2a8c4212ee879c16bea71b31e96\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\n    effects_adjust_luminance: 默认75%, 0% ~ 100%\n    effects_adjust_blur: 默认80%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_background_animation: 默认33%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认0%, 0% ~ 100%\"\"\"\n    泛光爆闪             = EffectMeta(\"泛光爆闪\", True, \"7254484266996732476\", \"17821188\", \"7eeab42db5ca9a73186fe4f445b7613c\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认70%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\"\"\"\n    泛光闪动             = EffectMeta(\"泛光闪动\", True, \"7236298986993226301\", \"14080033\", \"82e10f464ddcc64d401a2c6bf5897bf7\", [\n                              EffectParam(\"effects_adjust_blur\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\n    effects_adjust_luminance: 默认35%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    泡泡光斑             = EffectMeta(\"泡泡光斑\", True, \"7320155012036825610\", \"38547267\", \"a8ef5cdbe91838c8092a05a4ee2abf28\", [\n                              EffectParam(\"effects_adjust_size\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认60%, 0% ~ 100%\n    effects_adjust_number: 默认25%, 0% ~ 100%\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认10%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认30%, 0% ~ 100%\n    effects_adjust_soft: 默认30%, 0% ~ 100%\"\"\"\n    泡泡冲屏             = EffectMeta(\"泡泡冲屏\", True, \"7373963046693114387\", \"67466796\", \"51ea34188c370cae7e764a47be73d6a3\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 0.800)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 80%\"\"\"\n    波动清晰             = EffectMeta(\"波动清晰\", True, \"7340620060362281512\", \"48213992\", \"d4009f4188b7c8293760896d5a606f0f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认40%, 0% ~ 100%\n    effects_adjust_range: 默认0%, 0% ~ 100%\n    effects_adjust_distortion: 默认25%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_sharpen: 默认60%, 0% ~ 100%\n    effects_adjust_blur: 默认40%, 0% ~ 100%\"\"\"\n    波浪                 = EffectMeta(\"波浪\", True, \"7159183282632921631\", \"5574521\", \"2d803403ccfbeb2328a811014a55081f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.780, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认90%, 0% ~ 100%\n    effects_adjust_size: 默认35%, 0% ~ 100%\n    effects_adjust_intensity: 默认78%, 0% ~ 100%\n    effects_adjust_blur: 默认60%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认80%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    波浪丝印             = EffectMeta(\"波浪丝印\", True, \"7146406661249307150\", \"4880117\", \"cf32c231aa6b092d39cbcd7c346db5a3\", [\n                              EffectParam(\"effects_adjust_texture\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认80%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认10%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\"\"\"\n    波纹闪动             = EffectMeta(\"波纹闪动\", True, \"7332415663106953769\", \"44222768\", \"7efba1463deb33955572e53ec6bd71be\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\"\"\"\n    流体冲屏             = EffectMeta(\"流体冲屏\", True, \"7221730308251456037\", \"12130415\", \"958711bf2dc7393f39862e7952f6b5c5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认20%, 0% ~ 100%\n    effects_adjust_range: 默认0%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_distortion: 默认40%, 0% ~ 100%\n    effects_adjust_background_animation: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    流体荡开             = EffectMeta(\"流体荡开\", True, \"7322018576125137417\", \"39315461\", \"fa0a0cd4b5446445108d6b4d44466739\", [\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\"\"\"\n    流光碎闪             = EffectMeta(\"流光碎闪\", True, \"7444520354703217178\", \"95069546\", \"a89658eda82aaec1e5de5e4b88e74473\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_color: 默认50%, 0% ~ 100%\"\"\"\n    浪漫烟火             = EffectMeta(\"浪漫烟火\", True, \"7446622476928324146\", \"95912238\", \"cbc7a73ca7cc18db127f52f834615faa\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    海报描边             = EffectMeta(\"海报描边\", True, \"7133104392231719431\", \"4118241\", \"9b6e240d941ae5e77e573cd584265e77\", [\n                              EffectParam(\"effects_adjust_noise\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_noise: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认25%, 0% ~ 100%\n    effects_adjust_number: 默认90%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认60%, 0% ~ 100%\n    effects_adjust_distortion: 默认30%, 0% ~ 100%\"\"\"\n    海鸥DC               = EffectMeta(\"海鸥DC\", True, \"7051853636548170271\", \"1520896\", \"b9dc0143d875fbff52cb26f363f45d14\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_sharpen: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认70%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\"\"\"\n    涂鸦vlog             = EffectMeta(\"涂鸦vlog\", True, \"7418860485258252826\", \"84197797\", \"e54edfaf2aa2a1026478bd4500353185\", [\n                              EffectParam(\"effects_adjust_range\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认0%, 0% ~ 100%\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    涂鸦切开             = EffectMeta(\"涂鸦切开\", True, \"7447351620649619994\", \"96240757\", \"ccb6d40ed8fdddeed18ac38d78463cd9\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    涂鸦抽帧             = EffectMeta(\"涂鸦抽帧\", True, \"7433322731896050212\", \"88922989\", \"f0656a8c99219b086ce5d16260ba0883\", [\n                              EffectParam(\"effects_adjust_speed\", 0.310, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认31%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\"\"\"\n    涂鸦拍立得           = EffectMeta(\"涂鸦拍立得\", True, \"7407715616225759807\", \"80566411\", \"9defe8f1bb3caa8a507c0955dec179ab\", [\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认40%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_background_animation: 默认30%, 0% ~ 100%\"\"\"\n    液态分离             = EffectMeta(\"液态分离\", True, \"7241096748184113701\", \"14742833\", \"c24d9c1a2bf816e305645ee216b75e30\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\"\"\"\n    滑动打开             = EffectMeta(\"滑动打开\", True, \"7462679471246545459\", \"102385218\", \"2f405480a8abd75bf48ca89814dbfc75\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    滑动载入             = EffectMeta(\"滑动载入\", True, \"7442210447844971017\", \"93990334\", \"138bb98faf97cb00a770bc807533a6a7\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.250, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认75%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认25%, 0% ~ 100%\"\"\"\n    漂浮爱心             = EffectMeta(\"漂浮爱心\", True, \"7306769922535723558\", \"31585739\", \"2a84ea537b525994b2803d6a538960e1\", [\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认20%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    漏光闪烁             = EffectMeta(\"漏光闪烁\", True, \"7413730211969110537\", \"82396172\", \"f772864cb56f826fa1cf67a00c4c55ae\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认0%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\"\"\"\n    漫画负片             = EffectMeta(\"漫画负片\", True, \"7435897594070438451\", \"89895358\", \"2e09d555c348a0208d7ea1d7fe2afb67\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    潮流涂鸦             = EffectMeta(\"潮流涂鸦\", True, \"7350240257914180135\", \"53198933\", \"9d284a90662cd32eeb4e8228a379c441\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    瀑布开幕             = EffectMeta(\"瀑布开幕\", True, \"7351689682138174006\", \"54008092\", \"ecd11cf24ab2644cc93ae00f4ad1a7d3\", [\n                              EffectParam(\"effects_adjust_speed\", 0.570, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.260, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认57%, 0% ~ 100%\n    effects_adjust_intensity: 默认65%, 0% ~ 100%\n    effects_adjust_texture: 默认0%, 0% ~ 100%\n    effects_adjust_distortion: 默认26%, 0% ~ 100%\n    effects_adjust_range: 默认25%, 0% ~ 100%\n    effects_adjust_blur: 默认60%, 0% ~ 100%\"\"\"\n    瀑布烟花             = EffectMeta(\"瀑布烟花\", True, \"7462213415688213001\", \"102169716\", \"4ab7dac6b5d24bf7b1c4a91fc64081bf\", [\n                              EffectParam(\"effects_adjust_size\", 0.201, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认20%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认10%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    灵异幻觉             = EffectMeta(\"灵异幻觉\", True, \"7441568585081688585\", \"93705701\", \"38de70b802f171882f6f657e68bd247f\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_distortion: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_noise: 默认50%, 0% ~ 100%\"\"\"\n    灵魂出窍_II          = EffectMeta(\"灵魂出窍 II\", True, \"7299377358283215398\", \"28934274\", \"4e2c3e0ff21146736ddfeea23e6affaa\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.850, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_distortion: 默认60%, 0% ~ 100%\n    effects_adjust_background_animation: 默认85%, 0% ~ 100%\"\"\"\n    灿灿金币             = EffectMeta(\"灿灿金币\", True, \"7304546673215148595\", \"30737307\", \"921df9ceada99345eff8e577b1e10722\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认80%, 0% ~ 100%\n    effects_adjust_soft: 默认80%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_distortion: 默认80%, 0% ~ 100%\"\"\"\n    灿金彩带             = EffectMeta(\"灿金彩带\", True, \"7308706488686481947\", \"33271125\", \"22171c77551d5769904778e3bd386859\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.250, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认40%, 0% ~ 100%\n    effects_adjust_luminance: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认25%, 0% ~ 100%\"\"\"\n    炫光变焦             = EffectMeta(\"炫光变焦\", True, \"7002109122350944781\", \"1237470\", \"8b94fb6f9bacb3eab0d44fc8bad3ddd1\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.753, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认75%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认80%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    炫光扫描             = EffectMeta(\"炫光扫描\", True, \"7367314177741820435\", \"63023070\", \"79582fc0a97afe1fcd4fb0199d07bc7d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.660, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认35%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_distortion: 默认66%, 0% ~ 100%\"\"\"\n    炸蛇烟花             = EffectMeta(\"炸蛇烟花\", True, \"7458204947906040370\", \"100663283\", \"64fa5d34972162e45edfece47484fb67\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    烟火星河             = EffectMeta(\"烟火星河\", True, \"7449596462645645874\", \"97260687\", \"1d22ca051967621891fa576a8a3ba63d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    烟花2024             = EffectMeta(\"烟花2024\", True, \"7308706250731033097\", \"36744068\", \"511dd4d1de63c4839c5912c69711e8cf\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.770, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.625, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认77%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认62%, 0% ~ 100%\"\"\"\n    烟花2025             = EffectMeta(\"烟花2025\", True, \"7446764449010029066\", \"96021458\", \"c4ab56394260f08f331e3c52b4a3095b\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.770, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.625, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认77%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认62%, 0% ~ 100%\"\"\"\n    烟花光晕             = EffectMeta(\"烟花光晕\", True, \"7445177785410130469\", \"95320465\", \"947ce77334e34be7c1747c3d3aab9dc5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    烟花孔明灯           = EffectMeta(\"烟花孔明灯\", True, \"7460733084413989426\", \"101569174\", \"413ec432f79d18bf48e11af240bd6793\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    烟花字               = EffectMeta(\"烟花字\", True, \"7461841371700138505\", \"101960315\", \"e5757b05917d698d8706fdb12754ec70\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    热恋                 = EffectMeta(\"热恋\", True, \"7195020880018149944\", \"9062069\", \"d4a9c95961f95536f3fc44096bf62cbd\", [\n                              EffectParam(\"effects_adjust_size\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.060, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认45%, 0% ~ 100%\n    effects_adjust_number: 默认45%, 0% ~ 100%\n    effects_adjust_rotate: 默认6%, 0% ~ 100%\n    effects_adjust_blur: 默认20%, 0% ~ 100%\n    effects_adjust_range: 默认55%, 0% ~ 100%\n    effects_adjust_sharpen: 默认75%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    爆元宝               = EffectMeta(\"爆元宝\", True, \"7460732612668035634\", \"101569519\", \"c7ab795e6d3821b60e96983ca3d18a73\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    爆闪锐化             = EffectMeta(\"爆闪锐化\", True, \"7222907722486780472\", \"12284805\", \"27d81a8d1668c51e45ebbf291e966d80\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_sharpen: 默认70%, 0% ~ 100%\"\"\"\n    爱心下雪             = EffectMeta(\"爱心下雪\", True, \"7434055685559554569\", \"89190638\", \"04b88d33955445219fe653beffedf9fe\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    爱心扫光             = EffectMeta(\"爱心扫光\", True, \"7322345920962499123\", \"39420273\", \"e1629600c228ebd43732cb589c245168\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认55%, 0% ~ 100%\n    effects_adjust_soft: 默认30%, 0% ~ 100%\n    effects_adjust_rotate: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认40%, 0% ~ 100%\n    effects_adjust_size: 默认80%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\"\"\"\n    爱心气球             = EffectMeta(\"爱心气球\", True, \"7268210584707928634\", \"20875808\", \"ec80143a43c12596d99f8c31043c6a8b\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    爱心烟花Ⅱ            = EffectMeta(\"爱心烟花Ⅱ\", True, \"7451813291430515210\", \"98156320\", \"f961167fa67429d688cab96b4ec7fac9\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    爱心软糖             = EffectMeta(\"爱心软糖\", True, \"7331625316885991970\", \"43774786\", \"0bab0476804fd6ac903bda686f49f3cb\", [\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.900, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认40%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认90%, 0% ~ 100%\"\"\"\n    爱心边框             = EffectMeta(\"爱心边框\", True, \"7065927898833621511\", \"1572505\", \"2f62bf787eb44535dbd128d60f46a29c\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认0%, 0% ~ 100%\"\"\"\n    猫眼迎财             = EffectMeta(\"猫眼迎财\", True, \"7462694218327134758\", \"102389141\", \"452e5072f25c9dc56af900706c06629e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    玫瑰冲屏             = EffectMeta(\"玫瑰冲屏\", True, \"7463437625777459721\", \"102609449\", \"9909e3be25c7759aff9131551e92dc01\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    珠光Kira             = EffectMeta(\"珠光Kira\", True, \"7267917946733728314\", \"20820466\", \"235af2aa5680584b232598629e70b990\", [\n                              EffectParam(\"effects_adjust_number\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_number: 默认60%, 0% ~ 100%\n    effects_adjust_blur: 默认40%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认30%, 0% ~ 100%\n    effects_adjust_range: 默认70%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\"\"\"\n    珠光碎闪             = EffectMeta(\"珠光碎闪\", True, \"7265695554640810533\", \"20405527\", \"325258e144f2c6417f123d48886356de\", [\n                              EffectParam(\"effects_adjust_filter\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.150, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认55%, 0% ~ 100%\n    effects_adjust_range: 默认75%, 0% ~ 100%\n    effects_adjust_size: 默认65%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_blur: 默认15%, 0% ~ 100%\"\"\"\n    琉璃拖影             = EffectMeta(\"琉璃拖影\", True, \"7306400287323853349\", \"31428923\", \"25ac2f9f90dae5ffb9155b73d984d9e4\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认45%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\n    effects_adjust_size: 默认60%, 0% ~ 100%\n    effects_adjust_color: 默认50%, 0% ~ 100%\"\"\"\n    电光描边             = EffectMeta(\"电光描边\", True, \"7106762731960668703\", \"2721906\", \"15153b69c032c89f4087d12ef7a613ca\", [\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认60%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_rotate: 默认50%, 0% ~ 100%\"\"\"\n    电光波动             = EffectMeta(\"电光波动\", True, \"7301674026173207066\", \"29755128\", \"9d7a93ea28f697fbc109cd26377d025d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 2.000),\n                              EffectParam(\"effects_adjust_color\", 0.030, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 200%\n    effects_adjust_color: 默认3%, 0% ~ 100%\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    电光爆闪             = EffectMeta(\"电光爆闪\", True, \"7306471467397419547\", \"31478585\", \"dfc0eec30caaa1a9f992332a85e89a7b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_distortion: 默认0%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    电光爆闪_II          = EffectMeta(\"电光爆闪 II\", True, \"7349150013441708559\", \"52650215\", \"8129e3f83ad6973ba9e6613dbf7afb88\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\"\"\"\n    电光爱心             = EffectMeta(\"电光爱心\", True, \"7106779118867321357\", \"2724410\", \"04883bbcc4ce20a240d5f90dc34db76f\", [\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.419, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.473, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.590, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认42%, 0% ~ 100%\n    effects_adjust_intensity: 默认47%, 0% ~ 100%\n    effects_adjust_color: 默认59%, 0% ~ 100%\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认100%, 0% ~ 100%\"\"\"\n    电子复古粉           = EffectMeta(\"电子复古粉\", True, \"7434001622113456678\", \"89153641\", \"2102c9c79f38d0d3b802a5d09e5b36f0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\"\"\"\n    电音故障             = EffectMeta(\"电音故障\", True, \"7246745900473651773\", \"15772327\", \"fdec63c54f10bf1b8b557a3709196eff\", [\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.580, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认58%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    画质清晰             = EffectMeta(\"画质清晰\", True, \"7348707427165934107\", \"52400085\", \"4a35ff3b8a83d2cec2d56e5651f9e04a\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.800, 0.000, 2.000),\n                              EffectParam(\"effects_adjust_blur\", 0.300, 0.000, 1.500),\n                              EffectParam(\"effects_adjust_range\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认25%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_sharpen: 默认80%, 0% ~ 200%\n    effects_adjust_blur: 默认30%, 0% ~ 150%\n    effects_adjust_range: 默认70%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_soft: 默认33%, 0% ~ 100%\"\"\"\n    白鸽                 = EffectMeta(\"白鸽\", True, \"7382490757770252827\", \"71992424\", \"3e6056fb9e3a1829a666c6680f7eab83\", [\n                              EffectParam(\"effects_adjust_size\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    相机抓拍             = EffectMeta(\"相机抓拍\", True, \"7439935845156524583\", \"92805703\", \"afed56c097d6e532405e1988f89073c7\", [\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.420, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认42%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\"\"\"\n    相机框抖动           = EffectMeta(\"相机框抖动\", True, \"7447351621207462426\", \"96240754\", \"aa7ee627cd11bbf4d8c83ae2b90f59ca\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    相片定格             = EffectMeta(\"相片定格\", True, \"7265526511220822586\", \"20350863\", \"a58e3178d3a498edac53074a3c3a7542\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.850, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认85%, 0% ~ 100%\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    真爱至上             = EffectMeta(\"真爱至上\", True, \"7442582812139459110\", \"94166372\", \"8c1fda9166cda42b28966135c1d4241c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    矩形闪白             = EffectMeta(\"矩形闪白\", True, \"7434412782289703450\", \"89308030\", \"160ed769f0845a0e2d3f8944f14708ae\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    矩阵频闪             = EffectMeta(\"矩阵频闪\", True, \"7306346511367934491\", \"31403673\", \"51763569c67e833ffcb37bd41a365c75\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.880, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认88%, 0% ~ 100%\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\"\"\"\n    碎闪描边             = EffectMeta(\"碎闪描边\", True, \"7130585329609740814\", \"4007289\", \"0962a641c7d9fd4cc075a305752f8c62\", [\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认60%, 0% ~ 100%\n    effects_adjust_color: 默认55%, 0% ~ 100%\n    effects_adjust_intensity: 默认40%, 0% ~ 100%\"\"\"\n    磁带DV               = EffectMeta(\"磁带DV\", True, \"7101987162526061070\", \"2211756\", \"b6b5848678e71593cf7e5112874b9939\", [\n                              EffectParam(\"effects_adjust_sharpen\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_sharpen: 默认30%, 0% ~ 100%\n    effects_adjust_blur: 默认40%, 0% ~ 100%\n    effects_adjust_size: 默认10%, 0% ~ 100%\n    effects_adjust_color: 默认60%, 0% ~ 100%\n    effects_adjust_texture: 默认30%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    磨砂水晶             = EffectMeta(\"磨砂水晶\", True, \"7090380952605561381\", \"1729610\", \"f0d404000523379787cffd6e1db715c2\", [\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.000, -1.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.000, -1.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_vertical_shift: 默认0%, -100% ~ 100%\n    effects_adjust_horizontal_shift: 默认0%, -100% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_rotate: 默认40%, 0% ~ 100%\n    effects_adjust_filter: 默认60%, 0% ~ 100%\"\"\"\n    神龙纳福             = EffectMeta(\"神龙纳福\", True, \"7326853354615738889\", \"41485429\", \"de1999f4a3c33b823bd0ab1b24142adb\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认65%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\"\"\"\n    秋日暖阳             = EffectMeta(\"秋日暖阳\", True, \"7156868464894808583\", \"5408805\", \"43110d01b43a3f0b2c3f9c0600c07c4a\", [\n                              EffectParam(\"effects_adjust_blur\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认45%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\"\"\"\n    移轴模糊             = EffectMeta(\"移轴模糊\", True, \"7246784641384845861\", \"15780929\", \"ceae265f1f63d74a4816f647710885a3\", [\n                              EffectParam(\"effects_adjust_range\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认10%, 0% ~ 100%\n    effects_adjust_blur: 默认70%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\n    effects_adjust_color: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认0%, 0% ~ 100%\"\"\"\n    竖向开幕             = EffectMeta(\"竖向开幕\", True, \"7384009190836015654\", \"72501890\", \"26c9cc8d460d2639fe4fbb0bbd012d41\", [\n                              EffectParam(\"effects_adjust_blur\", 0.877, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认88%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_distortion: 默认60%, 0% ~ 100%\"\"\"\n    竖向闪光             = EffectMeta(\"竖向闪光\", True, \"7212938795702817338\", \"10976911\", \"7529d488cc18a6fb4a7e58c4ef3af378\", [\n                              EffectParam(\"effects_adjust_number\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.690, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_number: 默认80%, 0% ~ 100%\n    effects_adjust_blur: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_range: 默认69%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    竖线屏闪             = EffectMeta(\"竖线屏闪\", True, \"7304258446658900489\", \"30666842\", \"4444e09ba223f94827fb9d423f445a71\", [\n                              EffectParam(\"effects_adjust_luminance\", 1.700, 0.000, 2.300),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 2.500),\n                              EffectParam(\"effects_adjust_range\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 2.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认170%, 0% ~ 230%\n    effects_adjust_blur: 默认100%, 0% ~ 250%\n    effects_adjust_range: 默认15%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 200%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    竖闪模糊             = EffectMeta(\"竖闪模糊\", True, \"7291135061494075960\", \"26216108\", \"795af3daacce29e8d7732e5b2223e01a\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认40%, 0% ~ 100%\"\"\"\n    童趣闪电             = EffectMeta(\"童趣闪电\", True, \"7432192373163037222\", \"88507650\", \"e95493493cc5a1390dc01cabc124640c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    粉雪                 = EffectMeta(\"粉雪\", True, \"7298283919944716827\", \"28549704\", \"273f611315ca2f66e370a3a77de6185c\", [\n                              EffectParam(\"effects_adjust_background_animation\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.950, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认40%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认95%, 0% ~ 100%\"\"\"\n    粒子放射             = EffectMeta(\"粒子放射\", True, \"7217716815407878693\", \"11587497\", \"df109cf35978de6bcc3803f559b14b07\", [\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    精致辉光             = EffectMeta(\"精致辉光\", True, \"7368344527494451712\", \"63611181\", \"e9ce7af10b21bf8ece1dd5ec44d86fc6\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.850, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认40%, 0% ~ 100%\n    effects_adjust_range: 默认85%, 0% ~ 100%\n    effects_adjust_size: 默认40%, 0% ~ 100%\n    effects_adjust_soft: 默认60%, 0% ~ 100%\n    effects_adjust_sharpen: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认40%, 0% ~ 100%\"\"\"\n    紫光夜               = EffectMeta(\"紫光夜\", True, \"7311995150962528778\", \"34184103\", \"1a4c76312950f09d8fd14e68de775bd8\", [\n                              EffectParam(\"effects_adjust_number\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_number: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认40%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_rotate: 默认0%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    繁花棱镜II           = EffectMeta(\"繁花棱镜II\", True, \"7269749564658160184\", \"21150170\", \"f0d388c9f42348261ed7b6871cfaa86e\", [\n                              EffectParam(\"effects_adjust_background_animation\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认80%, 0% ~ 100%\n    effects_adjust_filter: 默认20%, 0% ~ 100%\n    effects_adjust_intensity: 默认80%, 0% ~ 100%\n    effects_adjust_range: 默认40%, 0% ~ 100%\n    effects_adjust_luminance: 默认30%, 0% ~ 100%\"\"\"\n    红包来了             = EffectMeta(\"红包来了\", True, \"7320154851793441307\", \"39289351\", \"d18aae7751367cc8827100959dc62c14\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\"\"\"\n    红包转转             = EffectMeta(\"红包转转\", True, \"7462628759770763826\", \"102355143\", \"1312fcc268256aa4503c0c0f9612c2ba\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    红蓝魔               = EffectMeta(\"红蓝魔\", True, \"7122384870294163975\", \"3675609\", \"0c7634532abc28facafe3afe024a4fbc\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    红边模糊             = EffectMeta(\"红边模糊\", True, \"7130591331700707876\", \"4007601\", \"1afa6bef0ff1ddd4e54c13a2d6a7c59a\", [\n                              EffectParam(\"effects_adjust_blur\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.900, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认90%, 0% ~ 100%\n    effects_adjust_intensity: 默认30%, 0% ~ 100%\n    effects_adjust_filter: 默认90%, 0% ~ 100%\"\"\"\n    纵向跳动             = EffectMeta(\"纵向跳动\", True, \"7190200556692967995\", \"8626971\", \"95f1d0f51d2eb529ac7b97c8cddbfaf1\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认100%, 0% ~ 100%\"\"\"\n    纸质抽帧             = EffectMeta(\"纸质抽帧\", True, \"7416333380603613737\", \"83272772\", \"199b1039f81ea6245c0b470230d05614\", [\n                              EffectParam(\"effects_adjust_speed\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认10%, 0% ~ 100%\n    effects_adjust_size: 默认33%, 0% ~ 100%\n    effects_adjust_noise: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    线光变速             = EffectMeta(\"线光变速\", True, \"7367628113062138377\", \"63209940\", \"87a99c8ae0f9e333abaef48b79a96c90\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认30%, 0% ~ 100%\n    effects_adjust_luminance: 默认40%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认60%, 0% ~ 100%\n    effects_adjust_number: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\"\"\"\n    绚丽光斑             = EffectMeta(\"绚丽光斑\", True, \"7445196904868090419\", \"95331639\", \"4581a1c623e15aa42888ec59ce87b11a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.670, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.750, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认67%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_noise: 默认75%, 0% ~ 100%\"\"\"\n    缤纷                 = EffectMeta(\"缤纷\", True, \"7072268839303516709\", \"1607634\", \"4294dd203d48821ed92525b79f704231\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_number: 默认30%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    缤纷彩带             = EffectMeta(\"缤纷彩带\", True, \"7445177785405936138\", \"95320463\", \"bd76e2e89ffe2698d6e2f15a0e7918fa\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    缤纷烟花             = EffectMeta(\"缤纷烟花\", True, \"7314928469819789850\", \"35751784\", \"34cfcdc1840ef8c1ffab2bd3f0180ded\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.770, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认77%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    缩放运镜             = EffectMeta(\"缩放运镜\", True, \"7436273714733257253\", \"90036898\", \"cd385576887865cd23acfbad20a95440\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    网点丝印             = EffectMeta(\"网点丝印\", True, \"7146404902971904548\", \"4879935\", \"01312233fbabf72f4f66ac30f84c020c\", [\n                              EffectParam(\"effects_adjust_texture\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认60%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_color: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\"\"\"\n    群蝶飞舞             = EffectMeta(\"群蝶飞舞\", True, \"7347658324956942883\", \"51832286\", \"88f861bb14eac5dae7fe7e5df123d718\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\"\"\"\n    羽毛飘落             = EffectMeta(\"羽毛飘落\", True, \"7379513630837969445\", \"70529088\", \"46f1c56f6fcd3a2abd80ff7d701f6eb0\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.260, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.108, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_speed: 默认35%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认26%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认11%, 0% ~ 100%\"\"\"\n    翻转变焦             = EffectMeta(\"翻转变焦\", True, \"7299377095107416585\", \"28934164\", \"fd70d11eb7a16891bd6f7c848455da9c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认35%, 0% ~ 100%\n    effects_adjust_intensity: 默认45%, 0% ~ 100%\n    effects_adjust_blur: 默认70%, 0% ~ 100%\n    effects_adjust_sharpen: 默认40%, 0% ~ 100%\n    effects_adjust_luminance: 默认40%, 0% ~ 100%\"\"\"\n    翻转开幕             = EffectMeta(\"翻转开幕\", True, \"7235902836188385852\", \"14020695\", \"a4d3d6cc942a659f39cc5bbcb90b516e\", [\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.100, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认40%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认10%, 0% ~ 100%\"\"\"\n    老式DV               = EffectMeta(\"老式DV\", True, \"7026261220961292807\", \"1426168\", \"9b7fc1e4ed44a38366a37377d7003192\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.630, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_sharpen: 默认63%, 0% ~ 100%\n    effects_adjust_noise: 默认30%, 0% ~ 100%\"\"\"\n    聚光灯金粉           = EffectMeta(\"聚光灯金粉\", True, \"7460732843547693577\", \"101569261\", \"e67767facff37c3f8b3e91230652b627\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    聚焦色散             = EffectMeta(\"聚焦色散\", True, \"7430786234508644875\", \"88045350\", \"9eeaa1bba5cd7bfa9c72bc0ce4d922a7\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.125, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认20%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_distortion: 默认12%, 0% ~ 100%\n    effects_adjust_sharpen: 默认20%, 0% ~ 100%\"\"\"\n    胶卷                 = EffectMeta(\"胶卷\", True, \"7460730844018119205\", \"101569809\", \"1278b39eb118bacf343a32dc3d638558\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    胶片V                = EffectMeta(\"胶片V\", True, \"7151967279817691662\", \"5050659\", \"e8dabb72421c2773120bfc6d4d3785f0\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    胶片冷绿             = EffectMeta(\"胶片冷绿\", True, \"7146524414312452645\", \"4837281\", \"52a78b591b893502154b101c757877db\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    胶片暖棕             = EffectMeta(\"胶片暖棕\", True, \"7145385234320593439\", \"4837280\", \"bcb9ebf14085e77e8b0e1cd1cf0a87f8\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\"\"\"\n    胶片滚动             = EffectMeta(\"胶片滚动\", True, \"7080354236956938782\", \"1655466\", \"a05a7b82f4d36066ef3d6630bb1be809\", [\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    胶片漏光III          = EffectMeta(\"胶片漏光III\", True, \"7437386424036364827\", \"90546418\", \"ae1e56523970804e5171769ff23ff2fa\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    胶片翻转             = EffectMeta(\"胶片翻转\", True, \"7429592751961805348\", \"87654332\", \"564433ca46bf2bfbb5a7f4876e682632\", [\n                              EffectParam(\"effects_adjust_speed\", 0.480, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认48%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    胶片边框             = EffectMeta(\"胶片边框\", True, \"7448898555617481243\", \"97032432\", \"024763692a9bc969e04c88f1341f6043\", [])\n    胶片闪切             = EffectMeta(\"胶片闪切\", True, \"7384745950608101924\", \"72761923\", \"347713d7f8a7b69b1885ee9d38cd8de6\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认100%, 0% ~ 100%\"\"\"\n    脉搏跳动             = EffectMeta(\"脉搏跳动\", True, \"7052226294972420621\", \"1522814\", \"c65fc5a267dde559e80e16c8fcc9cd6c\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认80%, 0% ~ 100%\n    effects_adjust_intensity: 默认90%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认70%, 0% ~ 100%\"\"\"\n    腾云驾雾             = EffectMeta(\"腾云驾雾\", True, \"7405560326650860042\", \"79942991\", \"2c871332504a40b7dbe9e8e9e0c9283b\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认0%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认0%, 0% ~ 100%\"\"\"\n    色差震闪             = EffectMeta(\"色差震闪\", True, \"7355109046694711871\", \"55932216\", \"b4d72c47be1ca1238cddf0790a8a0c55\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_color: 默认30%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    色散冲击             = EffectMeta(\"色散冲击\", True, \"7374053937369846307\", \"67503542\", \"ed2771a77992c0f8d0958bbaadbba53e\", [\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_chromatic\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认60%, 0% ~ 100%\n    effects_adjust_vertical_chromatic: 默认60%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\"\"\"\n    色散故障             = EffectMeta(\"色散故障\", True, \"7242574690638631479\", \"14972687\", \"5989d49ac22b81107c9741367ae6651d\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\"\"\"\n    节奏热成像           = EffectMeta(\"节奏热成像\", True, \"7416626838232896012\", \"83369566\", \"a56e9c4eb9b81ab28f6eb68e8a3afef0\", [\n                              EffectParam(\"effects_adjust_speed\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认20%, 0% ~ 100%\n    effects_adjust_size: 默认60%, 0% ~ 100%\n    effects_adjust_luminance: 默认40%, 0% ~ 100%\"\"\"\n    花屏故障             = EffectMeta(\"花屏故障\", True, \"7425528614847779379\", \"86397374\", \"1f7b111effe937c3ec574a0791866cf9\", [\n                              EffectParam(\"effects_adjust_speed\", 0.091, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认9%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_noise: 默认50%, 0% ~ 100%\n    effects_adjust_sharpen: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    花屏故障_II          = EffectMeta(\"花屏故障 II\", True, \"7392894917720150565\", \"75855950\", \"429436b9a9eac2edd4fea857b3074432\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认75%, 0% ~ 100%\n    effects_adjust_luminance: 默认0%, 0% ~ 100%\n    effects_adjust_blur: 默认0%, 0% ~ 100%\"\"\"\n    花瓣环绕             = EffectMeta(\"花瓣环绕\", True, \"7345688874577826342\", \"50608291\", \"d954d5148a1d1ec24016499b38b85d1d\", [\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认33%, 0% ~ 100%\"\"\"\n    荧光星河             = EffectMeta(\"荧光星河\", True, \"7448898556410204681\", \"97032428\", \"22ec77257edf26222b3bb9704b261908\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    菱形光斑             = EffectMeta(\"菱形光斑\", True, \"7316813562783994395\", \"40449614\", \"8baa04aecc7a8e40d9c71cb3c7a91f33\", [\n                              EffectParam(\"effects_adjust_filter\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.230, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.750, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认55%, 0% ~ 100%\n    effects_adjust_range: 默认25%, 0% ~ 100%\n    effects_adjust_color: 默认23%, 0% ~ 100%\n    effects_adjust_blur: 默认65%, 0% ~ 100%\n    effects_adjust_speed: 默认45%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认75%, 0% ~ 100%\"\"\"\n    菱形变焦             = EffectMeta(\"菱形变焦\", True, \"7147943538120987166\", \"4841353\", \"fda851ab65ee2b7bd6bb568a0e8bc544\", [\n                              EffectParam(\"effects_adjust_size\", 0.521, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.720, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认52%, 0% ~ 100%\n    effects_adjust_intensity: 默认72%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认33%, 0% ~ 100%\n    effects_adjust_rotate: 默认50%, 0% ~ 100%\"\"\"\n    落叶_II              = EffectMeta(\"落叶 II\", True, \"7153556255263429151\", \"5418631\", \"a7658052127fea9d33b12696e2d71ca4\", [\n                              EffectParam(\"effects_adjust_size\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认20%, 0% ~ 100%\n    effects_adjust_filter: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    蓝光爆闪             = EffectMeta(\"蓝光爆闪\", True, \"7288655540341707324\", \"25450329\", \"363de1da61a76d9d902e62a7bed611e6\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.650, 0.010, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认80%, 0% ~ 100%\n    effects_adjust_speed: 默认65%, 1% ~ 100%\n    effects_adjust_range: 默认0%, 0% ~ 100%\n    effects_adjust_color: 默认80%, 0% ~ 100%\"\"\"\n    蓝色丝印             = EffectMeta(\"蓝色丝印\", True, \"7131985730791805448\", \"4097661\", \"0fceb871b844d51454db5d59da3636ef\", [\n                              EffectParam(\"effects_adjust_texture\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认70%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\"\"\"\n    虹光旋入             = EffectMeta(\"虹光旋入\", True, \"7377352335028130367\", \"69273433\", \"bf6fb74a7290e9a8d31dc36453736b66\", [\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.660, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_distortion: 默认66%, 0% ~ 100%\"\"\"\n    蛇形走位             = EffectMeta(\"蛇形走位\", True, \"7460729982474523163\", \"101569875\", \"878cb7c373d66f7e5125e8b86de851c4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    蛇蛇涂鸦             = EffectMeta(\"蛇蛇涂鸦\", True, \"7460729365366575667\", \"101570158\", \"0021e6a04c4c7567201fbb592a934482\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    西海岸涂鸦           = EffectMeta(\"西海岸涂鸦\", True, \"7449588013115380251\", \"97254884\", \"cd245412884199a350400bffdb8a6ea8\", [])\n    视频播放             = EffectMeta(\"视频播放\", True, \"7144915597308989988\", \"4668537\", \"7a18d00c453615e8415306a7f1f37396\", [\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认80%, 0% ~ 100%\"\"\"\n    记忆存档             = EffectMeta(\"记忆存档\", True, \"7460732200074351142\", \"101569592\", \"9fb4f7c351cd80f0f9383eb9c5c6ce24\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    诡异故障             = EffectMeta(\"诡异故障\", True, \"7425528781156127258\", \"86397483\", \"eec29209c7ab182a5fa9335ee5b7d933\", [\n                              EffectParam(\"effects_adjust_speed\", 0.091, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认9%, 0% ~ 100%\"\"\"\n    负片分屏             = EffectMeta(\"负片分屏\", True, \"7278974994623763003\", \"22907949\", \"5a980a6a4a707fc1ad13caff77e3926a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认33%, 0% ~ 100%\"\"\"\n    负片描边             = EffectMeta(\"负片描边\", True, \"7434412782285492746\", \"89308031\", \"08ff70bd94ad0dc1ffac10995fca7b75\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    负片涂鸦             = EffectMeta(\"负片涂鸦\", True, \"7157966185571553822\", \"5477607\", \"c622911e77150d8ec0e9c4ecde458c02\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    负片涂鸦_II          = EffectMeta(\"负片涂鸦 II\", True, \"7231111030028374584\", \"13379581\", \"02590242d94571bb62a8635b4fd5a3f7\", [\n                              EffectParam(\"effects_adjust_texture\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.320, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认40%, 0% ~ 100%\n    effects_adjust_speed: 默认75%, 0% ~ 100%\n    effects_adjust_noise: 默认32%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\"\"\"\n    负片涂鸦_III         = EffectMeta(\"负片涂鸦 III\", True, \"7267517097775731261\", \"20745376\", \"96a028c1ac17f22a452c1e012d47f3ed\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_luminance: 默认0%, 0% ~ 100%\"\"\"\n    负片游移             = EffectMeta(\"负片游移\", True, \"7091488033555354120\", \"1787254\", \"bc811feeac5b5e4608cbb80c99a07d46\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.000, -1.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.000, -1.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认0%, -100% ~ 100%\n    effects_adjust_horizontal_shift: 默认0%, -100% ~ 100%\"\"\"\n    负片频闪             = EffectMeta(\"负片频闪\", True, \"7153575555554611720\", \"5155369\", \"c737112d913d14f6cc8871dbc51c8013\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.850, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_speed: 默认45%, 0% ~ 100%\n    effects_adjust_filter: 默认85%, 0% ~ 100%\"\"\"\n    负片频闪_II          = EffectMeta(\"负片频闪 II\", True, \"7417726471868781110\", \"83794424\", \"037aa3ce6e5b17d6623bf2d718104ac4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.091, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认9%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_texture: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认50%, 0% ~ 100%\"\"\"\n    贴身粒子             = EffectMeta(\"贴身粒子\", True, \"7444407996911718949\", \"94976472\", \"4b9ac9961fe8d2e32413f562b7267d80\", [\n                              EffectParam(\"effects_adjust_number\", 0.180, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.340, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.180, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.240, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_number: 默认18%, 0% ~ 100%\n    effects_adjust_speed: 默认34%, 0% ~ 100%\n    effects_adjust_size: 默认18%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_distortion: 默认24%, 0% ~ 100%\"\"\"\n    超大光斑             = EffectMeta(\"超大光斑\", True, \"7171321435200164383\", \"6691829\", \"8f525928d0c73912e59702928d728ef2\", [\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.100, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_number: 默认10%, 0% ~ 100%\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认60%, 0% ~ 100%\n    effects_adjust_filter: 默认20%, 0% ~ 100%\"\"\"\n    超强锐化             = EffectMeta(\"超强锐化\", True, \"7129336892121682468\", \"3950243\", \"f5d68fac1d5f2d24144d143772c4d41b\", [\n                              EffectParam(\"effects_adjust_sharpen\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_sharpen: 默认80%, 0% ~ 100%\n    effects_adjust_intensity: 默认35%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    跟随运镜             = EffectMeta(\"跟随运镜\", True, \"7299426452896748042\", \"28956878\", \"4c501e2a054c24f4268b4daa44460f90\", [\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.150, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认15%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认30%, 0% ~ 100%\n    effects_adjust_speed: 默认15%, 0% ~ 100%\"\"\"\n    跟随运镜_II          = EffectMeta(\"跟随运镜 II\", True, \"7340954638184616467\", \"48362872\", \"d34cbcf01362bf60945dafa56ec5704b\", [\n                              EffectParam(\"effects_adjust_range\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.400, 0.100, 1.000),\n                              EffectParam(\"effects_adjust_rotate\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认0%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认40%, 10% ~ 100%\n    effects_adjust_rotate: 默认50%, 0% ~ 100%\n    effects_adjust_distortion: 默认80%, 0% ~ 100%\"\"\"\n    跳色四宫格           = EffectMeta(\"跳色四宫格\", True, \"7447351620641247754\", \"96240759\", \"7472057d48afda752984c3d22d84cb03\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    车窗_II              = EffectMeta(\"车窗 II\", True, \"7109280482025542157\", \"4795296\", \"524d63374811aa883cd29b6b1413d03c\", [\n                              EffectParam(\"effects_adjust_range\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"sticker\", 0.350, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_range: 默认55%, 0% ~ 100%\n    effects_adjust_intensity: 默认45%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    sticker: 默认35%, 0% ~ 100%\"\"\"\n    转运祝福             = EffectMeta(\"转运祝福\", True, \"7461840876596105766\", \"101959980\", \"519971ccd154c80416915efafe537d59\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    轻微故障             = EffectMeta(\"轻微故障\", True, \"7425528929454133786\", \"86397588\", \"437d6da122ab141fd4988472a2150aa9\", [\n                              EffectParam(\"effects_adjust_speed\", 0.091, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认9%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_noise: 默认50%, 0% ~ 100%\n    effects_adjust_sharpen: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    辉光开幕             = EffectMeta(\"辉光开幕\", True, \"7338322046822126114\", \"47051728\", \"a37854eb4a70d1f149c417ce3269a8f5\", [\n                              EffectParam(\"effects_adjust_texture\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.270, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_texture: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_luminance: 默认75%, 0% ~ 100%\n    effects_adjust_color: 默认27%, 0% ~ 100%\n    effects_adjust_blur: 默认40%, 0% ~ 100%\"\"\"\n    边缘扫光             = EffectMeta(\"边缘扫光\", True, \"7322363012092793353\", \"39434745\", \"8b7a9733b393b42cf018ce2efdebca2a\", [\n                              EffectParam(\"effects_adjust_soft\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_soft: 默认75%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_color: 默认100%, 0% ~ 100%\n    effects_adjust_blur: 默认60%, 0% ~ 100%\n    effects_adjust_range: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    迎接2025             = EffectMeta(\"迎接2025\", True, \"7448898555621675571\", \"97032430\", \"0c7b8af999acaf2183f5ea7d94c475ca\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    迷幻故障             = EffectMeta(\"迷幻故障\", True, \"7265960462330630714\", \"20440246\", \"5ddfb1bd3479179af2c0ec0026b57e3e\", [\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\"\"\"\n    迷幻荡漾             = EffectMeta(\"迷幻荡漾\", True, \"7223208176206746173\", \"12324741\", \"1ab6e40160a674cd19de3ade157a3d0b\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.550, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认55%, 0% ~ 100%\n    effects_adjust_speed: 默认70%, 0% ~ 100%\n    effects_adjust_range: 默认0%, 0% ~ 100%\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\"\"\"\n    迷幻震动             = EffectMeta(\"迷幻震动\", True, \"7238863029775897148\", \"14438877\", \"e28a153a03d2dcf1a12384712196bc07\", [\n                              EffectParam(\"effects_adjust_distortion\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.750, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_distortion: 默认65%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认75%, 0% ~ 100%\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\n    effects_adjust_color: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认40%, 0% ~ 100%\"\"\"\n    重复变焦             = EffectMeta(\"重复变焦\", True, \"7161285099667853831\", \"5719311\", \"ae41555c055c73d2089f1d681f2bcc20\", [\n                              EffectParam(\"effects_adjust_size\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_texture: 默认65%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    重复震闪             = EffectMeta(\"重复震闪\", True, \"7250369682207674938\", \"16610415\", \"63a7958ffc3e6a73d3b9556f7ca04381\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.250, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认80%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认40%, 0% ~ 100%\n    effects_adjust_blur: 默认70%, 0% ~ 100%\n    effects_adjust_range: 默认25%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    金元宝               = EffectMeta(\"金元宝\", True, \"7463321874349429258\", \"102547299\", \"3b173a55740a811374860b78f94c823c\", [\n                              EffectParam(\"effects_adjust_rotate\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_rotate: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_size: 默认90%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认30%, 0% ~ 100%\"\"\"\n    金币掉落             = EffectMeta(\"金币掉落\", True, \"7447018501778182666\", \"96107626\", \"59929527c3e70f362d91cb94e7f54eb4\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    金粉飘落             = EffectMeta(\"金粉飘落\", True, \"7456695082293400115\", \"100068434\", \"42caa24a03273a301ac8664df1f2b375\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.150, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.150, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_filter: 默认15%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_size: 默认15%, 0% ~ 100%\"\"\"\n    金色碎片             = EffectMeta(\"金色碎片\", True, \"7106040163402256927\", \"2622164\", \"a24eabdabec50f5d52f7e6fb099c899c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认20%, 0% ~ 100%\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认20%, 0% ~ 100%\n    effects_adjust_noise: 默认30%, 0% ~ 100%\"\"\"\n    金色辉光             = EffectMeta(\"金色辉光\", True, \"7444470107004211763\", \"95041384\", \"cd968a21dec5e06bf4b85ea87c0312df\", [\n                              EffectParam(\"effects_adjust_filter\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\"\"\"\n    金色雪花             = EffectMeta(\"金色雪花\", True, \"7444470107000017435\", \"95041381\", \"ce3f81491144281f1f4d2bdb20f1090a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    金蛇贺岁             = EffectMeta(\"金蛇贺岁\", True, \"7460731076856517129\", \"101569782\", \"f578b37eaaea19ad739ab28fe3c62ffe\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    金边闪烁             = EffectMeta(\"金边闪烁\", True, \"7304832158466576947\", \"30855689\", \"46b93ae5afcb00ecface4fd485014d9c\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认50%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认50%, 0% ~ 100%\"\"\"\n    金银珠宝             = EffectMeta(\"金银珠宝\", True, \"7450336559141753395\", \"97573972\", \"e6e9308745fb6c5c9fa5d63f08eebb8a\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    金鱼漂浮             = EffectMeta(\"金鱼漂浮\", True, \"7451879925545439795\", \"98209671\", \"5d85a32986794f9d1f11f9aadf02240c\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    铅笔涂鸦             = EffectMeta(\"铅笔涂鸦\", True, \"7409883232667177499\", \"81202828\", \"c76bc693a18e8dd16ff56d359564fecf\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    银杏飘落             = EffectMeta(\"银杏飘落\", True, \"7296789290724364850\", \"28024643\", \"00a7373f5eb307f5a6e9b3032c1916e0\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.000, 0.100, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.100, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认40%, 0% ~ 100%\n    effects_adjust_range: 默认40%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_speed: 默认0%, 10% ~ 100%\n    effects_adjust_size: 默认20%, 0% ~ 100%\n    effects_adjust_blur: 默认10%, 0% ~ 100%\"\"\"\n    银蛇缠绕             = EffectMeta(\"银蛇缠绕\", True, \"7461865163826663945\", \"101977565\", \"518cdd4993d2998a608580bb4a529939\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    闪光弹跳             = EffectMeta(\"闪光弹跳\", True, \"7210315941396091447\", \"10660327\", \"982ccb302cc81c13762eb31a25c54de5\", [\n                              EffectParam(\"effects_adjust_speed\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认20%, 0% ~ 100%\"\"\"\n    闪光灯_II            = EffectMeta(\"闪光灯 II\", True, \"7143919857539486238\", \"4795220\", \"1b9f1a3ee39a65820ae21d72793c89a9\", [\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_intensity: 默认65%, 0% ~ 100%\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\"\"\"\n    闪光灯IV             = EffectMeta(\"闪光灯IV\", True, \"7276317197658493498\", \"22328905\", \"db710dc6b5ea5b2f46595480d06d0d7d\", [\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认100%, 0% ~ 100%\"\"\"\n    闪电扭曲             = EffectMeta(\"闪电扭曲\", True, \"7329871968298078759\", \"42913127\", \"244819f79dffa729f9c9caeeb15a7698\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.666, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认67%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    闪白_II              = EffectMeta(\"闪白 II\", True, \"7281219213828559397\", \"23489443\", \"631162213ead8ced21aa7936bae06390\", [\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 2.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 200%\"\"\"\n    闪粉胶片             = EffectMeta(\"闪粉胶片\", True, \"7449596462658228762\", \"97260690\", \"bc79e33a6136c9f82ea8f42f3b60b942\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    随机闪切             = EffectMeta(\"随机闪切\", True, \"7267909305519575608\", \"20816436\", \"6a5fa04981e50a2c7bd67a4e03e4d3e6\", [\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认20%, 0% ~ 100%\"\"\"\n    随机马赛克           = EffectMeta(\"随机马赛克\", True, \"7299769859900969510\", \"29099986\", \"190ec4ff873df478cd8842c1c9a9f967\", [\n                              EffectParam(\"effects_adjust_size\", 0.280, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_number\", 0.220, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认28%, 0% ~ 100%\n    effects_adjust_number: 默认22%, 0% ~ 100%\n    effects_adjust_filter: 默认30%, 0% ~ 100%\n    effects_adjust_color: 默认90%, 0% ~ 100%\n    effects_adjust_background_animation: 默认90%, 0% ~ 100%\n    effects_adjust_noise: 默认50%, 0% ~ 100%\"\"\"\n    隔行DV               = EffectMeta(\"隔行DV\", True, \"7215598241558041125\", \"11331317\", \"3429986a54fc1d15cc29f7340103540d\", [\n                              EffectParam(\"effects_adjust_blur\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_sharpen\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.200, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认40%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_sharpen: 默认20%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认20%, 0% ~ 100%\"\"\"\n    雨季_I               = EffectMeta(\"雨季 I\", True, \"7149065282768605732\", \"6731496\", \"fe78f4e40b597e3170f46831622f8e06\", [\n                              EffectParam(\"effects_adjust_blur\", 0.160, 0.000, 0.800),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.336, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认16%, 0% ~ 80%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认34%, 0% ~ 100%\"\"\"\n    雨滴                 = EffectMeta(\"雨滴\", True, \"7402879770079269403\", \"79016931\", \"9bf3286a900e44e5aac9887f4f4da71c\", [\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认0%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_noise: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认20%, 0% ~ 100%\n    effects_adjust_range: 默认0%, 0% ~ 100%\"\"\"\n    雨滴2                = EffectMeta(\"雨滴2\", True, \"7411360993369920015\", \"81600389\", \"2ed20557bb6b691f66e05aafdbb13595\", [\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_noise\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_texture: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认0%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_noise: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认20%, 0% ~ 100%\n    effects_adjust_range: 默认0%, 0% ~ 100%\"\"\"\n    雪花光斑             = EffectMeta(\"雪花光斑\", True, \"7296707597707514406\", \"27986887\", \"b6b5e079f2c4079d72185fb43cfc7521\", [\n                              EffectParam(\"effects_adjust_background_animation\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.100, 0.000, 1.000),\n                              EffectParam(\"sticker\", 0.600, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_background_animation: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认20%, 0% ~ 100%\n    effects_adjust_filter: 默认30%, 0% ~ 100%\n    effects_adjust_color: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认10%, 0% ~ 100%\n    sticker: 默认60%, 0% ~ 100%\"\"\"\n    雪花变色             = EffectMeta(\"雪花变色\", True, \"7444470107000017417\", \"95041385\", \"8ede7d0c27d9423da48f3226a8384f95\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\"\"\"\n    雪花散落             = EffectMeta(\"雪花散落\", True, \"7448898556401816115\", \"97032426\", \"2ad9203b34bf8f5fd8bd1672f62dcbc8\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    雪雾                 = EffectMeta(\"雪雾\", True, \"7303380658934518323\", \"30305488\", \"bc0e8be4f1a2d7171824311ce9e57c44\", [\n                              EffectParam(\"sticker\", 0.280, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.900, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    sticker: 默认28%, 0% ~ 100%\n    effects_adjust_filter: 默认90%, 0% ~ 100%\n    effects_adjust_texture: 默认90%, 0% ~ 100%\n    effects_adjust_background_animation: 默认30%, 0% ~ 100%\"\"\"\n    零帧起手             = EffectMeta(\"零帧起手\", True, \"7435897594070438426\", \"89895357\", \"d648bf579b3f003ca76c46068faadd70\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    雾镜_II              = EffectMeta(\"雾镜 II\", True, \"7147920433604465159\", \"6731657\", \"627544f24ff53bde600ab918cb51a17d\", [\n                              EffectParam(\"effects_adjust_blur\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_blur: 默认60%, 0% ~ 100%\n    effects_adjust_filter: 默认80%, 0% ~ 100%\n    effects_adjust_background_animation: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 0% ~ 100%\"\"\"\n    震动光束             = EffectMeta(\"震动光束\", True, \"7246758527992074811\", \"15775885\", \"5c4feafe4eb534961c0df1cadb899e83\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.420, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.160, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.490, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.750, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认42%, 0% ~ 100%\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认16%, 0% ~ 100%\n    effects_adjust_luminance: 默认49%, 0% ~ 100%\n    effects_adjust_blur: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_range: 默认75%, 0% ~ 100%\"\"\"\n    震动发光             = EffectMeta(\"震动发光\", True, \"7249264623226982968\", \"16303237\", \"ce596725c52c5cfa0e8205c1cbc00585\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_soft\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_intensity: 默认40%, 0% ~ 100%\n    effects_adjust_soft: 默认60%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认80%, 0% ~ 100%\n    effects_adjust_luminance: 默认60%, 0% ~ 100%\n    effects_adjust_distortion: 默认50%, 0% ~ 100%\"\"\"\n    震动屏闪             = EffectMeta(\"震动屏闪\", True, \"7171697545154925069\", \"6733311\", \"c83c072fdbd9921701f12498c0c00cfc\", [\n                              EffectParam(\"effects_adjust_speed\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.700, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认30%, 0% ~ 100%\n    effects_adjust_intensity: 默认70%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_range: 默认70%, 0% ~ 100%\"\"\"\n    震动扫光             = EffectMeta(\"震动扫光\", True, \"7374053409546048052\", \"67503342\", \"3b86c556d5a92c8937b1120823bc34b2\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_vertical_shift\", 0.400, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认40%, 0% ~ 100%\n    effects_adjust_speed: 默认60%, 0% ~ 100%\n    effects_adjust_color: 默认20%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认40%, 0% ~ 100%\n    effects_adjust_vertical_shift: 默认40%, 0% ~ 100%\"\"\"\n    震动推镜             = EffectMeta(\"震动推镜\", True, \"7345004981029704233\", \"50238678\", \"47b846ada207d95dce6bc0501102db85\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.220, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认22%, 0% ~ 100%\"\"\"\n    震闪渐黑             = EffectMeta(\"震闪渐黑\", True, \"7304249285577544201\", \"30662744\", \"dfddc3aedd22941d50e768623fbd60ba\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.200, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.300, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.500, 0.100, 1.000),\n                              EffectParam(\"effects_adjust_background_animation\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认20%, 0% ~ 100%\n    effects_adjust_luminance: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认30%, 0% ~ 100%\n    effects_adjust_speed: 默认50%, 10% ~ 100%\n    effects_adjust_background_animation: 默认50%, 0% ~ 100%\"\"\"\n    霓虹光线             = EffectMeta(\"霓虹光线\", True, \"7254125922222084663\", \"17710570\", \"c2274095125803b495db0623740fcb22\", [\n                              EffectParam(\"effects_adjust_luminance\", 0.450, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_shift\", 0.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_luminance: 默认45%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认80%, 0% ~ 100%\n    effects_adjust_range: 默认80%, 0% ~ 100%\n    effects_adjust_horizontal_shift: 默认0%, 0% ~ 100%\"\"\"\n    霓虹闪切             = EffectMeta(\"霓虹闪切\", True, \"7345353688774349348\", \"50455778\", \"32ab9ae1b2f18168bb5d78bfdfda9176\", [\n                              EffectParam(\"effects_adjust_speed\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.825, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_horizontal_chromatic\", 1.000, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认40%, 0% ~ 100%\n    effects_adjust_intensity: 默认100%, 0% ~ 100%\n    effects_adjust_luminance: 默认82%, 0% ~ 100%\n    effects_adjust_horizontal_chromatic: 默认100%, 0% ~ 100%\"\"\"\n    飞机窗               = EffectMeta(\"飞机窗\", True, \"7417827699902648868\", \"83837896\", \"0d51cdd7ce2a165449df548e86d6ce08\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.000, 0.000, 0.700),\n                              EffectParam(\"effects_adjust_luminance\", 0.350, 0.000, 0.700)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_size: 默认0%, 0% ~ 70%\n    effects_adjust_luminance: 默认35%, 0% ~ 70%\"\"\"\n    马赛克闪切           = EffectMeta(\"马赛克闪切\", True, \"7308712918902641203\", \"32503798\", \"6b0566a1868f7a088935c8835052db63\", [\n                              EffectParam(\"effects_adjust_size\", 0.400, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.800, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.130, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_size: 默认40%, 0% ~ 100%\n    effects_adjust_speed: 默认80%, 0% ~ 100%\n    effects_adjust_range: 默认13%, 0% ~ 100%\"\"\"\n    高速彩光             = EffectMeta(\"高速彩光\", True, \"7343527966145516042\", \"49475327\", \"e92f5749fec01ea61ad9d6747d808f82\", [\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_color\", 0.650, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_luminance\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_blur\", 0.500, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\n    effects_adjust_color: 默认65%, 0% ~ 100%\n    effects_adjust_intensity: 默认50%, 0% ~ 100%\n    effects_adjust_luminance: 默认50%, 0% ~ 100%\n    effects_adjust_blur: 默认50%, 0% ~ 100%\"\"\"\n    鱼眼_II              = EffectMeta(\"鱼眼 II\", True, \"7023664868083372580\", \"1418072\", \"3961e7c38420d89d64c5d267a3068254\", [\n                              EffectParam(\"effects_adjust_speed\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.500, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 0.800, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认50%, 0% ~ 100%\n    effects_adjust_size: 默认100%, 0% ~ 100%\n    effects_adjust_distortion: 默认80%, 0% ~ 100%\"\"\"\n    鱼眼_III             = EffectMeta(\"鱼眼 III\", True, \"7051881765975101983\", \"1521356\", \"b2620a812f8a4e48121a0e18cf36233e\", [\n                              EffectParam(\"effects_adjust_color\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.700, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_intensity\", 0.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_distortion\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_range\", 0.300, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_color: 默认0%, 0% ~ 100%\n    effects_adjust_filter: 默认70%, 0% ~ 100%\n    effects_adjust_intensity: 默认0%, 0% ~ 100%\n    effects_adjust_distortion: 默认100%, 0% ~ 100%\n    effects_adjust_range: 默认30%, 0% ~ 100%\"\"\"\n    鱼眼_IV              = EffectMeta(\"鱼眼 IV\", True, \"7091597643553444359\", \"1790048\", \"5977716750083a4ded0565086be43e07\", [\n                              EffectParam(\"effects_adjust_intensity\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_filter\", 0.600, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_size\", 0.350, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_texture\", 0.550, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_intensity: 默认60%, 0% ~ 100%\n    effects_adjust_filter: 默认60%, 0% ~ 100%\n    effects_adjust_size: 默认35%, 0% ~ 100%\n    effects_adjust_texture: 默认55%, 0% ~ 100%\"\"\"\n    鱼眼星星             = EffectMeta(\"鱼眼星星\", True, \"7432187089862529546\", \"88503775\", \"9653ef598f10bfa680a4101317029663\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    鱼眼涂鸦             = EffectMeta(\"鱼眼涂鸦\", True, \"7453001309596160522\", \"98675391\", \"c043e3b26fac7d72d5db13d66a9b9049\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    鱼眼闪电             = EffectMeta(\"鱼眼闪电\", True, \"7432187089858351667\", \"88503776\", \"46b23446c66aa5fc8f91bc468724eeed\", [\n                              EffectParam(\"effects_adjust_speed\", 0.333, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n    黑白胶片             = EffectMeta(\"黑白胶片\", True, \"7085992144627831326\", \"1691558\", \"708a2e34f1ecf5774e910d8da7099304\", [\n                              EffectParam(\"effects_adjust_filter\", 1.000, 0.000, 1.000),\n                              EffectParam(\"effects_adjust_speed\", 0.330, 0.000, 1.000)])\n    \"\"\"参数:\n    effects_adjust_filter: 默认100%, 0% ~ 100%\n    effects_adjust_speed: 默认33%, 0% ~ 100%\"\"\"\n"
  },
  {
    "path": "src/pyJianYingDraft/script_file.py",
    "content": "import os\nimport json\nimport math\nfrom copy import deepcopy\n\nfrom typing import Optional, Literal, Union, overload\nfrom typing import Type, Dict, List, Any\n\nfrom . import util\nfrom . import assets\nfrom . import exceptions\nfrom .template_mode import ImportedTrack, EditableTrack, ImportedMediaTrack, ImportedTextTrack, ShrinkMode, ExtendMode, import_track\nfrom .time_util import Timerange, tim, srt_tstamp\nfrom .local_materials import VideoMaterial, AudioMaterial\nfrom .segment import BaseSegment, Speed, ClipSettings\nfrom .audio_segment import AudioSegment, AudioFade, AudioEffect\nfrom .video_segment import VideoSegment, StickerSegment, SegmentAnimations, VideoEffect, Transition, Filter, BackgroundFilling, MixMode\nfrom .effect_segment import EffectSegment, FilterSegment\nfrom .text_segment import TextSegment, TextStyle, TextBubble\nfrom .track import TrackType, BaseTrack, Track\n\nfrom .metadata import VideoSceneEffectType, VideoCharacterEffectType, FilterType\n\nclass ScriptMaterial:\n    \"\"\"草稿文件中的素材信息部分\"\"\"\n\n    audios: List[AudioMaterial]\n    \"\"\"音频素材列表\"\"\"\n    videos: List[VideoMaterial]\n    \"\"\"视频素材列表\"\"\"\n    stickers: List[Dict[str, Any]]\n    \"\"\"贴纸素材列表\"\"\"\n    texts: List[Dict[str, Any]]\n    \"\"\"文本素材列表\"\"\"\n\n    audio_effects: List[AudioEffect]\n    \"\"\"音频特效列表\"\"\"\n    audio_fades: List[AudioFade]\n    \"\"\"音频淡入淡出效果列表\"\"\"\n    animations: List[SegmentAnimations]\n    \"\"\"动画素材列表\"\"\"\n    video_effects: List[VideoEffect]\n    \"\"\"视频特效列表\"\"\"\n\n    speeds: List[Speed]\n    \"\"\"变速列表\"\"\"\n    masks: List[Dict[str, Any]]\n    \"\"\"蒙版列表\"\"\"\n    transitions: List[Transition]\n    \"\"\"转场效果列表\"\"\"\n    filters: List[Union[Filter, TextBubble]]\n    \"\"\"滤镜/文本花字/文本气泡列表, 导出到`effects`中\"\"\"\n    mix_modes: List[MixMode]\n    \"\"\"混合模式列表, 导出到`effects`中\"\"\"\n    canvases: List[BackgroundFilling]\n    \"\"\"背景填充列表\"\"\"\n\n    def __init__(self):\n        self.audios = []\n        self.videos = []\n        self.stickers = []\n        self.texts = []\n\n        self.audio_effects = []\n        self.audio_fades = []\n        self.animations = []\n        self.video_effects = []\n\n        self.speeds = []\n        self.masks = []\n        self.transitions = []\n        self.filters = []\n        self.mix_modes = []\n        self.canvases = []\n\n    @overload\n    def __contains__(self, item: Union[VideoMaterial, AudioMaterial]) -> bool: ...\n    @overload\n    def __contains__(self, item: Union[AudioFade, AudioEffect]) -> bool: ...\n    @overload\n    def __contains__(self, item: Union[SegmentAnimations, VideoEffect, Transition, Filter]) -> bool: ...\n\n    def __contains__(self, item) -> bool:\n        if isinstance(item, VideoMaterial):\n            return item.material_id in [video.material_id for video in self.videos]\n        elif isinstance(item, AudioMaterial):\n            return item.material_id in [audio.material_id for audio in self.audios]\n        elif isinstance(item, AudioFade):\n            return item.fade_id in [fade.fade_id for fade in self.audio_fades]\n        elif isinstance(item, AudioEffect):\n            return item.effect_id in [effect.effect_id for effect in self.audio_effects]\n        elif isinstance(item, SegmentAnimations):\n            return item.animation_id in [ani.animation_id for ani in self.animations]\n        elif isinstance(item, VideoEffect):\n            return item.global_id in [effect.global_id for effect in self.video_effects]\n        elif isinstance(item, Transition):\n            return item.global_id in [transition.global_id for transition in self.transitions]\n        elif isinstance(item, Filter):\n            return item.global_id in [filter_.global_id for filter_ in self.filters]\n        elif isinstance(item, MixMode):\n            return item.global_id in [mix_mode.global_id for mix_mode in self.mix_modes]\n        else:\n            raise TypeError(\"Invalid argument type '%s'\" % type(item))\n\n    def export_json(self) -> Dict[str, List[Any]]:\n        return {\n            \"ai_translates\": [],\n            \"audio_balances\": [],\n            \"audio_effects\": [effect.export_json() for effect in self.audio_effects],\n            \"audio_fades\": [fade.export_json() for fade in self.audio_fades],\n            \"audio_track_indexes\": [],\n            \"audios\": [audio.export_json() for audio in self.audios],\n            \"beats\": [],\n            \"canvases\": [canvas.export_json() for canvas in self.canvases],\n            \"chromas\": [],\n            \"color_curves\": [],\n            \"digital_humans\": [],\n            \"drafts\": [],\n            \"effects\": [_filter.export_json() for _filter in self.filters] + [mix_mode.export_json() for mix_mode in self.mix_modes],\n            \"flowers\": [],\n            \"green_screens\": [],\n            \"handwrites\": [],\n            \"hsl\": [],\n            \"images\": [],\n            \"log_color_wheels\": [],\n            \"loudnesses\": [],\n            \"manual_deformations\": [],\n            \"masks\": self.masks,\n            \"material_animations\": [ani.export_json() for ani in self.animations],\n            \"material_colors\": [],\n            \"multi_language_refs\": [],\n            \"placeholders\": [],\n            \"plugin_effects\": [],\n            \"primary_color_wheels\": [],\n            \"realtime_denoises\": [],\n            \"shapes\": [],\n            \"smart_crops\": [],\n            \"smart_relights\": [],\n            \"sound_channel_mappings\": [],\n            \"speeds\": [spd.export_json() for spd in self.speeds],\n            \"stickers\": self.stickers,\n            \"tail_leaders\": [],\n            \"text_templates\": [],\n            \"texts\": self.texts,\n            \"time_marks\": [],\n            \"transitions\": [transition.export_json() for transition in self.transitions],\n            \"video_effects\": [effect.export_json() for effect in self.video_effects],\n            \"video_trackings\": [],\n            \"videos\": [video.export_json() for video in self.videos],\n            \"vocal_beautifys\": [],\n            \"vocal_separations\": []\n        }\n\nclass ScriptFile:\n    \"\"\"剪映草稿文件, 大部分接口定义在此\"\"\"\n\n    save_path: Optional[str]\n    \"\"\"草稿文件保存路径, 仅在模板模式下有效\"\"\"\n    content: Dict[str, Any]\n    \"\"\"草稿文件内容\"\"\"\n\n    width: int\n    \"\"\"视频的宽度, 单位为像素\"\"\"\n    height: int\n    \"\"\"视频的高度, 单位为像素\"\"\"\n    fps: int\n    \"\"\"视频的帧率\"\"\"\n    duration: int\n    \"\"\"视频的总时长, 单位为微秒\"\"\"\n\n    maintrack_adsorb: bool\n    \"\"\"是否启用主轨道吸附（主轨磁吸）\"\"\"\n\n    materials: ScriptMaterial\n    \"\"\"草稿文件中的素材信息部分\"\"\"\n    tracks: Dict[str, Track]\n    \"\"\"轨道信息\"\"\"\n\n    imported_materials: Dict[str, List[Dict[str, Any]]]\n    \"\"\"导入的素材信息\"\"\"\n    imported_tracks: List[ImportedTrack]\n    \"\"\"导入的轨道信息\"\"\"\n\n    dual_file_compatibility: bool\n    \"\"\"双文件兼容模式，启用时同时保存到 draft_content.json 和 draft_info.json\"\"\"\n\n    def __init__(self, width: int, height: int, fps: int, maintrack_adsorb: bool):\n        \"\"\"**创建剪映草稿推荐使用`DraftFolder.create_draft()`而非此方法**\n\n        Args:\n            width (int): 视频宽度, 单位为像素\n            height (int): 视频高度, 单位为像素\n            fps (int): 视频帧率\n            maintrack_adsorb (bool): 是否启用主轨道吸附（主轨磁吸）\n        \"\"\"\n        self.save_path = None\n\n        self.width = width\n        self.height = height\n        self.fps = fps\n        self.duration = 0\n        self.maintrack_adsorb = maintrack_adsorb\n\n        self.materials = ScriptMaterial()\n        self.tracks = {}\n\n        self.imported_materials = {}\n        self.imported_tracks = []\n\n        self.dual_file_compatibility = True  # 启用双文件兼容模式\n\n        with open(assets.get_asset_path('DRAFT_CONTENT_TEMPLATE'), \"r\", encoding=\"utf-8\") as f:\n            self.content = json.load(f)\n\n    @staticmethod\n    def load_template(json_path: str) -> \"ScriptFile\":\n        \"\"\"从JSON文件加载草稿模板\n\n        Args:\n            json_path (str): JSON文件路径\n\n        Raises:\n            `FileNotFoundError`: JSON文件不存在\n        \"\"\"\n        obj = ScriptFile(**util.provide_ctor_defaults(ScriptFile))\n        obj.save_path = json_path\n        if not os.path.exists(json_path):\n            raise FileNotFoundError(\"JSON文件 '%s' 不存在\" % json_path)\n        with open(json_path, \"r\", encoding=\"utf-8\") as f:\n            obj.content = json.load(f)\n\n        util.assign_attr_with_json(obj, [\"fps\", \"duration\"], obj.content)\n        util.assign_attr_with_json(obj, [\"maintrack_adsorb\"], obj.content[\"config\"])\n        util.assign_attr_with_json(obj, [\"width\", \"height\"], obj.content[\"canvas_config\"])\n\n        obj.imported_materials = deepcopy(obj.content[\"materials\"])\n        obj.imported_tracks = [import_track(track_data) for track_data in obj.content[\"tracks\"]]\n\n        return obj\n\n    def add_material(self, material: Union[VideoMaterial, AudioMaterial]) -> \"ScriptFile\":\n        \"\"\"向草稿文件中添加一个素材\"\"\"\n        if material in self.materials:  # 素材已存在\n            return self\n        if isinstance(material, VideoMaterial):\n            self.materials.videos.append(material)\n        elif isinstance(material, AudioMaterial):\n            self.materials.audios.append(material)\n        else:\n            raise TypeError(\"错误的素材类型: '%s'\" % type(material))\n        return self\n\n    def next_track_render_index(self) -> int:\n        \"\"\"为即将追加的新轨道分配 ``render_index``，保证叠在现有所有轨道之上（数值越大越接近前景）。\"\"\"\n        if not self.tracks:\n            return 0\n        return max(track.render_index for track in self.tracks.values()) + 1\n\n    def add_track_ordered(self, track_type: TrackType, track_name: Optional[str] = None, *,\n                          mute: bool = False) -> \"ScriptFile\":\n        \"\"\"追加新轨道，``render_index`` 取 ``next_track_render_index()``，多接口按调用先后自下而上叠层。\"\"\"\n        return self.add_track(track_type, track_name, mute=mute, absolute_index=self.next_track_render_index())\n\n    def add_track(self, track_type: TrackType, track_name: Optional[str] = None, *,\n                  mute: bool = False,\n                  relative_index: int = 0, absolute_index: Optional[int] = None) -> \"ScriptFile\":\n        \"\"\"向草稿文件中添加一个指定类型、指定名称的轨道, 可以自定义轨道层级\n\n        注意: 主视频轨道(最底层的视频轨道)上的视频片段必须从0s开始, 否则会被剪映强制对齐至0s.\n\n        为避免混淆, 仅在创建第一个同类型轨道时允许不指定名称\n\n        Args:\n            track_type (TrackType): 轨道类型\n            track_name (str, optional): 轨道名称. 仅在创建第一个同类型轨道时允许不指定.\n            mute (bool, optional): 轨道是否静音. 默认不静音.\n            relative_index (int, optional): 相对(同类型轨道的)图层位置, 越高越接近前景. 默认为0.\n            absolute_index (int, optional): 绝对图层位置, 越高越接近前景. 此参数将直接覆盖相应片段的`render_index`属性, 供有经验的用户使用.\n                此参数不能与`relative_index`同时使用.\n\n        Raises:\n            `NameError`: 已存在同类型轨道且未指定名称, 或已存在同名轨道\n        \"\"\"\n\n        if track_name is None:\n            if track_type in [track.track_type for track in self.tracks.values()]:\n                raise NameError(\"'%s' 类型的轨道已存在, 请为新轨道指定名称以避免混淆\" % track_type)\n            track_name = track_type.name\n        if track_name in [track.name for track in self.tracks.values()]:\n            raise NameError(\"名为 '%s' 的轨道已存在\" % track_name)\n\n        render_index = track_type.value.render_index + relative_index\n        if absolute_index is not None:\n            render_index = absolute_index\n\n        self.tracks[track_name] = Track(track_type, track_name, render_index, mute)\n        return self\n\n    def _get_track(self, segment_type: Type[BaseSegment], track_name: Optional[str]) -> Track:\n        # 指定轨道名称\n        if track_name is not None:\n            if track_name not in self.tracks:\n                raise NameError(\"不存在名为 '%s' 的轨道\" % track_name)\n            return self.tracks[track_name]\n        # 寻找唯一的同类型的轨道\n        count = sum([1 for track in self.tracks.values() if track.accept_segment_type == segment_type])\n        if count == 0: raise NameError(\"不存在接受 '%s' 的轨道\" % segment_type)\n        if count > 1: raise NameError(\"存在多个接受 '%s' 的轨道, 请指定轨道名称\" % segment_type)\n\n        return next(track for track in self.tracks.values() if track.accept_segment_type == segment_type)\n\n    def add_segment(self, segment: Union[VideoSegment, StickerSegment, AudioSegment, TextSegment, EffectSegment, FilterSegment],\n                    track_name: Optional[str] = None) -> \"ScriptFile\":\n        \"\"\"向指定轨道中添加一个片段\n\n        Args:\n            segment (`VideoSegment`, `StickerSegment`, `AudioSegment`, `TextSegment`, or `EffectSegment`): 要添加的片段\n            track_name (`str`, optional): 添加到的轨道名称. 当此类型的轨道仅有一条时可省略.\n\n        Raises:\n            `NameError`: 未找到指定名称的轨道, 或必须提供`track_name`参数时未提供\n            `TypeError`: 片段类型不匹配轨道类型\n            `SegmentOverlap`: 新片段与已有片段重叠\n        \"\"\"\n        target = self._get_track(type(segment), track_name)\n\n        # 加入轨道并更新时长\n        target.add_segment(segment)\n        self.duration = max(self.duration, segment.end)\n\n        # 自动添加相关素材\n        if isinstance(segment, VideoSegment):\n            # 出入场等动画\n            if (segment.animations_instance is not None) and (segment.animations_instance not in self.materials):\n                self.materials.animations.append(segment.animations_instance)\n            # 特效\n            for effect in segment.effects:\n                if effect not in self.materials:\n                    self.materials.video_effects.append(effect)\n            # 滤镜\n            for filter_ in segment.filters:\n                if filter_ not in self.materials:\n                    self.materials.filters.append(filter_)\n            # 混合模式\n            for mix_mode in segment.mix_modes:\n                if mix_mode not in self.materials:\n                    self.materials.mix_modes.append(mix_mode)\n            # 蒙版\n            if segment.mask is not None:\n                self.materials.masks.append(segment.mask.export_json())\n            # 转场\n            if (segment.transition is not None) and (segment.transition not in self.materials):\n                self.materials.transitions.append(segment.transition)\n            # 背景填充\n            if segment.background_filling is not None:\n                self.materials.canvases.append(segment.background_filling)\n            # 音频淡入淡出\n            if (segment.fade is not None) and (segment.fade not in self.materials):\n                self.materials.audio_fades.append(segment.fade)\n\n            self.materials.speeds.append(segment.speed)\n        elif isinstance(segment, StickerSegment):\n            self.materials.stickers.append(segment.export_material())\n        elif isinstance(segment, AudioSegment):\n            # 淡入淡出\n            if (segment.fade is not None) and (segment.fade not in self.materials):\n                self.materials.audio_fades.append(segment.fade)\n            # 特效\n            for effect in segment.effects:\n                if effect not in self.materials:\n                    self.materials.audio_effects.append(effect)\n            self.materials.speeds.append(segment.speed)\n        elif isinstance(segment, TextSegment):\n            # 出入场等动画\n            if (segment.animations_instance is not None) and (segment.animations_instance not in self.materials):\n                self.materials.animations.append(segment.animations_instance)\n            # 气泡效果\n            if segment.bubble is not None:\n                self.materials.filters.append(segment.bubble)\n            # 花字效果\n            if segment.effect is not None:\n                self.materials.filters.append(segment.effect)\n            # 字体样式\n            self.materials.texts.append(segment.export_material())\n        elif isinstance(segment, EffectSegment):\n            # 特效素材\n            if segment.effect_inst not in self.materials:\n                self.materials.video_effects.append(segment.effect_inst)\n        elif isinstance(segment, FilterSegment):\n            # 滤镜素材\n            if segment.material not in self.materials:\n                self.materials.filters.append(segment.material)\n\n        # 添加片段素材\n        if isinstance(segment, (VideoSegment, AudioSegment)):\n            self.add_material(segment.material_instance)\n\n        return self\n\n    def add_effect(self, effect: Union[VideoSceneEffectType, VideoCharacterEffectType],\n                   t_range: Timerange, track_name: Optional[str] = None, *,\n                   params: Optional[List[Optional[float]]] = None) -> \"ScriptFile\":\n        \"\"\"向指定的特效轨道中添加一个特效片段\n\n        Args:\n            effect (`VideoSceneEffectType` or `VideoCharacterEffectType`): 特效类型\n            t_range (`Timerange`): 特效片段的时间范围\n            track_name (`str`, optional): 添加到的轨道名称. 当特效轨道仅有一条时可省略.\n            params (`List[Optional[float]]`, optional): 特效参数列表, 参数列表中未提供或为None的项使用默认值.\n                参数取值范围(0~100)与剪映中一致. 某个特效类型有何参数以及具体参数顺序以枚举类成员的annotation为准.\n\n        Raises:\n            `NameError`: 未找到指定名称的轨道, 或必须提供`track_name`参数时未提供\n            `TypeError`: 指定的轨道不是特效轨道\n            `ValueError`: 新片段与已有片段重叠、提供的参数数量超过了该特效类型的参数数量, 或参数值超出范围.\n        \"\"\"\n        target = self._get_track(EffectSegment, track_name)\n\n        # 加入轨道并更新时长\n        segment = EffectSegment(effect, t_range, params)\n        target.add_segment(segment)\n        self.duration = max(self.duration, t_range.start + t_range.duration)\n\n        # 自动添加相关素材\n        if segment.effect_inst not in self.materials:\n            self.materials.video_effects.append(segment.effect_inst)\n        return self\n\n    def add_filter(self, filter_meta: FilterType, t_range: Timerange,\n                   track_name: Optional[str] = None, intensity: float = 100.0) -> \"ScriptFile\":\n        \"\"\"向指定的滤镜轨道中添加一个滤镜片段\n\n        Args:\n            filter_meta (`FilterType`): 滤镜类型\n            t_range (`Timerange`): 滤镜片段的时间范围\n            track_name (`str`, optional): 添加到的轨道名称. 当滤镜轨道仅有一条时可省略.\n            intensity (`float`, optional): 滤镜强度(0-100). 仅当所选滤镜能够调节强度时有效. 默认为100.\n\n        Raises:\n            `NameError`: 未找到指定名称的轨道, 或必须提供`track_name`参数时未提供\n            `TypeError`: 指定的轨道不是滤镜轨道\n            `ValueError`: 新片段与已有片段重叠\n        \"\"\"\n        target = self._get_track(FilterSegment, track_name)\n\n        # 加入轨道并更新时长\n        segment = FilterSegment(filter_meta, t_range, intensity / 100.0)  # 转换为0-1范围\n        target.add_segment(segment)\n        self.duration = max(self.duration, t_range.end)\n\n        # 自动添加相关素材\n        self.materials.filters.append(segment.material)\n        return self\n\n    def import_srt(self, srt_path: str, track_name: str, *,\n                   time_offset: Union[str, float] = 0.0,\n                   style_reference: Optional[TextSegment] = None,\n                   text_style: TextStyle = TextStyle(size=5, align=1, auto_wrapping=True),\n                   clip_settings: Optional[ClipSettings] = ClipSettings(transform_y=-0.8)) -> \"ScriptFile\":\n        \"\"\"从SRT文件中导入字幕, 支持传入一个`TextSegment`作为样式参考\n\n        注意: 默认不会使用参考片段的`clip_settings`属性, 若需要请显式为此函数传入`clip_settings=None`\n\n        Args:\n            srt_path (`str`): SRT文件路径\n            track_name (`str`): 导入到的文本轨道名称, 若不存在则自动创建\n            style_reference (`TextSegment`, optional): 作为样式参考的文本片段, 若提供则使用其样式.\n            time_offset (`Union[str, float]`, optional): 字幕整体时间偏移, 单位为微秒, 默认为0.\n            text_style (`TextStyle`, optional): 字幕样式, 默认模仿剪映导入字幕时的样式, 会被`style_reference`覆盖.\n            clip_settings (`ClipSettings`, optional): 图像调节设置, 默认模仿剪映导入字幕时的设置, 会覆盖`style_reference`的设置除非指定为`None`.\n\n        Raises:\n            `NameError`: 已存在同名轨道\n            `TypeError`: 轨道类型不匹配\n        \"\"\"\n        if style_reference is None and clip_settings is None:\n            raise ValueError(\"未提供样式参考时请提供`clip_settings`参数\")\n\n        time_offset = tim(time_offset)\n        if track_name not in self.tracks:\n            self.add_track(TrackType.text, track_name, relative_index=999)  # 在所有文本轨道的最上层\n\n        with open(srt_path, \"r\", encoding=\"utf-8-sig\") as srt_file:\n            lines = srt_file.readlines()\n\n        def __add_text_segment(text: str, t_range: Timerange) -> None:\n            if style_reference:\n                seg = TextSegment.create_from_template(text, t_range, style_reference)\n                if clip_settings is not None:\n                    seg.clip_settings = deepcopy(clip_settings)\n            else:\n                seg = TextSegment(text, t_range, style=text_style, clip_settings=clip_settings)\n            self.add_segment(seg, track_name)\n\n        index = 0\n        text: str = \"\"\n        text_trange: Timerange\n        read_state: Literal[\"index\", \"timestamp\", \"content\"] = \"index\"\n        while index < len(lines):\n            line = lines[index].strip()\n            if read_state == \"index\":\n                if len(line) == 0:\n                    index += 1\n                    continue\n                if not line.isdigit():\n                    raise ValueError(\"Expected a number at line %d, got '%s'\" % (index+1, line))\n                index += 1\n                read_state = \"timestamp\"\n            elif read_state == \"timestamp\":\n                # 读取时间戳\n                start_str, end_str = line.split(\" --> \")\n                start, end = srt_tstamp(start_str), srt_tstamp(end_str)\n                text_trange = Timerange(start + time_offset, end - start)\n\n                index += 1\n                read_state = \"content\"\n            elif read_state == \"content\":\n                # 内容结束, 生成片段\n                if len(line) == 0:\n                    __add_text_segment(text.strip(), text_trange)\n\n                    text = \"\"\n                    read_state = \"index\"\n                else:\n                    text += line + \"\\n\"\n                index += 1\n\n        # 添加最后一个片段\n        if len(text) > 0:\n            __add_text_segment(text.strip(), text_trange)\n\n        return self\n\n    def get_imported_track(self, track_type: Literal[TrackType.video, TrackType.audio, TrackType.text],\n                           name: Optional[str] = None, index: Optional[int] = None) -> EditableTrack:\n        \"\"\"获取指定类型的导入轨道, 以便在其上进行替换\n\n        推荐使用轨道名称进行筛选（若已知轨道名称）\n\n        Args:\n            track_type (`TrackType.video`, `TrackType.audio` or `TrackType.text`): 轨道类型, 目前只支持音视频和文本轨道\n            name (`str`, optional): 轨道名称, 不指定则不根据名称筛选.\n            index (`int`, optional): 轨道在**同类型的导入轨道**中的下标, 以0为最下层轨道. 不指定则不根据下标筛选.\n\n        Raises:\n            `TrackNotFound`: 未找到满足条件的轨道\n            `AmbiguousTrack`: 找到多个满足条件的轨道\n        \"\"\"\n        tracks_of_same_type: List[EditableTrack] = []\n        for track in self.imported_tracks:\n            if track.track_type == track_type:\n                assert isinstance(track, EditableTrack)\n                tracks_of_same_type.append(track)\n\n        ret: List[EditableTrack] = []\n        for ind, track in enumerate(tracks_of_same_type):\n            if (name is not None) and (track.name != name): continue\n            if (index is not None) and (ind != index): continue\n            ret.append(track)\n\n        if len(ret) == 0:\n            raise exceptions.TrackNotFound(\n                \"没有找到满足条件的轨道: track_type=%s, name=%s, index=%s\" % (track_type, name, index))\n        if len(ret) > 1:\n            raise exceptions.AmbiguousTrack(\n                \"找到多个满足条件的轨道: track_type=%s, name=%s, index=%s\" % (track_type, name, index))\n\n        return ret[0]\n\n    def import_track(self, source_file: \"ScriptFile\", track: EditableTrack, *,\n                     offset: Union[str, int] = 0,\n                     new_name: Optional[str] = None, relative_index: Optional[int] = None) -> \"ScriptFile\":\n        \"\"\"将一个`EditableTrack`导入到当前`ScriptFile`中, 如从模板草稿中导入特定的文本或视频轨道到当前正在编辑的草稿文件中\n\n        注意: 本方法会保留各片段及其素材的id, 因而不支持向同一草稿多次导入同一轨道\n\n        Args:\n            source_file (`ScriptFile`): 源文件，包含要导入的轨道\n            track (`EditableTrack`): 要导入的轨道, 可通过`get_imported_track`方法获取.\n            offset (`str | int`, optional): 轨道的时间偏移量(微秒), 可以是整数微秒值或时间字符串(如\"1s\"). 默认不添加偏移.\n            new_name (`str`, optional): 新轨道名称, 默认使用源轨道名称.\n            relative_index (`int`, optional): 相对索引，用于调整导入轨道的渲染层级. 默认保持原有层级.\n        \"\"\"\n        # 直接拷贝原始轨道结构, 按需修改渲染层级\n        imported_track = deepcopy(track)\n        if relative_index is not None:\n            imported_track.render_index = track.track_type.value.render_index + relative_index\n        if new_name is not None:\n            imported_track.name = new_name\n\n        # 应用偏移量\n        offset_us = tim(offset)\n        if offset_us != 0:\n            for seg in imported_track.segments:\n                seg.target_timerange.start = max(0, seg.target_timerange.start + offset_us)\n        self.imported_tracks.append(imported_track)\n\n        # 收集所有需要复制的素材ID\n        material_ids = set()\n        segments: List[Dict[str, Any]] = track.raw_data.get(\"segments\", [])\n        for segment in segments:\n            # 主素材ID\n            material_id = segment.get(\"material_id\")\n            if material_id:\n                material_ids.add(material_id)\n\n            # extra_material_refs中的素材ID\n            extra_refs: List[str] = segment.get(\"extra_material_refs\", [])\n            material_ids.update(extra_refs)\n\n        # 复制素材\n        for material_type, material_list in source_file.imported_materials.items():\n            for material in material_list:\n                if material.get(\"id\") in material_ids:\n                    if material_type not in self.imported_materials:\n                        self.imported_materials[material_type] = []\n                    self.imported_materials[material_type].append(deepcopy(material))\n                    material_ids.remove(material.get(\"id\"))\n\n        assert len(material_ids) == 0, \"未找到以下素材: %s\" % material_ids\n\n        # 更新总时长\n        self.duration = max(self.duration, track.end_time)\n\n        return self\n\n    def replace_material_by_name(self, material_name: str, material: Union[VideoMaterial, AudioMaterial],\n                                 replace_crop: bool = False) -> \"ScriptFile\":\n        \"\"\"替换指定名称的素材, 并影响所有引用它的片段\n\n        这种方法不会改变相应片段的时长和引用范围(`source_timerange`), 尤其适合于图片素材\n\n        Args:\n            material_name (`str`): 要替换的素材名称\n            material (`VideoMaterial` or `AudioMaterial`): 新素材, 目前只支持视频和音频\n            replace_crop (`bool`, optional): 是否替换原素材的裁剪设置, 默认为否. 仅对视频素材有效.\n\n        Raises:\n            `MaterialNotFound`: 根据指定名称未找到与新素材同类的素材\n            `AmbiguousMaterial`: 根据指定名称找到多个与新素材同类的素材\n        \"\"\"\n        video_mode = isinstance(material, VideoMaterial)\n        # 查找素材\n        target_json_obj: Optional[Dict[str, Any]] = None\n        target_material_list = self.imported_materials[\"videos\" if video_mode else \"audios\"]\n        name_key = \"material_name\" if video_mode else \"name\"\n        for mat in target_material_list:\n            if mat[name_key] == material_name:\n                if target_json_obj is not None:\n                    raise exceptions.AmbiguousMaterial(\n                        \"找到多个名为 '%s', 类型为 '%s' 的素材\" % (material_name, type(material)))\n                target_json_obj = mat\n        if target_json_obj is None:\n            raise exceptions.MaterialNotFound(\"没有找到名为 '%s', 类型为 '%s' 的素材\" % (material_name, type(material)))\n\n        # 更新素材信息\n        target_json_obj.update({name_key: material.material_name, \"path\": material.path, \"duration\": material.duration})\n        if video_mode:\n            target_json_obj.update({\"width\": material.width, \"height\": material.height, \"material_type\": material.material_type})\n            if replace_crop:\n                target_json_obj.update({\"crop\": material.crop_settings.export_json()})\n\n        return self\n\n    def replace_material_by_seg(self, track: EditableTrack, segment_index: int, material: Union[VideoMaterial, AudioMaterial],\n                                source_timerange: Optional[Timerange] = None, *,\n                                handle_shrink: ShrinkMode = ShrinkMode.cut_tail,\n                                handle_extend: Union[ExtendMode, List[ExtendMode]] = ExtendMode.cut_material_tail) -> \"ScriptFile\":\n        \"\"\"替换指定音视频轨道上指定片段的素材, 暂不支持变速片段的素材替换\n\n        Args:\n            track (`EditableTrack`): 要替换素材的轨道, 由`get_imported_track`获取\n            segment_index (`int`): 要替换素材的片段下标, 从0开始\n            material (`VideoMaterial` or `AudioMaterial`): 新素材, 必须与原素材类型一致\n            source_timerange (`Timerange`, optional): 从原素材中截取的时间范围, 默认为全时段, 若是图片素材则默认与原片段等长.\n            handle_shrink (`Shrink_mode`, optional): 新素材比原素材短时的处理方式, 默认为裁剪尾部, 使片段长度与素材一致.\n            handle_extend (`Extend_mode` or `List[Extend_mode]`, optional): 新素材比原素材长时的处理方式, 将按顺序逐个尝试直至成功或抛出异常.\n                默认为截断素材尾部, 使片段维持原长不变\n\n        Raises:\n            `IndexError`: `segment_index`越界\n            `TypeError`: 轨道或素材类型不正确\n            `ExtensionFailed`: 新素材比原素材长时处理失败\n        \"\"\"\n        if not isinstance(track, ImportedMediaTrack):\n            raise TypeError(\"指定的轨道(类型为 %s)不支持素材替换\" % track.track_type)\n        if not 0 <= segment_index < len(track):\n            raise IndexError(\"片段下标 %d 超出 [0, %d) 的范围\" % (segment_index, len(track)))\n        if not track.check_material_type(material):\n            raise TypeError(\"指定的素材类型 %s 不匹配轨道类型 %s\", (type(material), track.track_type))\n        seg = track.segments[segment_index]\n\n        if isinstance(handle_extend, ExtendMode):\n            handle_extend = [handle_extend]\n        if source_timerange is None:\n            if isinstance(material, VideoMaterial) and (material.material_type == \"photo\"):\n                source_timerange = Timerange(0, seg.duration)\n            else:\n                source_timerange = Timerange(0, material.duration)\n\n        # 处理时间变化\n        track.process_timerange(segment_index, source_timerange, handle_shrink, handle_extend)\n\n        # 最后替换素材链接\n        track.segments[segment_index].material_id = material.material_id\n        self.add_material(material)\n\n        # TODO: 更新总长\n        return self\n\n    def replace_text(self, track: EditableTrack, segment_index: int, text: Union[str, List[str]],\n                     recalc_style: bool = True) -> \"ScriptFile\":\n        \"\"\"替换指定文本轨道上指定片段的文字内容, 支持普通文本片段或文本模板片段\n\n        Args:\n            track (`EditableTrack`): 要替换文字的文本轨道, 由`get_imported_track`获取\n            segment_index (`int`): 要替换文字的片段下标, 从0开始\n            text (`str` or `List[str]`): 新的文字内容, 对于文本模板而言应传入一个字符串列表.\n            recalc_style (`bool`): 是否重新计算字体样式分布, 即调整各字体样式应用范围以尽量维持原有占比不变, 默认开启.\n\n        Raises:\n            `IndexError`: `segment_index`越界\n            `TypeError`: 轨道类型不正确\n            `ValueError`: 文本模板片段的文本数量不匹配\n        \"\"\"\n        if not isinstance(track, ImportedTextTrack):\n            raise TypeError(\"指定的轨道(类型为 %s)不支持文本内容替换\" % track.track_type)\n        if not 0 <= segment_index < len(track):\n            raise IndexError(\"片段下标 %d 超出 [0, %d) 的范围\" % (segment_index, len(track)))\n\n        def __recalc_style_range(old_len: int, new_len: int, styles: List[Dict[str, Any]]) -> List[Dict[str, Any]]:\n            \"\"\"调整字体样式分布\"\"\"\n            new_styles: List[Dict[str, Any]] = []\n            for style in styles:\n                start = math.ceil(style[\"range\"][0] / old_len * new_len)\n                end = math.ceil(style[\"range\"][1] / old_len * new_len)\n                style[\"range\"] = [start, end]\n                if start != end:\n                    new_styles.append(style)\n            return new_styles\n\n        replaced: bool = False\n        material_id: str = track.segments[segment_index].material_id\n        # 尝试在文本素材中替换\n        for mat in self.imported_materials[\"texts\"]:\n            if mat[\"id\"] != material_id:\n                continue\n\n            if isinstance(text, list):\n                if len(text) != 1:\n                    raise ValueError(f\"正常文本片段只能有一个文字内容, 但替换内容是 {text}\")\n                text = text[0]\n\n            content = json.loads(mat[\"content\"])\n            if recalc_style:\n                content[\"styles\"] = __recalc_style_range(len(content[\"text\"]), len(text), content[\"styles\"])\n            content[\"text\"] = text\n            mat[\"content\"] = json.dumps(content, ensure_ascii=False)\n            replaced = True\n            break\n        if replaced:\n            return self\n\n        # 尝试在文本模板中替换\n        for template in self.imported_materials[\"text_templates\"]:\n            if template[\"id\"] != material_id:\n                continue\n\n            resources = template[\"text_info_resources\"]\n            if isinstance(text, str):\n                text = [text]\n            if len(text) > len(resources):\n                raise ValueError(f\"文字模板'{template['name']}'只有{len(resources)}段文本, 但提供了{len(text)}段替换内容\")\n\n            for sub_material_id, new_text in zip(map(lambda x: x[\"text_material_id\"], resources), text):\n                for mat in self.imported_materials[\"texts\"]:\n                    if mat[\"id\"] != sub_material_id:\n                        continue\n\n                    try:\n                        content = json.loads(mat[\"content\"])\n                        if recalc_style:\n                            content[\"styles\"] = __recalc_style_range(len(content[\"text\"]), len(new_text), content[\"styles\"])\n                        content[\"text\"] = new_text\n                        mat[\"content\"] = json.dumps(content, ensure_ascii=False)\n                    except json.JSONDecodeError:\n                        mat[\"content\"] = new_text\n                    except TypeError:\n                        mat[\"content\"] = new_text\n\n                    break\n            replaced = True\n            break\n\n        assert replaced, f\"未找到指定片段的素材 {material_id}\"\n\n        return self\n\n    def inspect_material(self) -> None:\n        \"\"\"输出草稿中导入的贴纸、文本气泡以及花字素材的元数据\"\"\"\n        print(\"贴纸素材:\")\n        for sticker in self.imported_materials[\"stickers\"]:\n            print(\"\\tResource id: %s '%s'\" % (sticker[\"resource_id\"], sticker.get(\"name\", \"\")))\n\n        print(\"文字气泡效果:\")\n        for effect in self.imported_materials[\"effects\"]:\n            if effect[\"type\"] == \"text_shape\":\n                print(\"\\tEffect id: %s ,Resource id: %s '%s'\" %\n                      (effect[\"effect_id\"], effect[\"resource_id\"], effect.get(\"name\", \"\")))\n\n        print(\"花字效果:\")\n        for effect in self.imported_materials[\"effects\"]:\n            if effect[\"type\"] == \"text_effect\":\n                print(\"\\tResource id: %s '%s'\" % (effect[\"resource_id\"], effect.get(\"name\", \"\")))\n\n    def dumps(self) -> str:\n        \"\"\"将草稿文件内容导出为JSON字符串\"\"\"\n        self.content[\"fps\"] = self.fps\n        self.content[\"duration\"] = self.duration\n        self.content[\"config\"][\"maintrack_adsorb\"] = self.maintrack_adsorb\n        self.content[\"canvas_config\"] = {\"width\": self.width, \"height\": self.height, \"ratio\": \"original\"}\n        self.content[\"materials\"] = self.materials.export_json()\n\n        # 合并导入的素材\n        for material_type, material_list in self.imported_materials.items():\n            if material_type not in self.content[\"materials\"]:\n                self.content[\"materials\"][material_type] = material_list\n            else:\n                self.content[\"materials\"][material_type].extend(material_list)\n\n        # 对轨道排序并导出\n        track_list: List[BaseTrack] = list(self.imported_tracks + list(self.tracks.values()))  # 新加入的轨道在列表末尾（上层）\n        track_list.sort(key=lambda track: track.render_index)\n        self.content[\"tracks\"] = [track.export_json() for track in track_list]\n\n        return json.dumps(self.content, ensure_ascii=False, indent=4)\n\n    def dump(self, file_path: str) -> None:\n        \"\"\"将草稿文件内容写入文件\"\"\"\n        with open(file_path, \"w\", encoding=\"utf-8\") as f:\n            f.write(self.dumps())\n\n    def save(self) -> None:\n        \"\"\"保存草稿文件至打开时的路径\n\n        Raises:\n            `ValueError`: 没有设置保存路径\n        \"\"\"\n        if self.save_path is None:\n            raise ValueError(\"没有设置保存路径, 可能不在模板模式下\")\n        \n        # 保存到主要文件\n        self.dump(self.save_path)\n        \n        # 如果启用了双文件兼容模式，同时保存到另一个文件\n        if self.dual_file_compatibility:\n            draft_dir = os.path.dirname(self.save_path)\n            if \"draft_content.json\" in self.save_path and \"draft_info.json\" not in self.save_path:\n                # 当前保存的是 draft_content.json，同时保存到 draft_info.json\n                alt_path = os.path.join(draft_dir, \"draft_info.json\")\n                self.dump(alt_path)\n            elif \"draft_info.json\" in self.save_path and \"draft_content.json\" not in self.save_path:\n                # 当前保存的是 draft_info.json，同时保存到 draft_content.json\n                alt_path = os.path.join(draft_dir, \"draft_content.json\")\n                self.dump(alt_path)\n"
  },
  {
    "path": "src/pyJianYingDraft/segment.py",
    "content": "\"\"\"定义片段基类及部分比较通用的属性类\"\"\"\n\nimport uuid\nfrom typing import Optional, Dict, List, Any, Union\n\nfrom .animation import SegmentAnimations\nfrom .time_util import Timerange, tim\nfrom .keyframe import KeyframeList, KeyframeProperty\n\nclass BaseSegment:\n    \"\"\"片段基类\"\"\"\n\n    segment_id: str\n    \"\"\"片段全局id, 由程序自动生成\"\"\"\n    material_id: str\n    \"\"\"使用的素材id\"\"\"\n    target_timerange: Timerange\n    \"\"\"片段在轨道上的时间范围\"\"\"\n\n    common_keyframes: List[KeyframeList]\n    \"\"\"各属性的关键帧列表\"\"\"\n\n    def __init__(self, material_id: str, target_timerange: Timerange):\n        self.segment_id = uuid.uuid4().hex\n        self.material_id = material_id\n        self.target_timerange = target_timerange\n\n        self.common_keyframes = []\n\n    @property\n    def start(self) -> int:\n        \"\"\"片段开始时间, 单位为微秒\"\"\"\n        return self.target_timerange.start\n    @start.setter\n    def start(self, value: int):\n        self.target_timerange.start = value\n\n    @property\n    def duration(self) -> int:\n        \"\"\"片段持续时间, 单位为微秒\"\"\"\n        return self.target_timerange.duration\n    @duration.setter\n    def duration(self, value: int):\n        self.target_timerange.duration = value\n\n    @property\n    def end(self) -> int:\n        \"\"\"片段结束时间, 单位为微秒\"\"\"\n        return self.target_timerange.end\n\n    def overlaps(self, other: \"BaseSegment\") -> bool:\n        \"\"\"判断是否与另一个片段有重叠\"\"\"\n        return self.target_timerange.overlaps(other.target_timerange)\n\n    def export_json(self) -> Dict[str, Any]:\n        \"\"\"返回通用于各种片段的属性\"\"\"\n        return {\n            \"enable_adjust\": True,\n            \"enable_color_correct_adjust\": False,\n            \"enable_color_curves\": True,\n            \"enable_color_match_adjust\": False,\n            \"enable_color_wheels\": True,\n            \"enable_lut\": True,\n            \"enable_smart_color_adjust\": False,\n            \"last_nonzero_volume\": 1.0,\n            \"reverse\": False,\n            \"track_attribute\": 0,\n            \"track_render_index\": 0,\n            \"visible\": True,\n            # 写入自定义字段\n            \"id\": self.segment_id,\n            \"material_id\": self.material_id,\n            \"target_timerange\": self.target_timerange.export_json(),\n\n            \"common_keyframes\": [kf_list.export_json() for kf_list in self.common_keyframes],\n            \"keyframe_refs\": [],  # 意义不明\n        }\n\nclass Speed:\n    \"\"\"播放速度对象, 目前只支持固定速度\"\"\"\n\n    global_id: str\n    \"\"\"全局id, 由程序自动生成\"\"\"\n    speed: float\n    \"\"\"播放速度\"\"\"\n\n    def __init__(self, speed: float):\n        self.global_id = uuid.uuid4().hex\n        self.speed = speed\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"curve_speed\": None,\n            \"id\": self.global_id,\n            \"mode\": 0,\n            \"speed\": self.speed,\n            \"type\": \"speed\"\n        }\n\nclass AudioFade:\n    \"\"\"音频淡入淡出效果\"\"\"\n\n    fade_id: str\n    \"\"\"淡入淡出效果的全局id, 自动生成\"\"\"\n\n    in_duration: int\n    \"\"\"淡入时长, 单位为微秒\"\"\"\n    out_duration: int\n    \"\"\"淡出时长, 单位为微秒\"\"\"\n\n    def __init__(self, in_duration: int, out_duration: int):\n        \"\"\"根据给定的淡入/淡出时长构造一个淡入淡出效果\"\"\"\n\n        self.fade_id = uuid.uuid4().hex\n        self.in_duration = in_duration\n        self.out_duration = out_duration\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"id\": self.fade_id,\n            \"fade_in_duration\": self.in_duration,\n            \"fade_out_duration\": self.out_duration,\n            \"fade_type\": 0,\n            \"type\": \"audio_fade\"\n        }\n\nclass ClipSettings:\n    \"\"\"素材片段的图像调节设置\"\"\"\n\n    alpha: float\n    \"\"\"图像不透明度, 0-1\"\"\"\n    flip_horizontal: bool\n    \"\"\"是否水平翻转\"\"\"\n    flip_vertical: bool\n    \"\"\"是否垂直翻转\"\"\"\n    rotation: float\n    \"\"\"顺时针旋转的**角度**, 可正可负\"\"\"\n    scale_x: float\n    \"\"\"水平缩放比例\"\"\"\n    scale_y: float\n    \"\"\"垂直缩放比例\"\"\"\n    transform_x: float\n    \"\"\"水平位移, 单位为半个画布宽\"\"\"\n    transform_y: float\n    \"\"\"垂直位移, 单位为半个画布高\"\"\"\n\n    def __init__(self, *, alpha: float = 1.0,\n                 flip_horizontal: bool = False, flip_vertical: bool = False,\n                 rotation: float = 0.0,\n                 scale_x: float = 1.0, scale_y: float = 1.0,\n                 transform_x: float = 0.0, transform_y: float = 0.0):\n        \"\"\"初始化图像调节设置, 默认不作任何图像变换\n\n        Args:\n            alpha (float, optional): 图像不透明度, 0-1. 默认为1.0.\n            flip_horizontal (bool, optional): 是否水平翻转. 默认为False.\n            flip_vertical (bool, optional): 是否垂直翻转. 默认为False.\n            rotation (float, optional): 顺时针旋转的**角度**, 可正可负. 默认为0.0.\n            scale_x (float, optional): 水平缩放比例. 默认为1.0.\n            scale_y (float, optional): 垂直缩放比例. 默认为1.0.\n            transform_x (float, optional): 水平位移, 单位为半个画布宽. 默认为0.0.\n            transform_y (float, optional): 垂直位移, 单位为半个画布高. 默认为0.0.\n                参考: 剪映导入的字幕似乎取此值为-0.8\n        \"\"\"\n        self.alpha = alpha\n        self.flip_horizontal, self.flip_vertical = flip_horizontal, flip_vertical\n        self.rotation = rotation\n        self.scale_x, self.scale_y = scale_x, scale_y\n        self.transform_x, self.transform_y = transform_x, transform_y\n\n    def export_json(self) -> Dict[str, Any]:\n        clip_settings_json = {\n            \"alpha\": self.alpha,\n            \"flip\": {\"horizontal\": self.flip_horizontal, \"vertical\": self.flip_vertical},\n            \"rotation\": self.rotation,\n            \"scale\": {\"x\": self.scale_x, \"y\": self.scale_y},\n            \"transform\": {\"x\": self.transform_x, \"y\": self.transform_y}\n        }\n        return clip_settings_json\n\nclass MediaSegment(BaseSegment):\n    \"\"\"媒体片段基类\"\"\"\n\n    source_timerange: Optional[Timerange]\n    \"\"\"截取的素材片段的时间范围, 对贴纸而言不存在\"\"\"\n    speed: Speed\n    \"\"\"播放速度设置\"\"\"\n    volume: float\n    \"\"\"音量\"\"\"\n    change_pitch: bool\n    \"\"\"是否跟随变速改变音调\"\"\"\n\n    extra_material_refs: List[str]\n    \"\"\"附加的素材id列表, 用于链接动画/特效等\"\"\"\n\n    def __init__(self, material_id: str, source_timerange: Optional[Timerange], target_timerange: Timerange,\n                 speed: float, volume: float, change_pitch: bool):\n        super().__init__(material_id, target_timerange)\n\n        self.source_timerange = source_timerange\n        self.speed = Speed(speed)\n        self.volume = volume\n        self.change_pitch = change_pitch\n\n        self.extra_material_refs = [self.speed.global_id]\n\n    def export_json(self) -> Dict[str, Any]:\n        \"\"\"返回通用于音频和视频片段的默认属性\"\"\"\n        ret = super().export_json()\n        ret.update({\n            \"source_timerange\": self.source_timerange.export_json() if self.source_timerange else None,\n            \"speed\": self.speed.speed,\n            \"volume\": self.volume,\n            \"extra_material_refs\": self.extra_material_refs,\n            \"is_tone_modify\": self.change_pitch,\n        })\n        return ret\n\nclass VisualSegment(MediaSegment):\n    \"\"\"视觉片段基类，用于处理所有可见片段（视频、贴纸、文本）的共同属性和行为\"\"\"\n\n    clip_settings: ClipSettings\n    \"\"\"图像调节设置, 其效果可被关键帧覆盖\"\"\"\n\n    uniform_scale: bool\n    \"\"\"是否锁定XY轴缩放比例\"\"\"\n\n    animations_instance: Optional[SegmentAnimations]\n    \"\"\"动画实例, 可能为空\n\n    在放入轨道时自动添加到素材列表中\n    \"\"\"\n\n    def __init__(self, material_id: str, source_timerange: Optional[Timerange], target_timerange: Timerange,\n                 speed: float, volume: float, change_pitch: bool, *, clip_settings: Optional[ClipSettings]):\n        \"\"\"初始化视觉片段基类\n\n        Args:\n            material_id (`str`): 素材id\n            source_timerange (`Timerange`, optional): 截取的素材片段的时间范围\n            target_timerange (`Timerange`): 片段在轨道上的目标时间范围\n            speed (`float`): 播放速度\n            volume (`float`): 音量\n            change_pitch (`bool`): 是否跟随变速改变音调\n            clip_settings (`ClipSettings`, optional): 图像调节设置, 默认不作任何变换\n        \"\"\"\n        super().__init__(material_id, source_timerange, target_timerange, speed, volume, change_pitch)\n\n        self.clip_settings = clip_settings if clip_settings is not None else ClipSettings()\n        self.uniform_scale = True\n        self.animations_instance = None\n\n    def add_keyframe(self, _property: KeyframeProperty, time_offset: Union[int, str], value: float) -> \"VisualSegment\":\n        \"\"\"为给定属性创建一个关键帧, 并自动加入到关键帧列表中\n\n        Args:\n            _property (`KeyframeProperty`): 要控制的属性\n            time_offset (`int` or `str`): 关键帧的时间偏移量, 单位为微秒. 若传入字符串则会调用`tim()`函数进行解析.\n            value (`float`): 属性在`time_offset`处的值\n\n        Raises:\n            `ValueError`: 试图同时设置`uniform_scale`以及`scale_x`或`scale_y`其中一者\n        \"\"\"\n        if (_property == KeyframeProperty.scale_x or _property == KeyframeProperty.scale_y) and self.uniform_scale:\n            self.uniform_scale = False\n        elif _property == KeyframeProperty.uniform_scale:\n            if not self.uniform_scale:\n                raise ValueError(\"已设置 scale_x 或 scale_y 时, 不能再设置 uniform_scale\")\n            _property = KeyframeProperty.scale_x\n\n        if isinstance(time_offset, str): time_offset = tim(time_offset)\n\n        for kf_list in self.common_keyframes:\n            if kf_list.keyframe_property == _property:\n                kf_list.add_keyframe(time_offset, value)\n                return self\n        kf_list = KeyframeList(_property)\n        kf_list.add_keyframe(time_offset, value)\n        self.common_keyframes.append(kf_list)\n        return self\n\n    def export_json(self) -> Dict[str, Any]:\n        \"\"\"导出通用于所有视觉片段的JSON数据\"\"\"\n        json_dict = super().export_json()\n        json_dict.update({\n            \"clip\": self.clip_settings.export_json(),\n            \"uniform_scale\": {\"on\": self.uniform_scale, \"value\": 1.0},\n        })\n        return json_dict\n"
  },
  {
    "path": "src/pyJianYingDraft/template_mode.py",
    "content": "\"\"\"与模板模式相关的类及函数等\"\"\"\n\nfrom enum import Enum\nfrom copy import deepcopy\n\nfrom . import util\nfrom . import exceptions\nfrom .time_util import Timerange\nfrom .segment import BaseSegment\nfrom .track import BaseTrack, TrackType\nfrom .local_materials import VideoMaterial, AudioMaterial\n\nfrom typing import List, Dict, Any\n\nclass ShrinkMode(Enum):\n    \"\"\"处理替换素材时素材变短情况的方法\"\"\"\n\n    cut_head = \"cut_head\"\n    \"\"\"裁剪头部, 即后移片段起始点\"\"\"\n    cut_tail = \"cut_tail\"\n    \"\"\"裁剪尾部, 即前移片段终止点\"\"\"\n\n    cut_tail_align = \"cut_tail_align\"\n    \"\"\"裁剪尾部并消除间隙, 即前移片段终止点, 后续片段也依次前移\"\"\"\n\n    shrink = \"shrink\"\n    \"\"\"保持中间点不变, 两端点向中间靠拢\"\"\"\n\nclass ExtendMode(Enum):\n    \"\"\"处理替换素材时素材变长情况的方法\"\"\"\n\n    cut_material_tail = \"cut_material_tail\"\n    \"\"\"裁剪素材尾部(覆盖`source_timerange`参数), 使得片段维持原长不变, 此方法总是成功\"\"\"\n\n    extend_head = \"extend_head\"\n    \"\"\"延伸头部, 即尝试前移片段起始点, 与前续片段重合时失败\"\"\"\n    extend_tail = \"extend_tail\"\n    \"\"\"延伸尾部, 即尝试后移片段终止点, 与后续片段重合时失败\"\"\"\n\n    push_tail = \"push_tail\"\n    \"\"\"延伸尾部, 若有必要则依次后移后续片段, 此方法总是成功\"\"\"\n\nclass ImportedSegment(BaseSegment):\n    \"\"\"导入的片段\"\"\"\n\n    raw_data: Dict[str, Any]\n    \"\"\"原始json数据\"\"\"\n\n    __DATA_ATTRS = [\"material_id\", \"target_timerange\"]\n    def __init__(self, json_data: Dict[str, Any]):\n        self.raw_data = deepcopy(json_data)\n\n        util.assign_attr_with_json(self, self.__DATA_ATTRS, json_data)\n\n    def export_json(self) -> Dict[str, Any]:\n        json_data = deepcopy(self.raw_data)\n        json_data.update(util.export_attr_to_json(self, self.__DATA_ATTRS))\n        return json_data\n\nclass ImportedMediaSegment(ImportedSegment):\n    \"\"\"导入的视频/音频片段\"\"\"\n\n    source_timerange: Timerange\n    \"\"\"片段取用的素材时间范围\"\"\"\n\n    __DATA_ATTRS = [\"source_timerange\"]\n    def __init__(self, json_data: Dict[str, Any]):\n        super().__init__(json_data)\n\n        util.assign_attr_with_json(self, self.__DATA_ATTRS, json_data)\n\n    def export_json(self) -> Dict[str, Any]:\n        json_data = super().export_json()\n        json_data.update(util.export_attr_to_json(self, self.__DATA_ATTRS))\n        return json_data\n\n\nclass ImportedTrack(BaseTrack):\n    \"\"\"模板模式下导入的轨道\"\"\"\n\n    raw_data: Dict[str, Any]\n    \"\"\"原始轨道数据\"\"\"\n\n    def __init__(self, json_data: Dict[str, Any]):\n        self.track_type = TrackType.from_name(json_data[\"type\"])\n        self.name = json_data[\"name\"]\n        self.track_id = json_data[\"id\"]\n        self.render_index = max([int(seg[\"render_index\"]) for seg in json_data[\"segments\"]], default=0)\n\n        self.raw_data = deepcopy(json_data)\n\n    def export_json(self) -> Dict[str, Any]:\n        ret = deepcopy(self.raw_data)\n        ret.update({\n            \"name\": self.name,\n            \"id\": self.track_id\n        })\n        return ret\n\nclass EditableTrack(ImportedTrack):\n    \"\"\"模板模式下导入且可修改的轨道(音视频及文本轨道)\"\"\"\n\n    segments: List[ImportedSegment]\n    \"\"\"该轨道包含的片段列表\"\"\"\n\n    def __len__(self):\n        return len(self.segments)\n\n    @property\n    def start_time(self) -> int:\n        \"\"\"轨道起始时间, 微秒\"\"\"\n        if len(self.segments) == 0:\n            return 0\n        return self.segments[0].target_timerange.start\n\n    @property\n    def end_time(self) -> int:\n        \"\"\"轨道结束时间, 微秒\"\"\"\n        if len(self.segments) == 0:\n            return 0\n        return self.segments[-1].target_timerange.end\n\n    def export_json(self) -> Dict[str, Any]:\n        ret = super().export_json()\n        # 为每个片段写入render_index\n        segment_exports = [seg.export_json() for seg in self.segments]\n        for seg in segment_exports:\n            seg[\"render_index\"] = self.render_index\n        ret[\"segments\"] = segment_exports\n        return ret\n\nclass ImportedTextTrack(EditableTrack):\n    \"\"\"模板模式下导入的文本轨道\"\"\"\n\n    def __init__(self, json_data: Dict[str, Any]):\n        super().__init__(json_data)\n        self.segments = [ImportedSegment(seg) for seg in json_data[\"segments\"]]\n\nclass ImportedMediaTrack(EditableTrack):\n    \"\"\"模板模式下导入的音频/视频轨道\"\"\"\n\n    segments: List[ImportedMediaSegment]\n    \"\"\"该轨道包含的片段列表\"\"\"\n\n    def __init__(self, json_data: Dict[str, Any]):\n        super().__init__(json_data)\n        self.segments = [ImportedMediaSegment(seg) for seg in json_data[\"segments\"]]\n\n    def check_material_type(self, material: object) -> bool:\n        \"\"\"检查素材类型是否与轨道类型匹配\"\"\"\n        if self.track_type == TrackType.video and isinstance(material, VideoMaterial):\n            return True\n        if self.track_type == TrackType.audio and isinstance(material, AudioMaterial):\n            return True\n        return False\n\n    def process_timerange(self, seg_index: int, src_timerange: Timerange,\n                          shrink: ShrinkMode, extend: List[ExtendMode]) -> None:\n        \"\"\"处理素材替换的时间范围变更\"\"\"\n        seg = self.segments[seg_index]\n        new_duration = src_timerange.duration\n\n        # 时长变短\n        delta_duration = abs(new_duration - seg.duration)\n        if new_duration < seg.duration:\n            if shrink == ShrinkMode.cut_head:\n                seg.start += delta_duration\n            elif shrink == ShrinkMode.cut_tail:\n                seg.duration -= delta_duration\n            elif shrink == ShrinkMode.cut_tail_align:\n                seg.duration -= delta_duration\n                for i in range(seg_index+1, len(self.segments)):  # 后续片段也依次前移相应值（保持间隙）\n                    self.segments[i].start -= delta_duration\n            elif shrink == ShrinkMode.shrink:\n                seg.duration -= delta_duration\n                seg.start += delta_duration // 2\n            else:\n                raise ValueError(f\"Unsupported shrink mode: {shrink}\")\n        # 时长变长\n        elif new_duration > seg.duration:\n            success_flag = False\n            prev_seg_end = int(0) if seg_index == 0 else self.segments[seg_index-1].target_timerange.end\n            next_seg_start = int(1e15) if seg_index == len(self.segments)-1 else self.segments[seg_index+1].start\n            for mode in extend:\n                if mode == ExtendMode.extend_head:\n                    if seg.start - delta_duration >= prev_seg_end:\n                        seg.start -= delta_duration\n                        success_flag = True\n                elif mode == ExtendMode.extend_tail:\n                    if seg.target_timerange.end + delta_duration <= next_seg_start:\n                        seg.duration += delta_duration\n                        success_flag = True\n                elif mode == ExtendMode.push_tail:\n                    shift_duration = max(0, seg.target_timerange.end + delta_duration - next_seg_start)\n                    seg.duration += delta_duration\n                    if shift_duration > 0:  # 有必要时后移后续片段\n                        for i in range(seg_index+1, len(self.segments)):\n                            self.segments[i].start += shift_duration\n                    success_flag = True\n                elif mode == ExtendMode.cut_material_tail:\n                    src_timerange.duration = seg.duration\n                    success_flag = True\n                else:\n                    raise ValueError(f\"Unsupported extend mode: {mode}\")\n\n                if success_flag:\n                    break\n            if not success_flag:\n                raise exceptions.ExtensionFailed(f\"未能将片段延长至 {new_duration}μs, 尝试过以下方法: {extend}\")\n\n        # 写入素材时间范围\n        seg.source_timerange = src_timerange\n\ndef import_track(json_data: Dict[str, Any]) -> ImportedTrack:\n    \"\"\"导入轨道\"\"\"\n    track_type = TrackType.from_name(json_data[\"type\"])\n    if not track_type.value.allow_modify:\n        return ImportedTrack(json_data)\n    if track_type == TrackType.text:\n        return ImportedTextTrack(json_data)\n    return ImportedMediaTrack(json_data)\n"
  },
  {
    "path": "src/pyJianYingDraft/text_segment.py",
    "content": "\"\"\"定义文本片段及其相关类\"\"\"\n\nimport json\nimport uuid\nfrom copy import deepcopy\n\nfrom typing import Dict, Tuple, Any, List\nfrom typing import Union, Optional, Literal\n\nfrom .time_util import Timerange, tim\nfrom .segment import ClipSettings, VisualSegment\nfrom .animation import SegmentAnimations, Text_animation\n\nfrom .metadata import FontType, EffectMeta\nfrom .metadata import TextIntro, TextOutro, TextLoopAnim\n\nclass TextStyle:\n    \"\"\"字体样式类\"\"\"\n\n    size: float\n    \"\"\"字体大小\"\"\"\n\n    bold: bool\n    \"\"\"是否加粗\"\"\"\n    italic: bool\n    \"\"\"是否斜体\"\"\"\n    underline: bool\n    \"\"\"是否加下划线\"\"\"\n\n    color: Tuple[float, float, float]\n    \"\"\"字体颜色, RGB三元组, 取值范围为[0, 1]\"\"\"\n    alpha: float\n    \"\"\"字体不透明度\"\"\"\n\n    align: Literal[0, 1, 2]\n    \"\"\"对齐方式\"\"\"\n    vertical: bool\n    \"\"\"是否为竖排文本\"\"\"\n\n    letter_spacing: int\n    \"\"\"字符间距\"\"\"\n    line_spacing: int\n    \"\"\"行间距\"\"\"\n\n    auto_wrapping: bool\n    \"\"\"是否自动换行\"\"\"\n    max_line_width: float\n    \"\"\"最大行宽, 取值范围为[0, 1]\"\"\"\n\n    def __init__(self, *, size: float = 8.0, bold: bool = False, italic: bool = False, underline: bool = False,\n                 color: Tuple[float, float, float] = (1.0, 1.0, 1.0), alpha: float = 1.0,\n                 align: Literal[0, 1, 2] = 0, vertical: bool = False,\n                 letter_spacing: int = 0, line_spacing: int = 0,\n                 auto_wrapping: bool = False, max_line_width: float = 0.82):\n        \"\"\"\n        Args:\n            size (`float`, optional): 字体大小, 默认为8.0\n            bold (`bool`, optional): 是否加粗, 默认为否\n            italic (`bool`, optional): 是否斜体, 默认为否\n            underline (`bool`, optional): 是否加下划线, 默认为否\n            color (`Tuple[float, float, float]`, optional): 字体颜色, RGB三元组, 取值范围为[0, 1], 默认为白色\n            alpha (`float`, optional): 字体不透明度, 取值范围[0, 1], 默认不透明\n            align (`int`, optional): 对齐方式, 0: 左对齐, 1: 居中, 2: 右对齐, 默认为左对齐\n            vertical (`bool`, optional): 是否为竖排文本, 默认为否\n            letter_spacing (`int`, optional): 字符间距, 定义与剪映中一致, 默认为0\n            line_spacing (`int`, optional): 行间距, 定义与剪映中一致, 默认为0\n            auto_wrapping (`bool`, optional): 是否自动换行, 默认关闭\n            max_line_width (`float`, optional): 每行最大行宽占屏幕宽度比例, 取值范围为[0, 1], 默认为0.82\n        \"\"\"\n        self.size = size\n        self.bold = bold\n        self.italic = italic\n        self.underline = underline\n\n        self.color = color\n        self.alpha = alpha\n\n        self.align = align\n        self.vertical = vertical\n\n        self.letter_spacing = letter_spacing\n        self.line_spacing = line_spacing\n\n        self.auto_wrapping = auto_wrapping\n        self.max_line_width = max_line_width\n\nclass TextBorder:\n    \"\"\"文本描边的参数\"\"\"\n\n    alpha: float\n    \"\"\"描边不透明度\"\"\"\n    color: Tuple[float, float, float]\n    \"\"\"描边颜色, RGB三元组, 取值范围为[0, 1]\"\"\"\n    width: float\n    \"\"\"描边宽度\"\"\"\n\n    def __init__(self, *, alpha: float = 1.0, color: Tuple[float, float, float] = (0.0, 0.0, 0.0), width: float = 40.0):\n        \"\"\"\n        Args:\n            alpha (`float`, optional): 描边不透明度, 取值范围[0, 1], 默认为1.0\n            color (`Tuple[float, float, float]`, optional): 描边颜色, RGB三元组, 取值范围为[0, 1], 默认为黑色\n            width (`float`, optional): 描边宽度, 与剪映中一致, 取值范围为[0, 100], 默认为40.0\n        \"\"\"\n        self.alpha = alpha\n        self.color = color\n        self.width = width / 100.0 * 0.2  # 此映射可能不完全正确\n\n    def export_json(self) -> Dict[str, Any]:\n        \"\"\"导出JSON数据, 放置在素材content的styles中\"\"\"\n        return {\n            \"content\": {\n                \"solid\": {\n                    \"alpha\": self.alpha,\n                    \"color\": list(self.color),\n                }\n            },\n            \"width\": self.width\n        }\n\nclass TextBackground:\n    \"\"\"文本背景参数\"\"\"\n\n    style: Literal[1, 2]\n    \"\"\"背景样式\"\"\"\n\n    alpha: float\n    \"\"\"背景不透明度\"\"\"\n    color: str\n    \"\"\"背景颜色, 格式为'#RRGGBB'\"\"\"\n    round_radius: float\n    \"\"\"背景圆角半径\"\"\"\n    height: float\n    \"\"\"背景高度\"\"\"\n    width: float\n    \"\"\"背景宽度\"\"\"\n    horizontal_offset: float\n    \"\"\"背景水平偏移\"\"\"\n    vertical_offset: float\n    \"\"\"背景竖直偏移\"\"\"\n\n    def __init__(self, *, color: str, style: Literal[1, 2] = 1, alpha: float = 1.0, round_radius: float = 0.0,\n                 height: float = 0.14, width: float = 0.14,\n                 horizontal_offset: float = 0.5, vertical_offset: float = 0.5):\n        \"\"\"\n        Args:\n            color (`str`): 背景颜色, 格式为'#RRGGBB'\n            style (`int`, optional): 背景样式, 1和2分别对应剪映中的两种样式, 默认为1\n            alpha (`float`, optional): 背景不透明度, 与剪映中一致, 取值范围[0, 1], 默认为1.0\n            round_radius (`float`, optional): 背景圆角半径, 与剪映中一致, 取值范围[0, 1], 默认为0.0\n            height (`float`, optional): 背景高度, 与剪映中一致, 取值范围为[0, 1], 默认为0.14\n            width (`float`, optional): 背景宽度, 与剪映中一致, 取值范围为[0, 1], 默认为0.14\n            horizontal_offset (`float`, optional): 背景水平偏移, 与剪映中一致, 取值范围为[0, 1], 默认为0.5\n            vertical_offset (`float`, optional): 背景竖直偏移, 与剪映中一致, 取值范围为[0, 1], 默认为0.5\n        \"\"\"\n        self.style = style\n\n        self.alpha = alpha\n        self.color = color\n        self.round_radius = round_radius\n        self.height = height\n        self.width = width\n        self.horizontal_offset = horizontal_offset * 2 - 1\n        self.vertical_offset = vertical_offset * 2 - 1\n\n    def export_json(self) -> Dict[str, Any]:\n        \"\"\"生成子JSON数据, 在TextSegment导出时合并到其中\"\"\"\n        return {\n            \"background_style\": self.style,\n            \"background_color\": self.color,\n            \"background_alpha\": self.alpha,\n            \"background_round_radius\": self.round_radius,\n            \"background_height\": self.height,\n            \"background_width\": self.width,\n            \"background_horizontal_offset\": self.horizontal_offset,\n            \"background_vertical_offset\": self.vertical_offset,\n        }\n\nclass TextBubble:\n    \"\"\"文本气泡素材, 与滤镜素材本质上一致\"\"\"\n\n    global_id: str\n    \"\"\"气泡全局id, 由程序自动生成\"\"\"\n\n    effect_id: str\n    resource_id: str\n\n    def __init__(self, effect_id: str, resource_id: str):\n        self.global_id = uuid.uuid4().hex\n        self.effect_id = effect_id\n        self.resource_id = resource_id\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"apply_target_type\": 0,\n            \"effect_id\": self.effect_id,\n            \"id\": self.global_id,\n            \"resource_id\": self.resource_id,\n            \"type\": \"text_shape\",\n            \"value\": 1.0,\n            # 不导出path和request_id\n        }\n\nclass TextEffect(TextBubble):\n    \"\"\"文本花字素材, 与滤镜素材本质上也一致\"\"\"\n\n    def export_json(self) -> Dict[str, Any]:\n        ret = super().export_json()\n        ret[\"type\"] = \"text_effect\"\n        ret[\"source_platform\"] = 1\n        return ret\n\nclass TextShadow:\n    \"\"\"文本阴影参数\"\"\"\n\n    alpha: float\n    \"\"\"阴影不透明度, 取值范围为[0, 1]\"\"\"\n    color: Tuple[float, float, float]\n    \"\"\"阴影颜色, RGB三元组, 取值范围为[0, 1]\"\"\"\n    diffuse: float\n    \"\"\"阴影扩散程度, 此处定义与剪映中一致, 取值范围为[0, 100]\"\"\"\n    distance: float\n    \"\"\"阴影距离, 取值范围为[0, 100]\"\"\"\n    angle: float\n    \"\"\"阴影角度, 取值范围为[-180, 180]\"\"\"\n\n    def __init__(self, *, alpha: float = 1.0, color: Tuple[float, float, float] = (0.0, 0.0, 0.0),\n                 diffuse: float = 15.0, distance: float = 5.0, angle: float = -45.0):\n        \"\"\"\n        Args:\n            alpha (`float`, optional): 阴影不透明度, 取值范围为[0, 1], 默认为1.0\n            color (`Tuple[float, float, float]`, optional): 阴影颜色, RGB三元组, 取值范围为[0, 1], 默认为黑色\n            diffuse (`float`, optional): 阴影扩散程度, 此处定义与剪映中一致, 取值范围为[0, 100], 默认为15.0\n            distance (`float`, optional): 阴影距离, 取值范围为[0, 100], 默认为5.0\n            angle (`float`, optional): 阴影角度, 取值范围为[-180, 180], 默认为-45.0\n        \"\"\"\n        self.alpha = alpha\n        self.color = color\n        self.diffuse = diffuse\n        self.distance = distance\n        self.angle = angle\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"diffuse\": self.diffuse / 100.0 / 6,  # /6是剪映自带的映射\n            \"alpha\": self.alpha,\n            \"distance\": self.distance,\n            \"content\": {\n                \"solid\": {\n                    \"color\": list(self.color),\n                }\n            },\n            \"angle\": self.angle\n        }\n\nclass TextSegment(VisualSegment):\n    \"\"\"文本片段类, 目前仅支持设置基本的字体样式\"\"\"\n\n    text: str\n    \"\"\"文本内容\"\"\"\n    font: Optional[EffectMeta]\n    \"\"\"字体类型\"\"\"\n    style: TextStyle\n    \"\"\"字体样式\"\"\"\n\n    border: Optional[TextBorder]\n    \"\"\"文本描边参数, None表示无描边\"\"\"\n    background: Optional[TextBackground]\n    \"\"\"文本背景参数, None表示无背景\"\"\"\n    shadow: Optional[TextShadow]\n    \"\"\"文本阴影参数, None表示无阴影\"\"\"\n\n    bubble: Optional[TextBubble]\n    \"\"\"文本气泡效果, 在放入轨道时加入素材列表中\"\"\"\n    effect: Optional[TextEffect]\n    \"\"\"文本花字效果, 在放入轨道时加入素材列表中, 目前仅支持一部分花字效果\"\"\"\n    extra_styles: List[Dict[str, Any]]\n    \"\"\"额外的文本样式，用于关键词高亮等特殊样式\"\"\"\n\n    def __init__(self, text: str, timerange: Timerange, *,\n                 font: Optional[FontType] = None,\n                 style: Optional[TextStyle] = None, clip_settings: Optional[ClipSettings] = None,\n                 border: Optional[TextBorder] = None, background: Optional[TextBackground] = None,\n                 shadow: Optional[TextShadow] = None):\n        \"\"\"创建文本片段, 并指定其时间信息、字体样式及图像调节设置\n\n        片段创建完成后, 可通过`ScriptFile.add_segment`方法将其添加到轨道中\n\n        Args:\n            text (`str`): 文本内容\n            timerange (`Timerange`): 片段在轨道上的时间范围\n            font (`Font_type`, optional): 字体类型, 默认为系统字体\n            style (`TextStyle`, optional): 字体样式, 包含大小/颜色/对齐/透明度等.\n            clip_settings (`ClipSettings`, optional): 图像调节设置, 默认不做任何变换\n            border (`TextBorder`, optional): 文本描边参数, 默认无描边\n            background (`TextBackground`, optional): 文本背景参数, 默认无背景\n            shadow (`TextShadow`, optional): 文本阴影参数, 默认无阴影\n        \"\"\"\n        super().__init__(uuid.uuid4().hex, None, timerange, 1.0, 1.0, False, clip_settings=clip_settings)\n\n        self.text = text\n        self.font = font.value if font else None\n        self.style = style or TextStyle()\n        self.border = border\n        self.background = background\n        self.shadow = shadow\n\n        self.bubble = None\n        self.effect = None\n        self.extra_styles = []\n\n    @classmethod\n    def create_from_template(cls, text: str, timerange: Timerange, template: \"TextSegment\") -> \"TextSegment\":\n        \"\"\"根据模板创建新的文本片段, 并指定其文本内容\"\"\"\n        new_segment = cls(text, timerange, style=deepcopy(template.style), clip_settings=deepcopy(template.clip_settings),\n                          border=deepcopy(template.border), background=deepcopy(template.background),\n                          shadow=deepcopy(template.shadow))\n        new_segment.font = deepcopy(template.font)\n\n        # 处理动画等\n        if template.animations_instance:\n            new_segment.animations_instance = deepcopy(template.animations_instance)\n            new_segment.animations_instance.animation_id = uuid.uuid4().hex\n            new_segment.extra_material_refs.append(new_segment.animations_instance.animation_id)\n        if template.bubble:\n            new_segment.add_bubble(template.bubble.effect_id, template.bubble.resource_id)\n        if template.effect:\n            new_segment.add_effect(template.effect.effect_id)\n\n        return new_segment\n\n    def add_animation(self, animation_type: Union[TextIntro, TextOutro, TextLoopAnim],\n                      duration: Union[str, float, int, None] = None) -> \"TextSegment\":\n        \"\"\"将给定的入场/出场/循环动画添加到此片段的动画列表中, 出入场动画的持续时间可以自行设置.\n\n        循环动画为剪映中的「循环」类型: ``duration`` 表示**单次循环**时长（微秒）, 与 ``get_text_animations``\n        里 loop 的 ``duration`` 一致; 未指定时使用该动画元数据默认值. 循环从**入场结束之后**开始,\n        至出场之前结束, 中间时段由剪映按该时长重复播放.\n\n        注意: 若希望同时使用循环动画和入出场动画, 请**先添加出入场动画再添加循环动画**\n\n        Args:\n            animation_type (`TextIntro`, `TextOutro` or `TextLoopAnim`): 文本动画类型.\n            duration (`str`, `int`, `float`, optional): 微秒; 字符串则调用 ``tim()`` 解析.\n                对入场/出场为各自动画段时长; 对循环动画为单次循环时长.\n        \"\"\"\n        if duration is None:\n            duration = animation_type.value.duration\n        duration = min(tim(duration), self.target_timerange.duration)\n\n        if isinstance(animation_type, TextIntro):\n            start = 0\n        elif isinstance(animation_type, TextOutro):\n            start = self.target_timerange.duration - duration\n        elif isinstance(animation_type, TextLoopAnim):\n            intro_trange = self.animations_instance and self.animations_instance.get_animation_trange(\"in\")\n            outro_trange = self.animations_instance and self.animations_instance.get_animation_trange(\"out\")\n            start = intro_trange.end if intro_trange else 0\n            outro_dur = outro_trange.duration if outro_trange else 0\n            available = self.target_timerange.duration - start - outro_dur\n            cycle = duration\n            span_cap = max(1, available)\n            duration = max(1, min(cycle, span_cap))\n        else:\n            raise TypeError(\"Invalid animation type %s\" % type(animation_type))\n\n        if self.animations_instance is None:\n            self.animations_instance = SegmentAnimations()\n            self.extra_material_refs.append(self.animations_instance.animation_id)\n\n        self.animations_instance.add_animation(Text_animation(animation_type, start, duration))\n\n        return self\n\n    def add_bubble(self, effect_id: str, resource_id: str) -> \"TextSegment\":\n        \"\"\"根据素材信息添加气泡效果, 相应素材信息可通过`ScriptFile.inspect_material`从模板中获取\n\n        Args:\n            effect_id (`str`): 气泡效果的effect_id\n            resource_id (`str`): 气泡效果的resource_id\n        \"\"\"\n        self.bubble = TextBubble(effect_id, resource_id)\n        self.extra_material_refs.append(self.bubble.global_id)\n        return self\n\n    def add_effect(self, effect_id: str) -> \"TextSegment\":\n        \"\"\"根据素材信息添加花字效果, 相应素材信息可通过`ScriptFile.inspect_material`从模板中获取\n\n        Args:\n            effect_id (`str`): 花字效果的effect_id, 也同时是其resource_id\n        \"\"\"\n        self.effect = TextEffect(effect_id, effect_id)\n        self.extra_material_refs.append(self.effect.global_id)\n        return self\n\n    def export_material(self) -> Dict[str, Any]:\n        \"\"\"与此文本片段联系的素材, 以此不再单独定义Text_material类\"\"\"\n        # 叠加各类效果的flag\n        check_flag: int = 7\n        if self.border:\n            check_flag |= 8\n        if self.background:\n            check_flag |= 16\n        if self.shadow:\n            check_flag |= 32\n\n        # 创建基础样式\n        base_style = {\n            \"fill\": {\n                \"alpha\": 1.0,\n                \"content\": {\n                    \"render_type\": \"solid\",\n                    \"solid\": {\n                        \"alpha\": 1.0,\n                        \"color\": list(self.style.color)\n                    }\n                }\n            },\n            \"range\": [0, len(self.text.encode('utf-16-le'))],\n            \"size\": self.style.size,\n            \"bold\": self.style.bold,\n            \"italic\": self.style.italic,\n            \"underline\": self.style.underline,\n            \"strokes\": [self.border.export_json()] if self.border else []\n        }\n        \n        # 合并基础样式和额外样式\n        styles = [base_style] + self.extra_styles\n        \n        content_json = {\n            \"styles\": styles,\n            \"text\": self.text\n        }\n        if self.font:\n            content_json[\"styles\"][0][\"font\"] = {\n                \"id\": self.font.resource_id,\n                \"path\": \"D:\"  # 并不会真正在此处放置字体文件\n            }\n        if self.effect:\n            content_json[\"styles\"][0][\"effectStyle\"] = {\n                \"id\": self.effect.effect_id,\n                \"path\": \"C:\"  # 并不会真正在此处放置素材文件\n            }\n        if self.shadow:\n            content_json[\"styles\"][0][\"shadows\"] = [self.shadow.export_json()]\n\n        ret = {\n            \"id\": self.material_id,\n            \"content\": json.dumps(content_json, ensure_ascii=False),\n\n            \"typesetting\": int(self.style.vertical),\n            \"alignment\": self.style.align,\n            \"letter_spacing\": self.style.letter_spacing * 0.05,\n            \"line_spacing\": 0.02 + self.style.line_spacing * 0.05,\n\n            \"line_feed\": 1,\n            \"line_max_width\": self.style.max_line_width,\n            \"force_apply_line_max_width\": False,\n\n            \"check_flag\": check_flag,\n\n            \"type\": \"subtitle\" if self.style.auto_wrapping else \"text\",\n\n            # 混合 (+4)\n            \"global_alpha\": self.style.alpha,\n\n            # 发光 (+64)，属性由extra_material_refs记录\n        }\n\n        if self.background:\n            ret.update(self.background.export_json())\n\n        return ret\n"
  },
  {
    "path": "src/pyJianYingDraft/time_util.py",
    "content": "\"\"\"定义时间范围类以及与时间相关的辅助函数\"\"\"\n\nfrom typing import Union\nfrom typing import Dict\n\nSEC = 1000000\n\"\"\"一秒=1e6微秒\"\"\"\n\ndef tim(inp: Union[str, float]) -> int:\n    \"\"\"将输入的字符串转换为微秒, 也可直接输入微秒数\n\n    支持类似 \"1h52m3s\" 或 \"0.15s\" 这样的格式, 可包含负号以表示负偏移\n    \"\"\"\n    if isinstance(inp, (int, float)):\n        return int(round(inp))\n\n    sign: int = 1\n    inp = inp.strip().lower()\n    if inp.startswith(\"-\"):\n        sign = -1\n        inp = inp[1:]\n\n    last_index: int = 0\n    total_time: float = 0\n    for unit, factor in zip([\"h\", \"m\", \"s\"], [3600*SEC, 60*SEC, SEC]):\n        unit_index = inp.find(unit)\n        if unit_index == -1: continue\n\n        total_time += float(inp[last_index:unit_index]) * factor\n        last_index = unit_index + 1\n\n    return int(round(total_time) * sign)\n\nclass Timerange:\n    \"\"\"记录了起始时间及持续长度的时间范围\"\"\"\n    start: int\n    \"\"\"起始时间, 单位为微秒\"\"\"\n    duration: int\n    \"\"\"持续长度, 单位为微秒\"\"\"\n\n    def __init__(self, start: int, duration: int):\n        \"\"\"构造一个时间范围\n\n        Args:\n            start (int): 起始时间, 单位为微秒\n            duration (int): 持续长度, 单位为微秒\n        \"\"\"\n\n        self.start = start\n        self.duration = duration\n\n    @classmethod\n    def import_json(cls, json_obj: Dict[str, str]) -> \"Timerange\":\n        \"\"\"从json对象中恢复Timerange\"\"\"\n        return cls(int(json_obj[\"start\"]), int(json_obj[\"duration\"]))\n\n    @property\n    def end(self) -> int:\n        \"\"\"结束时间, 单位为微秒\"\"\"\n        return self.start + self.duration\n\n    def __eq__(self, other: object) -> bool:\n        if not isinstance(other, Timerange):\n            return False\n        return self.start == other.start and self.duration == other.duration\n\n    def overlaps(self, other: \"Timerange\") -> bool:\n        \"\"\"判断两个时间范围是否有重叠\"\"\"\n        return not (self.end <= other.start or other.end <= self.start)\n\n    def __repr__(self) -> str:\n        return f\"Timerange(start={self.start}, duration={self.duration})\"\n\n    def __str__(self) -> str:\n        return f\"[start={self.start}, end={self.end}]\"\n\n    def export_json(self) -> Dict[str, int]:\n        return {\"start\": self.start, \"duration\": self.duration}\n\ndef trange(start: Union[str, float], duration: Union[str, float]) -> Timerange:\n    \"\"\"Timerange的简便构造函数, 接受字符串或微秒数作为参数\n\n    支持类似 \"1h52m3s\" 或 \"0.15s\" 这样的格式\n\n    Args:\n        start (Union[str, float]): 起始时间\n        duration (Union[str, float]): 持续长度, 注意**不是结束时间**\n    \"\"\"\n    return Timerange(tim(start), tim(duration))\n\ndef srt_tstamp(srt_tstamp: str) -> int:\n    \"\"\"解析srt中的时间戳字符串, 返回微秒数\"\"\"\n    sec_str, ms_str = srt_tstamp.split(\",\")\n    parts = sec_str.split(\":\") + [ms_str]\n\n    total_time = 0\n    for value, factor in zip(parts, [3600*SEC, 60*SEC, SEC, 1000]):\n        total_time += int(value) * factor\n    return total_time\n"
  },
  {
    "path": "src/pyJianYingDraft/track.py",
    "content": "\"\"\"轨道类及其元数据\"\"\"\n\nimport uuid\n\nfrom enum import Enum\nfrom typing import TypeVar, Generic, Type\nfrom typing import Dict, List, Any, Union\nfrom dataclasses import dataclass\nfrom abc import ABC, abstractmethod\n\nfrom .exceptions import SegmentOverlap\nfrom .segment import BaseSegment\nfrom .video_segment import VideoSegment, StickerSegment\nfrom .audio_segment import AudioSegment\nfrom .text_segment import TextSegment\nfrom .effect_segment import EffectSegment, FilterSegment\n\n@dataclass\nclass Track_meta:\n    \"\"\"与轨道类型关联的轨道元数据\"\"\"\n\n    segment_type: Union[Type[VideoSegment], Type[AudioSegment],\n                        Type[EffectSegment], Type[FilterSegment],\n                        Type[TextSegment], Type[StickerSegment], None]\n    \"\"\"与轨道关联的片段类型\"\"\"\n    render_index: int\n    \"\"\"默认渲染顺序, 值越大越接近前景\"\"\"\n    allow_modify: bool\n    \"\"\"当被导入时, 是否允许修改\"\"\"\n\nclass TrackType(Enum):\n    \"\"\"轨道类型枚举\n\n    变量名对应type属性, 值表示相应的轨道元数据\n    \"\"\"\n\n    video = Track_meta(VideoSegment, 0, True)\n    audio = Track_meta(AudioSegment, 0, True)\n    effect = Track_meta(EffectSegment, 10000, False)\n    filter = Track_meta(FilterSegment, 11000, False)\n    sticker = Track_meta(StickerSegment, 14000, False)\n    text = Track_meta(TextSegment, 15000, True)  # 原本是14000, 避免与sticker冲突改为15000\n\n    adjust = Track_meta(None, 0, False)\n    \"\"\"仅供导入时使用, 不要尝试新建此类型的轨道\"\"\"\n\n    @staticmethod\n    def from_name(name: str) -> \"TrackType\":\n        \"\"\"根据名称获取轨道类型枚举\"\"\"\n        for t in TrackType:\n            if t.name == name:\n                return t\n        raise ValueError(\"Invalid track type: %s\" % name)\n\n\nclass BaseTrack(ABC):\n    \"\"\"轨道基类\"\"\"\n\n    track_type: TrackType\n    \"\"\"轨道类型\"\"\"\n    name: str\n    \"\"\"轨道名称\"\"\"\n    track_id: str\n    \"\"\"轨道全局ID\"\"\"\n    render_index: int\n    \"\"\"渲染顺序, 值越大越接近前景\"\"\"\n\n    @abstractmethod\n    def export_json(self) -> Dict[str, Any]: ...\n\nSeg_type = TypeVar(\"Seg_type\", bound=BaseSegment)\nclass Track(BaseTrack, Generic[Seg_type]):\n    \"\"\"非模板模式下的轨道\"\"\"\n\n    mute: bool\n    \"\"\"是否静音\"\"\"\n\n    segments: List[Seg_type]\n    \"\"\"该轨道包含的片段列表\"\"\"\n\n    def __init__(self, track_type: TrackType, name: str, render_index: int, mute: bool):\n        self.track_type = track_type\n        self.name = name\n        self.track_id = uuid.uuid4().hex\n        self.render_index = render_index\n\n        self.mute = mute\n        self.segments = []\n\n    @property\n    def end_time(self) -> int:\n        \"\"\"轨道结束时间, 微秒\"\"\"\n        if len(self.segments) == 0:\n            return 0\n        return self.segments[-1].target_timerange.end\n\n    @property\n    def accept_segment_type(self) -> Type[Seg_type]:\n        \"\"\"返回该轨道允许的片段类型\"\"\"\n        return self.track_type.value.segment_type  # type: ignore\n\n    def add_segment(self, segment: Seg_type) -> \"Track[Seg_type]\":\n        \"\"\"向轨道中添加一个片段, 添加的片段必须匹配轨道类型且不与现有片段重叠\n\n        Args:\n            segment (Seg_type): 要添加的片段\n\n        Raises:\n            `TypeError`: 新片段类型与轨道类型不匹配\n            `SegmentOverlap`: 新片段与现有片段重叠\n        \"\"\"\n        if not isinstance(segment, self.accept_segment_type):\n            raise TypeError(\"New segment (%s) is not of the same type as the track (%s)\" % (type(segment), self.accept_segment_type))\n\n        # 检查片段是否重叠\n        for seg in self.segments:\n            if seg.overlaps(segment):\n                raise SegmentOverlap(\"New segment overlaps with existing segment [start: {}, end: {}]\"\n                                     .format(segment.target_timerange.start, segment.target_timerange.end))\n\n        self.segments.append(segment)\n        return self\n\n    def export_json(self) -> Dict[str, Any]:\n        # 为每个片段写入render_index\n        segment_exports = [seg.export_json() for seg in self.segments]\n        for seg in segment_exports:\n            seg[\"render_index\"] = self.render_index\n\n        return {\n            \"attribute\": int(self.mute),\n            \"flag\": 0,\n            \"id\": self.track_id,\n            \"is_default_name\": len(self.name) == 0,\n            \"name\": self.name,\n            \"segments\": segment_exports,\n            \"type\": self.track_type.name\n        }\n"
  },
  {
    "path": "src/pyJianYingDraft/util.py",
    "content": "\"\"\"辅助函数，主要与模板模式有关\"\"\"\n\nimport inspect\n\nfrom typing import Union, Type\nfrom typing import List, Dict, Any\n\nJsonExportable = Union[int, float, bool, str, List[\"JsonExportable\"], Dict[str, \"JsonExportable\"]]\n\ndef provide_ctor_defaults(cls: Type) -> Dict[str, Any]:\n    \"\"\"为构造函数提供默认值，以绕开构造函数的参数限制\"\"\"\n\n    signature = inspect.signature(cls.__init__)\n    provided_defaults: Dict[str, Any] = {}\n\n    for name, param in signature.parameters.items():\n        if name == 'self': continue\n        if param.default is not inspect.Parameter.empty: continue\n\n        if param.annotation is int or param.annotation is float:\n            provided_defaults[name] = 0\n        elif param.annotation is str:\n            provided_defaults[name] = \"\"\n        elif param.annotation is bool:\n            provided_defaults[name] = False\n        else:\n            raise ValueError(f\"Unsupported parameter type: {param.annotation}\")\n\n    return provided_defaults\n\ndef assign_attr_with_json(obj: object, attrs: List[str], json_data: Dict[str, Any]):\n    \"\"\"根据json数据赋值给指定的对象属性\n\n    若有复杂类型，则尝试调用其`import_json`方法进行构造\n    \"\"\"\n    type_hints: Dict[str, Type] = {}\n    for cls in obj.__class__.__mro__:\n        if '__annotations__' in cls.__dict__:\n            type_hints.update(cls.__annotations__)\n\n    for attr in attrs:\n        if hasattr(type_hints[attr], 'import_json'):\n            obj.__setattr__(attr, type_hints[attr].import_json(json_data[attr]))\n        else:\n            obj.__setattr__(attr, type_hints[attr](json_data[attr]))\n\ndef export_attr_to_json(obj: object, attrs: List[str]) -> Dict[str, JsonExportable]:\n    \"\"\"将对象属性导出为json数据\n\n    若有复杂类型，则尝试调用其`export_json`方法进行导出\n    \"\"\"\n    json_data: Dict[str, Any] = {}\n    for attr in attrs:\n        if hasattr(getattr(obj, attr), 'export_json'):\n            json_data[attr] = getattr(obj, attr).export_json()\n        else:\n            json_data[attr] = getattr(obj, attr)\n    return json_data\n"
  },
  {
    "path": "src/pyJianYingDraft/video_segment.py",
    "content": "\"\"\"定义视频片段及其相关类\n\n包含图像调节设置、动画效果、特效、转场等相关类\n\"\"\"\n\nimport uuid\nfrom copy import deepcopy\n\nfrom typing import Optional, Literal, Union\nfrom typing import Dict, List, Tuple, Any\n\nfrom .time_util import tim, Timerange\nfrom .segment import VisualSegment, ClipSettings, AudioFade\nfrom .local_materials import VideoMaterial\nfrom .animation import SegmentAnimations, VideoAnimation\n\nfrom .metadata import EffectMeta, EffectParamInstance\nfrom .metadata import MaskMeta, MaskType, FilterType, TransitionType\nfrom .metadata import IntroType, OutroType, GroupAnimationType\nfrom .metadata import VideoSceneEffectType, VideoCharacterEffectType\nfrom .metadata.mix_mode_meta import MixModeType\n\nclass Mask:\n    \"\"\"蒙版对象\"\"\"\n\n    mask_meta: MaskMeta\n    \"\"\"蒙版元数据\"\"\"\n    global_id: str\n    \"\"\"蒙版全局id, 由程序自动生成\"\"\"\n\n    center_x: float\n    \"\"\"蒙版中心x坐标, 以半素材宽为单位\"\"\"\n    center_y: float\n    \"\"\"蒙版中心y坐标, 以半素材高为单位\"\"\"\n    width: float\n    height: float\n    aspect_ratio: float\n\n    rotation: float\n    invert: bool\n    feather: float\n    \"\"\"羽化程度, 0-1\"\"\"\n    round_corner: float\n    \"\"\"矩形蒙版的圆角, 0-1\"\"\"\n\n    def __init__(self, mask_meta: MaskMeta,\n                 cx: float, cy: float, w: float, h: float,\n                 ratio: float, rot: float, inv: bool, feather: float, round_corner: float):\n        self.mask_meta = mask_meta\n        self.global_id = uuid.uuid4().hex\n\n        self.center_x, self.center_y = cx, cy\n        self.width, self.height = w, h\n        self.aspect_ratio = ratio\n\n        self.rotation = rot\n        self.invert = inv\n        self.feather = feather\n        self.round_corner = round_corner\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"config\": {\n                \"aspectRatio\": self.aspect_ratio,\n                \"centerX\": self.center_x,\n                \"centerY\": self.center_y,\n                \"feather\": self.feather,\n                \"height\": self.height,\n                \"invert\": self.invert,\n                \"rotation\": self.rotation,\n                \"roundCorner\": self.round_corner,\n                \"width\": self.width\n            },\n            \"id\": self.global_id,\n            \"name\": self.mask_meta.name,\n            \"platform\": \"all\",\n            \"position_info\": \"\",\n            \"resource_type\": self.mask_meta.resource_type,\n            \"resource_id\": self.mask_meta.resource_id,\n            \"type\": \"mask\"\n            # 不导出path字段\n        }\n\nclass VideoEffect:\n    \"\"\"视频特效素材\"\"\"\n\n    name: str\n    \"\"\"特效名称\"\"\"\n    global_id: str\n    \"\"\"特效全局id, 由程序自动生成\"\"\"\n    effect_id: str\n    \"\"\"某种特效id, 由剪映本身提供\"\"\"\n    resource_id: str\n    \"\"\"资源id, 由剪映本身提供\"\"\"\n\n    effect_type: Literal[\"video_effect\", \"face_effect\"]\n    apply_target_type: Literal[0, 2]\n    \"\"\"应用目标类型, 0: 片段, 2: 全局\"\"\"\n\n    adjust_params: List[EffectParamInstance]\n\n    def __init__(self, effect_meta: Union[VideoSceneEffectType, VideoCharacterEffectType],\n                 params: Optional[List[Optional[float]]] = None, *,\n                 apply_target_type: Literal[0, 2] = 0):\n        \"\"\"根据给定的特效元数据及参数列表构造一个视频特效对象, params的范围是0~100\"\"\"\n\n        self.name = effect_meta.value.name\n        self.global_id = uuid.uuid4().hex\n        self.effect_id = effect_meta.value.effect_id\n        self.resource_id = effect_meta.value.resource_id\n        self.adjust_params = []\n\n        if isinstance(effect_meta, VideoSceneEffectType):\n            self.effect_type = \"video_effect\"\n        elif isinstance(effect_meta, VideoCharacterEffectType):\n            self.effect_type = \"face_effect\"\n        else:\n            raise TypeError(\"Invalid effect meta type %s\" % type(effect_meta))\n        self.apply_target_type = apply_target_type\n\n        self.adjust_params = effect_meta.value.parse_params(params)\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"adjust_params\": [param.export_json() for param in self.adjust_params],\n            \"apply_target_type\": self.apply_target_type,\n            \"apply_time_range\": None,\n            \"category_id\": \"\",  # 一律设为空\n            \"category_name\": \"\",  # 一律设为空\n            \"common_keyframes\": [],\n            \"disable_effect_faces\": [],\n            \"effect_id\": self.effect_id,\n            \"formula_id\": \"\",\n            \"id\": self.global_id,\n            \"name\": self.name,\n            \"platform\": \"all\",\n            \"render_index\": 11000,\n            \"resource_id\": self.resource_id,\n            \"source_platform\": 0,\n            \"time_range\": None,\n            \"track_render_index\": 0,\n            \"type\": self.effect_type,\n            \"value\": 1.0,\n            \"version\": \"\"\n            # 不导出path、request_id和algorithm_artifact_path字段\n        }\n\nclass Filter:\n    \"\"\"滤镜素材\"\"\"\n\n    global_id: str\n    \"\"\"滤镜全局id, 由程序自动生成\"\"\"\n\n    effect_meta: EffectMeta\n    \"\"\"滤镜的元数据\"\"\"\n    intensity: float\n    \"\"\"滤镜强度(滤镜的唯一参数)\"\"\"\n\n    apply_target_type: Literal[0, 2]\n    \"\"\"应用目标类型, 0: 片段, 2: 全局\"\"\"\n\n    def __init__(self, meta: EffectMeta, intensity: float, *,\n                 apply_target_type: Literal[0, 2] = 0):\n        \"\"\"根据给定的滤镜元数据及强度构造滤镜素材对象\"\"\"\n\n        self.global_id = uuid.uuid4().hex\n        self.effect_meta = meta\n        self.intensity = intensity\n        self.apply_target_type = apply_target_type\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"adjust_params\": [],\n            \"algorithm_artifact_path\": \"\",\n            \"apply_target_type\": self.apply_target_type,\n            \"bloom_params\": None,\n            \"category_id\": \"\",  # 一律设为空\n            \"category_name\": \"\",  # 一律设为空\n            \"color_match_info\": {\n                \"source_feature_path\": \"\",\n                \"target_feature_path\": \"\",\n                \"target_image_path\": \"\"\n            },\n            \"effect_id\": self.effect_meta.effect_id,\n            \"enable_skin_tone_correction\": False,\n            \"exclusion_group\": [],\n            \"face_adjust_params\": [],\n            \"formula_id\": \"\",\n            \"id\": self.global_id,\n            \"intensity_key\": \"\",\n            \"multi_language_current\": \"\",\n            \"name\": self.effect_meta.name,\n            \"panel_id\": \"\",\n            \"platform\": \"all\",\n            \"resource_id\": self.effect_meta.resource_id,\n            \"source_platform\": 1,\n            \"sub_type\": \"none\",\n            \"time_range\": None,\n            \"type\": \"filter\",\n            \"value\": self.intensity,\n            \"version\": \"\"\n            # 不导出path和request_id\n        }\n\nclass Transition:\n    \"\"\"转场对象\"\"\"\n\n    name: str\n    \"\"\"转场名称\"\"\"\n    global_id: str\n    \"\"\"转场全局id, 由程序自动生成\"\"\"\n    effect_id: str\n    \"\"\"转场效果id, 由剪映本身提供\"\"\"\n    resource_id: str\n    \"\"\"资源id, 由剪映本身提供\"\"\"\n\n    duration: int\n    \"\"\"转场持续时间, 单位为微秒\"\"\"\n    is_overlap: bool\n    \"\"\"是否与上一个片段重叠(?)\"\"\"\n\n    def __init__(self, effect_meta: TransitionType, duration: Optional[int] = None):\n        \"\"\"根据给定的转场元数据及持续时间构造一个转场对象\"\"\"\n        self.name = effect_meta.value.name\n        self.global_id = uuid.uuid4().hex\n        self.effect_id = effect_meta.value.effect_id\n        self.resource_id = effect_meta.value.resource_id\n\n        self.duration = duration if duration is not None else effect_meta.value.default_duration\n        self.is_overlap = effect_meta.value.is_overlap\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"category_id\": \"\",  # 一律设为空\n            \"category_name\": \"\",  # 一律设为空\n            \"duration\": self.duration,\n            \"effect_id\": self.effect_id,\n            \"id\": self.global_id,\n            \"is_overlap\": self.is_overlap,\n            \"name\": self.name,\n            \"platform\": \"all\",\n            \"resource_id\": self.resource_id,\n            \"type\": \"transition\"\n            # 不导出path和request_id字段\n        }\n\nclass BackgroundFilling:\n    \"\"\"背景填充对象\"\"\"\n\n    global_id: str\n    \"\"\"背景填充全局id, 由程序自动生成\"\"\"\n    fill_type: Literal[\"canvas_blur\", \"canvas_color\"]\n    \"\"\"背景填充类型\"\"\"\n    blur: float\n    \"\"\"模糊程度, 0-1\"\"\"\n    color: str\n    \"\"\"背景颜色, 格式为'#RRGGBBAA'\"\"\"\n\n    def __init__(self, fill_type: Literal[\"canvas_blur\", \"canvas_color\"], blur: float, color: str):\n        self.global_id = uuid.uuid4().hex\n        self.fill_type = fill_type\n        self.blur = blur\n        self.color = color\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"id\": self.global_id,\n            \"type\": self.fill_type,\n            \"blur\": self.blur,\n            \"color\": self.color,\n            \"source_platform\": 0,\n        }\n\nclass MixMode:\n    \"\"\"混合模式对象\"\"\"\n\n    global_id: str\n    \"\"\"混合模式全局id, 由程序自动生成\"\"\"\n\n    effect_meta: EffectMeta\n    \"\"\"混合模式的元数据\"\"\"\n\n    apply_target_type: Literal[0, 2]\n    \"\"\"应用目标类型, 0: 片段, 2: 全局\n\n    对混合模式而言应该一直是0\n    \"\"\"\n\n    def __init__(self, meta: EffectMeta, *,\n                 apply_target_type: Literal[0, 2] = 0):\n        \"\"\"根据给定的混合模式元数据构造混合模式对象\"\"\"\n\n        self.global_id = uuid.uuid4().hex\n        self.effect_meta = meta\n        self.apply_target_type = apply_target_type\n\n    def export_json(self) -> Dict[str, Any]:\n        return {\n            \"type\": \"mix_mode\",\n            \"name\": self.effect_meta.name,\n            \"effect_id\": self.effect_meta.effect_id,\n            \"resource_id\": self.effect_meta.resource_id,\n            \"value\": 1.0,\n            \"apply_target_type\": self.apply_target_type,\n            \"platform\": \"all\",\n            \"source_platform\": 0,\n            \"category_id\": \"\",\n            \"category_name\": \"\",\n            \"sub_type\": \"none\",\n            \"time_range\": None,\n            \"id\": self.global_id\n        }\n\n\nclass VideoSegment(VisualSegment):\n    \"\"\"安放在轨道上的一个视频/图片片段\"\"\"\n\n    material_instance: VideoMaterial\n    \"\"\"素材实例\"\"\"\n    material_size: Tuple[int, int]\n    \"\"\"素材尺寸\"\"\"\n\n    fade: Optional[AudioFade]\n    \"\"\"音频淡入淡出效果, 可能为空\n\n    在放入轨道时自动添加到素材列表中\n    \"\"\"\n\n    effects: List[VideoEffect]\n    \"\"\"特效列表\n\n    在放入轨道时自动添加到素材列表中\n    \"\"\"\n    filters: List[Filter]\n    \"\"\"滤镜列表\n\n    在放入轨道时自动添加到素材列表中\n    \"\"\"\n    mix_modes: List[MixMode]\n    \"\"\"混合模式列表\n\n    在放入轨道时自动添加到素材列表中\n    \"\"\"\n    mask: Optional[Mask]\n    \"\"\"蒙版实例, 可能为空\n\n    在放入轨道时自动添加到素材列表中\n    \"\"\"\n    transition: Optional[Transition]\n    \"\"\"转场实例, 可能为空\n\n    在放入轨道时自动添加到素材列表中\n    \"\"\"\n    background_filling: Optional[BackgroundFilling]\n    \"\"\"背景填充实例, 可能为空\n\n    在放入轨道时自动添加到素材列表中\n    \"\"\"\n\n    def __init__(self, material: Union[VideoMaterial, str], target_timerange: Timerange, *,\n                 source_timerange: Optional[Timerange] = None, speed: Optional[float] = None, volume: float = 1.0,\n                 change_pitch: bool = False, clip_settings: Optional[ClipSettings] = None):\n        \"\"\"利用给定的视频/图片素材构建一个轨道片段, 并指定其时间信息及图像调节设置\n\n        Args:\n            material (`VideoMaterial` or `str`): 素材实例或素材路径, 若为路径则自动构造素材实例(此时不能指定`cropSettings`参数)\n            target_timerange (`Timerange`): 片段在轨道上的目标时间范围\n            source_timerange (`Timerange`, optional): 截取的素材片段的时间范围, 默认从开头根据`speed`截取与`target_timerange`等长的一部分\n            speed (`float`, optional): 播放速度, 默认为1.0. 此项与`source_timerange`同时指定时, 将覆盖`target_timerange`中的时长\n            volume (`float`, optional): 音量, 默认为1.0\n            change_pitch (`bool`, optional): 是否跟随变速改变音调, 默认为否\n            clip_settings (`ClipSettings`, optional): 图像调节设置, 默认不作任何变换\n\n        Raises:\n            `ValueError`: 指定的或计算出的`source_timerange`超出了素材的时长范围\n        \"\"\"\n        if isinstance(material, str):\n            material = VideoMaterial(material)\n\n        if source_timerange is not None and speed is not None:\n            target_timerange = Timerange(target_timerange.start, round(source_timerange.duration / speed))\n        elif source_timerange is not None and speed is None:\n            speed = source_timerange.duration / target_timerange.duration\n        else:  # source_timerange is None\n            speed = speed if speed is not None else 1.0\n            source_timerange = Timerange(0, round(target_timerange.duration * speed))\n\n        if source_timerange.end > material.duration:\n            raise ValueError(f\"截取的素材时间范围 {source_timerange} 超出了素材时长({material.duration})\")\n\n        super().__init__(material.material_id, source_timerange, target_timerange, speed,\n                         volume, change_pitch, clip_settings=clip_settings)\n\n        self.material_instance = deepcopy(material)\n        self.material_size = (material.width, material.height)\n        self.effects = []\n        self.filters = []\n        self.mix_modes = []\n        self.transition = None\n        self.mask = None\n        self.background_filling = None\n        self.fade = None\n\n    def add_animation(self, animation_type: Union[IntroType, OutroType, GroupAnimationType],\n                      duration: Optional[Union[int, str]] = None) -> \"VideoSegment\":\n        \"\"\"将给定的入场/出场/组合动画添加到此片段的动画列表中\n\n        Args:\n            animation_type (`IntroType`, `OutroType`, or `GroupAnimationType`): 动画类型\n            duration (`int` or `str`, optional): 动画持续时间, 单位为微秒. 若传入字符串则会调用`tim()`函数进行解析.\n                若不指定则使用动画类型定义的默认值. 理论上只适用于入场和出场动画.\n        \"\"\"\n        if duration is not None:\n            duration = tim(duration)\n        if isinstance(animation_type, IntroType):\n            start = 0\n            duration = duration or animation_type.value.duration\n        elif isinstance(animation_type, OutroType):\n            duration = duration or animation_type.value.duration\n            start = self.target_timerange.duration - duration\n        elif isinstance(animation_type, GroupAnimationType):\n            start = 0\n            duration = duration or self.target_timerange.duration\n        else:\n            raise TypeError(\"Invalid animation type %s\" % type(animation_type))\n\n        if self.animations_instance is None:\n            self.animations_instance = SegmentAnimations()\n            self.extra_material_refs.append(self.animations_instance.animation_id)\n\n        self.animations_instance.add_animation(VideoAnimation(animation_type, start, duration))\n\n        return self\n\n    def add_effect(self, effect_type: Union[VideoSceneEffectType, VideoCharacterEffectType],\n                   params: Optional[List[Optional[float]]] = None) -> \"VideoSegment\":\n        \"\"\"为视频片段添加一个作用于整个片段的特效\n\n        Args:\n            effect_type (`VideoSceneEffectType` or `VideoCharacterEffectType`): 特效类型\n            params (`List[Optional[float]]`, optional): 特效参数列表, 参数列表中未提供或为None的项使用默认值.\n                参数取值范围(0~100)与剪映中一致. 某个特效类型有何参数以及具体参数顺序以枚举类成员的annotation为准.\n\n        Raises:\n            `ValueError`: 提供的参数数量超过了该特效类型的参数数量, 或参数值超出范围.\n        \"\"\"\n        if params is not None and len(params) > len(effect_type.value.params):\n            raise ValueError(\"为音频效果 %s 传入了过多的参数\" % effect_type.value.name)\n\n        effect_inst = VideoEffect(effect_type, params)\n        self.effects.append(effect_inst)\n        self.extra_material_refs.append(effect_inst.global_id)\n\n        return self\n\n    def add_fade(self, in_duration: Union[str, int], out_duration: Union[str, int]) -> \"VideoSegment\":\n        \"\"\"为视频片段添加音频淡入淡出效果, 仅对有音轨的视频片段有效\n\n        Args:\n            in_duration (`int` or `str`): 音频淡入时长, 单位为微秒, 若为字符串则会调用`tim()`函数进行解析\n            out_duration (`int` or `str`): 音频淡出时长, 单位为微秒, 若为字符串则会调用`tim()`函数进行解析\n\n        Raises:\n            `ValueError`: 当前片段已存在淡入淡出效果\n        \"\"\"\n        if self.fade is not None:\n            raise ValueError(\"当前片段已存在淡入淡出效果\")\n\n        if isinstance(in_duration, str): in_duration = tim(in_duration)\n        if isinstance(out_duration, str): out_duration = tim(out_duration)\n\n        self.fade = AudioFade(in_duration, out_duration)\n        self.extra_material_refs.append(self.fade.fade_id)\n\n        return self\n\n    def add_filter(self, filter_type: FilterType, intensity: float = 100.0) -> \"VideoSegment\":\n        \"\"\"为视频片段添加一个滤镜\n\n        Args:\n            filter_type (`FilterType`): 滤镜类型\n            intensity (`float`, optional): 滤镜强度(0-100), 仅当所选滤镜能够调节强度时有效. 默认为100.\n        \"\"\"\n        filter_inst = Filter(filter_type.value, intensity / 100.0)  # 转化为0~1范围\n        self.filters.append(filter_inst)\n        self.extra_material_refs.append(filter_inst.global_id)\n\n        return self\n\n    def set_mix_mode(self, mode: MixModeType) -> \"VideoSegment\":\n        \"\"\"为视频片段设置混合模式\n\n        Args:\n            mode (`MixModeType`): 混合模式类型\n        \"\"\"\n        mix_mode_inst = MixMode(mode.value)\n        self.mix_modes.append(mix_mode_inst)\n        self.extra_material_refs.append(mix_mode_inst.global_id)\n\n        return self\n\n    def add_mask(self, mask_type: MaskType, *, center_x: float = 0.0, center_y: float = 0.0, size: float = 0.5,\n                 rotation: float = 0.0, feather: float = 0.0, invert: bool = False,\n                 rect_width: Optional[float] = None, round_corner: Optional[float] = None) -> \"VideoSegment\":\n        \"\"\"为视频片段添加蒙版\n\n        Args:\n            mask_type (`MaskType`): 蒙版类型\n            center_x (`float`, optional): 蒙版中心点X坐标(以素材的像素为单位), 默认设置在素材中心\n            center_y (`float`, optional): 蒙版中心点Y坐标(以素材的像素为单位), 默认设置在素材中心\n            size (`float`, optional): 蒙版的\"主要尺寸\"(镜面的可视部分高度/圆形直径/爱心高度等), 以占素材高度的比例表示, 默认为0.5\n            rotation (`float`, optional): 蒙版顺时针旋转的**角度**, 默认不旋转\n            feather (`float`, optional): 蒙版的羽化参数, 取值范围0~100, 默认无羽化\n            invert (`bool`, optional): 是否反转蒙版, 默认不反转\n            rect_width (`float`, optional): 矩形蒙版的宽度, 仅在蒙版类型为矩形时允许设置, 以占素材宽度的比例表示, 默认与`size`相同\n            round_corner (`float`, optional): 矩形蒙版的圆角参数, 仅在蒙版类型为矩形时允许设置, 取值范围0~100, 默认为0\n\n        Raises:\n            `ValueError`: 试图添加多个蒙版或不正确地设置了`rect_width`及`round_corner`\n        \"\"\"\n\n        if self.mask is not None:\n            raise ValueError(\"当前片段已有蒙版, 不能再添加新的蒙版\")\n        if (rect_width is not None or round_corner is not None) and mask_type != MaskType.矩形:\n            raise ValueError(\"`rect_width` 以及 `round_corner` 仅在蒙版类型为矩形时允许设置\")\n        if rect_width is None and mask_type == MaskType.矩形:\n            rect_width = size\n        if round_corner is None:\n            round_corner = 0\n\n        width = rect_width or size * self.material_size[1] * mask_type.value.default_aspect_ratio / self.material_size[0]\n        self.mask = Mask(mask_type.value, center_x / (self.material_size[0] / 2), center_y / (self.material_size[1] / 2),\n                         w=width, h=size, ratio=mask_type.value.default_aspect_ratio,\n                         rot=rotation, inv=invert, feather=feather/100, round_corner=round_corner/100)\n        self.extra_material_refs.append(self.mask.global_id)\n        return self\n\n    def add_transition(self, transition_type: TransitionType, *, duration: Optional[Union[int, str]] = None) -> \"VideoSegment\":\n        \"\"\"为视频片段添加转场, 注意转场应当添加在**前面的**片段上\n\n        Args:\n            transition_type (`TransitionType`): 转场类型\n            duration (`int` or `str`, optional): 转场持续时间, 单位为微秒. 若传入字符串则会调用`tim()`函数进行解析. 若不指定则使用转场类型定义的默认值.\n\n        Raises:\n            `ValueError`: 试图添加多个转场.\n        \"\"\"\n        if self.transition is not None:\n            raise ValueError(\"当前片段已有转场, 不能再添加新的转场\")\n        if isinstance(duration, str): duration = tim(duration)\n\n        self.transition = Transition(transition_type, duration)\n        self.extra_material_refs.append(self.transition.global_id)\n        return self\n\n    def add_background_filling(self, fill_type: Literal[\"blur\", \"color\"], blur: float = 0.0625, color: str = \"#00000000\") -> \"VideoSegment\":\n        \"\"\"为视频片段添加背景填充\n\n        注意: 背景填充仅对底层视频轨道上的片段生效\n\n        Args:\n            fill_type (`blur` or `color`): 填充类型, `blur`表示模糊, `color`表示颜色.\n            blur (`float`, optional): 模糊程度, 0.0-1.0. 仅在`fill_type`为`blur`时有效. 剪映中的四档模糊数值分别为0.0625, 0.375, 0.75和1.0, 默认为0.0625.\n            color (`str`, optional): 填充颜色, 格式为'#RRGGBBAA'. 仅在`fill_type`为`color`时有效.\n\n        Raises:\n            `ValueError`: 当前片段已有背景填充效果或`fill_type`无效.\n        \"\"\"\n        if self.background_filling is not None:\n            raise ValueError(\"当前片段已有背景填充效果\")\n\n        if fill_type == \"blur\":\n            self.background_filling = BackgroundFilling(\"canvas_blur\", blur, color)\n        elif fill_type == \"color\":\n            self.background_filling = BackgroundFilling(\"canvas_color\", blur, color)\n        else:\n            raise ValueError(f\"无效的背景填充类型 {fill_type}\")\n\n        self.extra_material_refs.append(self.background_filling.global_id)\n        return self\n\n    def export_json(self) -> Dict[str, Any]:\n        json_dict = super().export_json()\n        json_dict.update({\n            \"hdr_settings\": {\"intensity\": 1.0, \"mode\": 1, \"nits\": 1000},\n        })\n        return json_dict\n\nclass StickerSegment(VisualSegment):\n    \"\"\"安放在轨道上的一个贴纸片段\"\"\"\n\n    resource_id: str\n    \"\"\"贴纸资源id\"\"\"\n\n    def __init__(self, resource_id: str, target_timerange: Timerange, *, clip_settings: Optional[ClipSettings] = None):\n        \"\"\"根据贴纸resource_id构建一个贴纸片段, 并指定其时间信息及图像调节设置\n\n        片段创建完成后, 可通过`ScriptFile.add_segment`方法将其添加到轨道中\n\n        Args:\n            resource_id (`str`): 贴纸resource_id, 可通过`ScriptFile.inspect_material`从模板中获取\n            target_timerange (`Timerange`): 片段在轨道上的目标时间范围\n            clip_settings (`ClipSettings`, optional): 图像调节设置, 默认不作任何变换\n        \"\"\"\n        super().__init__(uuid.uuid4().hex, None, target_timerange, 1.0, 1.0, False, clip_settings=clip_settings)\n        self.resource_id = resource_id\n\n    def export_material(self) -> Dict[str, Any]:\n        \"\"\"创建极简的贴纸素材对象, 以此不再单独定义贴纸素材类\"\"\"\n        return {\n            \"id\": self.material_id,\n            \"resource_id\": self.resource_id,\n            \"sticker_id\": self.resource_id,\n            \"source_platform\": 1,\n            \"type\": \"sticker\",\n        }\n"
  },
  {
    "path": "src/router/__init__.py",
    "content": "from .v1 import router as v1_router\n\n__all__ = [\"v1_router\"]"
  },
  {
    "path": "src/router/v1.py",
    "content": "from src.schemas.gen_video import GenVideoResponse\nfrom src.schemas.get_draft import GetDraftResponse\nfrom src.schemas.add_videos import AddVideosResponse\nfrom src.schemas.add_audios import AddAudiosResponse\nfrom src.schemas.add_images import AddImagesResponse\nfrom src.schemas.add_sticker import AddStickerResponse\nfrom src.schemas.add_keyframes import AddKeyframesResponse\nfrom src.schemas.add_captions import AddCaptionsResponse\nfrom src.schemas.add_effects import AddEffectsResponse\nfrom src.schemas.add_filters import AddFiltersResponse\nfrom src.schemas.add_masks import AddMasksResponse\nfrom src.schemas.add_text_style import AddTextStyleResponse\nfrom src.schemas.get_text_animations import GetTextAnimationsResponse\nfrom src.schemas.get_image_animations import GetImageAnimationsResponse\nfrom src.schemas.easy_create_material import EasyCreateMaterialResponse\nfrom src.schemas.save_draft import SaveDraftResponse\nfrom src.schemas.create_draft import CreateDraftResponse\nfrom fastapi import APIRouter, Request, Depends\nimport asyncio\nfrom src.schemas.create_draft import CreateDraftRequest, CreateDraftResponse\nfrom src.schemas.add_videos import AddVideosRequest, AddVideosResponse\nfrom src.schemas.add_audios import AddAudiosRequest, AddAudiosResponse\nfrom src.schemas.add_images import AddImagesRequest, AddImagesResponse\nfrom src.schemas.add_sticker import AddStickerRequest, AddStickerResponse\nfrom src.schemas.add_keyframes import AddKeyframesRequest, AddKeyframesResponse\nfrom src.schemas.add_captions import AddCaptionsRequest, AddCaptionsResponse\nfrom src.schemas.add_effects import AddEffectsRequest, AddEffectsResponse\nfrom src.schemas.add_filters import AddFiltersRequest, AddFiltersResponse\nfrom src.schemas.add_masks import AddMasksRequest, AddMasksResponse\nfrom src.schemas.add_text_style import AddTextStyleRequest, AddTextStyleResponse\nfrom src.schemas.get_text_animations import GetTextAnimationsRequest, GetTextAnimationsResponse\nfrom src.schemas.get_image_animations import GetImageAnimationsRequest, GetImageAnimationsResponse\nfrom src.schemas.easy_create_material import EasyCreateMaterialRequest, EasyCreateMaterialResponse\nfrom src.schemas.save_draft import SaveDraftRequest, SaveDraftResponse\nfrom src.schemas.gen_video import GenVideoRequest, GenVideoResponse\nfrom src.schemas.gen_video_status import GenVideoStatusRequest, GenVideoStatusResponse\nfrom src.schemas.gen_video_active_count import GenVideoActiveCountResponse\nfrom src.schemas.get_draft import GetDraftRequest, GetDraftResponse\nfrom src.schemas.get_audio_duration import GetAudioDurationRequest, GetAudioDurationResponse\nfrom src.schemas.timelines import TimelinesRequest, TimelinesResponse\nfrom src.schemas.audio_timelines import AudioTimelinesRequest, AudioTimelinesResponse\nfrom src.schemas.audio_infos import AudioInfosRequest, AudioInfosResponse\nfrom src.schemas.imgs_infos import ImgsInfosRequest, ImgsInfosResponse\nfrom src.schemas.caption_infos import CaptionInfosRequest, CaptionInfosResponse\nfrom src.schemas.effect_infos import EffectInfosRequest, EffectInfosResponse\nfrom src.schemas.filter_infos import FilterInfosRequest, FilterInfosResponse\nfrom src.schemas.get_filters import GetFiltersRequest, GetFiltersResponse\nfrom src.schemas.get_text_effects import GetTextEffectsRequest, GetTextEffectsResponse\nfrom src.schemas.get_effects import GetEffectsRequest, GetEffectsResponse\nfrom src.schemas.keyframes_infos import KeyframesInfosRequest, KeyframesInfosResponse\nfrom src.schemas.video_infos import VideoInfosRequest, VideoInfosResponse\nfrom src.schemas.search_sticker import SearchStickerRequest, SearchStickerResponse\nfrom src.schemas.get_url import GetUrlRequest, GetUrlResponse\nfrom src.schemas.str_list_to_objs import StrListToObjsRequest, StrListToObjsResponse\nfrom src.schemas.str_to_list import StrToListRequest, StrToListResponse\nfrom src.schemas.objs_to_str_list import ObjsToStrListRequest, ObjsToStrListResponse\nfrom src import service\nfrom src.service.get_text_effects import get_text_effects as get_text_effects_service\nfrom typing import Annotated\nfrom src.utils.logger import logger\nimport config\n\n\nrouter = APIRouter(prefix=\"/v1\", tags=[\"v1\"])\n\n@router.post(path=\"/create_draft\", response_model=CreateDraftResponse)\ndef create_draft(cdr: CreateDraftRequest) -> CreateDraftResponse:\n    \"\"\"\n    创建剪映草稿 (v1版本)\n    \"\"\"\n    \n    # 调用service层处理业务逻辑\n    draft_url = service.create_draft(\n        width=cdr.width,\n        height=cdr.height\n    )\n\n    return CreateDraftResponse(draft_url=draft_url, tip_url=config.TIP_URL)\n\n@router.post(path=\"/save_draft\", response_model=SaveDraftResponse)\nasync def save_draft(sdr: SaveDraftRequest) -> SaveDraftResponse:\n    \"\"\"\n    保存剪映草稿 (v1 版本，带并发锁保护)\n    \n    使用异步锁机制防止同一草稿的并发写操作导致文件损坏\n    \"\"\"\n    # 调用 service 层处理业务逻辑（异步版本，带锁保护）\n    draft_url = await service.save_draft_async(\n        draft_url=sdr.draft_url,\n        lock_timeout=30.0  # 30 秒超时\n    )\n\n    return SaveDraftResponse(draft_url=draft_url)\n\n@router.post(path=\"/add_videos\", response_model=AddVideosResponse)\nasync def add_videos(avr: AddVideosRequest) -> AddVideosResponse:\n    \"\"\"\n    向剪映草稿添加视频 (v1 版本，带并发锁保护)\n    \n    使用异步锁机制防止同一草稿的并发写操作导致文件损坏\n    \"\"\"\n    # 调用 service 层处理业务逻辑（异步版本，带锁保护）\n    draft_url, track_id, video_ids, segment_ids, segment_infos = await service.add_videos_async(\n        draft_url=avr.draft_url,\n        video_infos=avr.video_infos,\n        scene_timelines=[{\"start\": t.start, \"end\": t.end} for t in avr.scene_timelines] if avr.scene_timelines else None,\n        alpha=avr.alpha,\n        scale_x=avr.scale_x,\n        scale_y=avr.scale_y,\n        transform_x=avr.transform_x,\n        transform_y=avr.transform_y,\n        lock_timeout=30.0  # 30 秒超时\n    )\n\n    return AddVideosResponse(\n        draft_url=draft_url,\n        track_id=track_id,\n        video_ids=video_ids,\n        segment_ids=segment_ids,\n        segment_infos=segment_infos,\n    )\n\n@router.post(path=\"/add_audios\", response_model=AddAudiosResponse)\nasync def add_audios(aar: AddAudiosRequest) -> AddAudiosResponse:\n    \"\"\"\n    向剪映草稿批量添加音频 (v1 版本，带并发锁保护)\n    \n    使用异步锁机制防止同一草稿的并发写操作导致文件损坏\n    \"\"\"\n    # 调用 service 层处理业务逻辑（异步版本，带锁保护）\n    draft_url, track_id, audio_ids = await service.add_audios_async(\n        draft_url=aar.draft_url,\n        audio_infos=aar.audio_infos,\n        lock_timeout=30.0  # 30 秒超时\n    )\n\n    return AddAudiosResponse(draft_url=draft_url, track_id=track_id, audio_ids=audio_ids)\n\n@router.post(path=\"/add_images\", response_model=AddImagesResponse)\nasync def add_images(air: AddImagesRequest) -> AddImagesResponse:\n    \"\"\"\n    向剪映草稿批量添加图片 (v1 版本，带并发锁保护)\n    \n    使用异步锁机制防止同一草稿的并发写操作导致文件损坏\n    \"\"\"\n    # 调用 service 层处理业务逻辑（异步版本，带锁保护）\n    draft_url, track_id, image_ids, segment_ids, segment_infos = await service.add_images_async(\n        draft_url=air.draft_url,\n        image_infos=air.image_infos,\n        alpha=air.alpha,\n        scale_x=air.scale_x,\n        scale_y=air.scale_y,\n        transform_x=air.transform_x,\n        transform_y=air.transform_y,\n        lock_timeout=30.0  # 30 秒超时\n    )\n\n    return AddImagesResponse(\n        draft_url=draft_url, \n        track_id=track_id, \n        image_ids=image_ids, \n        segment_ids=segment_ids, \n        segment_infos=segment_infos\n    )\n\n@router.post(path=\"/add_sticker\", response_model=AddStickerResponse)\nasync def add_sticker(asr: AddStickerRequest) -> AddStickerResponse:\n    \"\"\"\n    向剪映草稿添加贴纸 (v1 版本，带并发锁保护)\n    \n    使用异步锁机制防止同一草稿的并发写操作导致文件损坏\n    \"\"\"\n    # 调用 service 层处理业务逻辑（异步版本，带锁保护）\n    draft_url, sticker_id, track_id, segment_id, duration = await service.add_sticker_async(\n        draft_url=asr.draft_url,\n        sticker_id=asr.sticker_id,\n        start=asr.start,\n        end=asr.end,\n        scale=asr.scale,\n        transform_x=asr.transform_x,\n        transform_y=asr.transform_y,\n        lock_timeout=30.0  # 30 秒超时\n    )\n\n    return AddStickerResponse(\n        draft_url=draft_url,\n        sticker_id=sticker_id,\n        track_id=track_id,\n        segment_id=segment_id,\n        duration=duration\n    )\n\n@router.post(path=\"/add_keyframes\", response_model=AddKeyframesResponse)\nasync def add_keyframes(akr: AddKeyframesRequest) -> AddKeyframesResponse:\n    \"\"\"\n    向剪映草稿添加关键帧 (v1 版本，带并发锁保护)\n    \n    使用异步锁机制防止同一草稿的并发写操作导致文件损坏\n    \"\"\"\n    # 调用 service 层处理业务逻辑（异步版本，带锁保护）\n    draft_url, keyframes_added, affected_segments = await service.add_keyframes_async(\n        draft_url=akr.draft_url,\n        keyframes=akr.keyframes,\n        lock_timeout=30.0  # 30 秒超时\n    )\n\n    return AddKeyframesResponse(\n        draft_url=draft_url,\n        keyframes_added=keyframes_added,\n        affected_segments=affected_segments\n    )\n\n@router.post(path=\"/add_captions\", response_model=AddCaptionsResponse)\nasync def add_captions(acr: AddCaptionsRequest) -> AddCaptionsResponse:\n    \"\"\"\n    向剪映草稿批量添加字幕 (v1 版本，带并发锁保护)\n    \n    使用异步锁机制防止同一草稿的并发写操作导致文件损坏\n    \"\"\"\n    # 添加日志打印参数值\n    logger.info(f\"add_captions request params: {acr.model_dump_json()}\")\n\n    # 调用 service 层处理业务逻辑（异步版本，带锁保护）\n    draft_url, track_id, text_ids, segment_ids, segment_infos = await service.add_captions_async(\n        draft_url=acr.draft_url,\n        captions=acr.captions,\n        text_color=acr.text_color,\n        border_color=acr.border_color,\n        alignment=acr.alignment,\n        alpha=acr.alpha,\n        font=acr.font,\n        font_size=acr.font_size,\n        letter_spacing=acr.letter_spacing,\n        line_spacing=acr.line_spacing,\n        scale_x=acr.scale_x,\n        scale_y=acr.scale_y,\n        transform_x=acr.transform_x,\n        transform_y=acr.transform_y,\n        style_text=acr.style_text,\n        underline=acr.underline,\n        italic=acr.italic,\n        bold=acr.bold,\n        has_shadow=acr.has_shadow,\n        shadow_info=acr.shadow_info,\n        text_effect=acr.text_effect,\n        lock_timeout=30.0  # 30 秒超时\n    )\n\n    return AddCaptionsResponse(\n        draft_url=draft_url,\n        track_id=track_id,\n        text_ids=text_ids,\n        segment_ids=segment_ids,\n        segment_infos=segment_infos\n    )\n\n@router.post(path=\"/add_effects\", response_model=AddEffectsResponse)\nasync def add_effects(aer: AddEffectsRequest) -> AddEffectsResponse:\n    \"\"\"\n    向剪映草稿添加特效 (v1 版本，带并发锁保护)\n    \n    使用异步锁机制防止同一草稿的并发写操作导致文件损坏\n    \"\"\"\n    # 调用 service 层处理业务逻辑（异步版本，带锁保护）\n    draft_url, track_id, effect_ids, segment_ids = await service.add_effects_async(\n        draft_url=aer.draft_url,\n        effect_infos=aer.effect_infos,\n        lock_timeout=30.0  # 30 秒超时\n    )\n\n    return AddEffectsResponse(\n        draft_url=draft_url,\n        track_id=track_id,\n        effect_ids=effect_ids,\n        segment_ids=segment_ids\n    )\n\n@router.post(path=\"/add_filters\", response_model=AddFiltersResponse)\nasync def add_filters(afr: AddFiltersRequest) -> AddFiltersResponse:\n    \"\"\"\n    向剪映草稿添加滤镜 (v1 版本，带并发锁保护)\n    \n    使用异步锁机制防止同一草稿的并发写操作导致文件损坏\n    \"\"\"\n    # 调用 service 层处理业务逻辑（异步版本，带锁保护）\n    draft_url, track_id, filter_ids, segment_ids = await service.add_filters_async(\n        draft_url=afr.draft_url,\n        filter_infos=afr.filter_infos,\n        lock_timeout=30.0  # 30 秒超时\n    )\n\n    return AddFiltersResponse(\n        draft_url=draft_url,\n        track_id=track_id,\n        filter_ids=filter_ids,\n        segment_ids=segment_ids\n    )\n\n@router.post(path=\"/add_masks\", response_model=AddMasksResponse)\nasync def add_masks(amr: AddMasksRequest) -> AddMasksResponse:\n    \"\"\"\n    向剪映草稿添加遮罩 (v1 版本，带并发锁保护)\n    \n    使用异步锁机制防止同一草稿的并发写操作导致文件损坏\n    \"\"\"\n    # 调用 service 层处理业务逻辑（异步版本，带锁保护）\n    draft_url, masks_added, affected_segments, mask_ids = await service.add_masks_async(\n        draft_url=amr.draft_url,\n        segment_ids=amr.segment_ids,\n        name=amr.name,\n        X=amr.X,\n        Y=amr.Y,\n        width=amr.width,\n        height=amr.height,\n        feather=amr.feather,\n        rotation=amr.rotation,\n        invert=amr.invert,\n        roundCorner=amr.roundCorner,\n        lock_timeout=30.0  # 30 秒超时\n    )\n\n    return AddMasksResponse(\n        draft_url=draft_url,\n        masks_added=masks_added,\n        affected_segments=affected_segments,\n        mask_ids=mask_ids\n    )\n\n@router.post(path=\"/add_text_style\", response_model=AddTextStyleResponse)\ndef add_text_style(atsr: AddTextStyleRequest) -> AddTextStyleResponse:\n    \"\"\"\n    为文本创建富文本样式 (v1版本)\n    \"\"\"\n\n    # 调用service层处理业务逻辑\n    text_style = service.add_text_style(\n        text=atsr.text,\n        keyword=atsr.keyword,\n        font_size=atsr.font_size,\n        keyword_color=atsr.keyword_color,\n        keyword_font_size=atsr.keyword_font_size\n    )\n\n    return AddTextStyleResponse(\n        text_style=text_style\n    )\n\n@router.post(path=\"/easy_create_material\", response_model=EasyCreateMaterialResponse)\nasync def easy_create_material(ecmr: EasyCreateMaterialRequest) -> EasyCreateMaterialResponse:\n    \"\"\"\n    快速创建素材轨道 (v1 版本，带并发锁保护)\n    \n    使用异步锁机制防止同一草稿的并发写操作导致文件损坏\n    \"\"\"\n    # 调用 service 层处理业务逻辑（异步版本，带锁保护）\n    draft_url = await service.easy_create_material_async(\n        draft_url=ecmr.draft_url,\n        audio_url=ecmr.audio_url,\n        text=ecmr.text,\n        img_url=ecmr.img_url,\n        video_url=ecmr.video_url,\n        text_color=ecmr.text_color,\n        font_size=ecmr.font_size,\n        text_transform_y=ecmr.text_transform_y,\n        lock_timeout=30.0  # 30 秒超时\n    )\n\n    return EasyCreateMaterialResponse(\n        draft_url=draft_url\n    )\n\n@router.post(path=\"/get_text_animations\", response_model=GetTextAnimationsResponse)\ndef get_text_animations(gtar: GetTextAnimationsRequest) -> GetTextAnimationsResponse:\n    \"\"\"\n    获取文字出入场动画 (v1版本)\n    \"\"\"\n\n    # 调用service层处理业务逻辑\n    effects = service.get_text_animations(\n        mode=gtar.mode,\n        type=gtar.type\n    )\n\n    # 直接返回对象数组，Pydantic会自动处理序列化\n    return GetTextAnimationsResponse(\n        effects=effects\n    )\n\n@router.post(path=\"/get_image_animations\", response_model=GetImageAnimationsResponse)\ndef get_image_animations(giar: GetImageAnimationsRequest) -> GetImageAnimationsResponse:\n    \"\"\"\n    获取图片出入场动画 (v1 版本)\n    \"\"\"\n\n    # 调用 service 层处理业务逻辑\n    effects = service.get_image_animations(\n        mode=giar.mode,\n        type=giar.type\n    )\n\n    # 直接返回对象数组，Pydantic 会自动处理序列化\n    return GetImageAnimationsResponse(\n        effects=effects\n    )\n\n@router.post(path=\"/get_filters\", response_model=GetFiltersResponse)\ndef get_filters(gfr: GetFiltersRequest) -> GetFiltersResponse:\n    \"\"\"\n    获取滤镜列表 (v1 版本)\n    \"\"\"\n\n    # 调用 service 层处理业务逻辑\n    filters = service.get_filters(\n        mode=gfr.mode\n    )\n\n    # 直接返回对象数组，Pydantic 会自动处理序列化\n    return GetFiltersResponse(\n        filters=filters\n    )\n\n@router.post(path=\"/get_text_effects\", response_model=GetTextEffectsResponse)\ndef get_text_effects(gter: GetTextEffectsRequest) -> GetTextEffectsResponse:\n    \"\"\"\n    获取花字效果列表 (v1 版本)\n    \n    返回所有支持的花字效果，支持按 VIP/免费筛选\n    \"\"\"\n\n    # 调用 service 层处理业务逻辑\n    text_effects = get_text_effects_service(\n        mode=gter.mode\n    )\n\n    # 返回响应，由 middleware 统一添加 code 和 message\n    return GetTextEffectsResponse(\n        text_effects=text_effects\n    )\n\n@router.post(path=\"/get_effects\", response_model=GetEffectsResponse)\ndef get_effects(ger: GetEffectsRequest) -> GetEffectsResponse:\n    \"\"\"\n    获取特效列表 (v1 版本)\n    \"\"\"\n\n    # 调用 service 层处理业务逻辑\n    effects = service.get_effects(\n        mode=ger.mode\n    )\n\n    # 直接返回对象数组，Pydantic 会自动处理序列化\n    return GetEffectsResponse(\n        effects=effects\n    )\n\n@router.get(path=\"/get_draft\", response_model=GetDraftResponse)\ndef get_draft(params: Annotated[GetDraftRequest, Depends()]) -> GetDraftResponse:\n    \"\"\"\n    获取草稿 - 获取所有文件列表\n    \"\"\"\n\n    # 调用service层处理业务逻辑\n    files = service.get_draft(\n        draft_id=params.draft_id,\n    )\n\n    return GetDraftResponse(files=files)\n\n# 生成视频 - 根据草稿URL，导出视频\n@router.post(path=\"/gen_video\", response_model=GenVideoResponse)\ndef gen_video(request: Request, gvr: GenVideoRequest) -> GenVideoResponse:\n    \"\"\"\n    生成视频 - 根据草稿URL，导出视频\n    \"\"\"\n\n    # 调用service层处理业务逻辑\n    message = service.gen_video(\n        draft_url=gvr.draft_url,\n        apiKey=gvr.apiKey\n    )\n\n    return GenVideoResponse(message=message)\n\n\n@router.post(path=\"/gen_video_status\", response_model=GenVideoStatusResponse)\ndef gen_video_status(gvsr: GenVideoStatusRequest) -> GenVideoStatusResponse:\n    \"\"\"\n    查询视频生成任务状态 (v1版本)\n    \"\"\"\n\n    # 调用service层处理业务逻辑\n    status_info = service.gen_video_status(\n        draft_url=gvsr.draft_url\n    )\n\n    return GenVideoStatusResponse(**status_info)\n\n\n@router.get(path=\"/gen_video_active_count\", response_model=GenVideoActiveCountResponse)\ndef gen_video_active_count() -> GenVideoActiveCountResponse:\n    \"\"\"\n    查询当前进行中的云渲染草稿数量（排队中 + 渲染中，不含已完成/失败）。\n    \"\"\"\n    count = service.get_gen_video_active_count()\n    return GenVideoActiveCountResponse(count=count)\n\n\n@router.post(path=\"/get_audio_duration\", response_model=GetAudioDurationResponse)\ndef get_audio_duration(gadr: GetAudioDurationRequest) -> GetAudioDurationResponse:\n    \"\"\"\n    获取音频文件时长 (v1版本)\n    \"\"\"\n    \n    # 调用service层处理业务逻辑\n    duration = service.get_audio_duration(\n        mp3_url=gadr.mp3_url\n    )\n    \n    return GetAudioDurationResponse(duration=duration)\n\n\n@router.post(path=\"/timelines\", response_model=TimelinesResponse)\ndef timelines(request: TimelinesRequest) -> TimelinesResponse:\n    \"\"\"\n    创建时间线 (v1版本)\n    \"\"\"\n    logger.info(\"Received request to calculate timelines\")\n    \n    # 调用service层处理业务逻辑\n    timelines, all_timelines = service.timelines(\n        duration=request.duration,\n        num=request.num,\n        start=request.start,\n        type=request.type\n    )\n\n    return TimelinesResponse(timelines=timelines, all_timelines=all_timelines)\n\n\n@router.post(path=\"/audio_timelines\", response_model=AudioTimelinesResponse)\ndef audio_timelines(request: AudioTimelinesRequest) -> AudioTimelinesResponse:\n    \"\"\"\n    根据音频文件时长计算时间线 (v1版本)\n    \"\"\"\n    logger.info(\"Received request to calculate audio timelines\")\n    \n    # 调用service层处理业务逻辑\n    timelines, all_timelines = service.audio_timelines(\n        links=request.links\n    )\n    \n    return AudioTimelinesResponse(timelines=timelines, all_timelines=all_timelines)\n\n\n@router.post(path=\"/audio_infos\", response_model=AudioInfosResponse)\ndef audio_infos(request: AudioInfosRequest) -> AudioInfosResponse:\n    \"\"\"\n    根据音频URL和时间线生成音频信息 (v1版本)\n    \"\"\"\n    logger.info(\"Received request to generate audio infos\")\n    \n    # 调用service层处理业务逻辑\n    infos_json = service.audio_infos(\n        mp3_urls=request.mp3_urls,\n        timelines=[{\"start\": t.start, \"end\": t.end} for t in request.timelines],\n        audio_effect=request.audio_effect,\n        volume=request.volume\n    )\n    \n    return AudioInfosResponse(infos=infos_json)\n\n\n@router.post(path=\"/imgs_infos\", response_model=ImgsInfosResponse)\ndef imgs_infos(request: ImgsInfosRequest) -> ImgsInfosResponse:\n    \"\"\"\n    根据图片URL和时间线生成图片信息 (v1版本)\n    \"\"\"\n    logger.info(\"Received request to generate image infos\")\n    \n    # 调用service层处理业务逻辑\n    infos_json = service.imgs_infos(\n        imgs=request.imgs,\n        timelines=[{\"start\": t.start, \"end\": t.end} for t in request.timelines],\n        height=request.height,\n        width=request.width,\n        in_animation=request.in_animation,\n        in_animation_duration=request.in_animation_duration,\n        loop_animation=request.loop_animation,\n        loop_animation_duration=request.loop_animation_duration,\n        out_animation=request.out_animation,\n        out_animation_duration=request.out_animation_duration,\n        transition=request.transition,\n        transition_duration=request.transition_duration\n    )\n    \n    return ImgsInfosResponse(infos=infos_json)\n\n\n@router.post(path=\"/caption_infos\", response_model=CaptionInfosResponse)\ndef caption_infos(request: CaptionInfosRequest) -> CaptionInfosResponse:\n    \"\"\"\n    根据文本和时间线生成字幕信息 (v1版本)\n    \"\"\"\n    logger.info(\"Received request to generate caption infos\")\n    \n    # 调用service层处理业务逻辑\n    infos_json = service.caption_infos(\n        texts=request.texts,\n        timelines=[{\"start\": t.start, \"end\": t.end} for t in request.timelines],\n        font_size=request.font_size,\n        keyword_color=request.keyword_color,\n        keyword_border_color=request.keyword_border_color,\n        keyword_font_size=request.keyword_font_size,\n        keywords=request.keywords,\n        in_animation=request.in_animation,\n        in_animation_duration=request.in_animation_duration,\n        loop_animation=request.loop_animation,\n        loop_animation_duration=request.loop_animation_duration,\n        out_animation=request.out_animation,\n        out_animation_duration=request.out_animation_duration,\n        transition=request.transition,\n        transition_duration=request.transition_duration\n    )\n    \n    return CaptionInfosResponse(infos=infos_json)\n\n\n@router.post(path=\"/effect_infos\", response_model=EffectInfosResponse)\ndef effect_infos(request: EffectInfosRequest) -> EffectInfosResponse:\n    \"\"\"\n    根据特效名称和时间线生成特效信息 (v1版本)\n    \"\"\"\n    logger.info(\"Received request to generate effect infos\")\n    \n    # 调用service层处理业务逻辑\n    infos_json = service.effect_infos(\n        effects=request.effects,\n        timelines=[{\"start\": t.start, \"end\": t.end} for t in request.timelines]\n    )\n    \n    return EffectInfosResponse(infos=infos_json)\n\n\n@router.post(path=\"/filter_infos\", response_model=FilterInfosResponse)\ndef filter_infos(request: FilterInfosRequest) -> FilterInfosResponse:\n    \"\"\"\n    根据滤镜名称、时间线和强度生成滤镜信息 (v1版本)\n    \"\"\"\n    logger.info(\"Received request to generate filter infos\")\n    \n    # 调用service层处理业务逻辑\n    infos_json = service.filter_infos(\n        filters=request.filters,\n        timelines=[{\"start\": t.start, \"end\": t.end} for t in request.timelines],\n        intensities=request.intensities\n    )\n    \n    return FilterInfosResponse(infos=infos_json)\n\n\n@router.post(path=\"/keyframes_infos\", response_model=KeyframesInfosResponse)\ndef keyframes_infos(request: KeyframesInfosRequest) -> KeyframesInfosResponse:\n    \"\"\"\n    根据关键帧类型、位置比例和值生成关键帧信息 (v1版本)\n    \"\"\"\n    logger.info(\"Received request to generate keyframes infos\")\n    \n    # 调用service层处理业务逻辑\n    keyframes_json = service.keyframes_infos(\n        ctype=request.ctype,\n        offsets=request.offsets,\n        values=request.values,\n        segment_infos=[{\"id\": s.id, \"start\": s.start, \"end\": s.end} for s in request.segment_infos],\n        height=request.height,\n        width=request.width\n    )\n    \n    return KeyframesInfosResponse(keyframes_infos=keyframes_json)\n\n\n@router.post(path=\"/video_infos\", response_model=VideoInfosResponse)\ndef video_infos(request: VideoInfosRequest) -> VideoInfosResponse:\n    \"\"\"\n    根据视频URL和时间线生成视频信息 (v1版本)\n    \"\"\"\n    logger.info(\"Received request to generate video infos\")\n    \n    # 调用service层处理业务逻辑\n    infos_json = service.video_infos(\n        video_urls=request.video_urls,\n        timelines=[{\"start\": t.start, \"end\": t.end} for t in request.timelines],\n        height=request.height,\n        width=request.width,\n        mask=request.mask,\n        transition=request.transition,\n        transition_duration=request.transition_duration,\n        volume=request.volume\n    )\n    \n    return VideoInfosResponse(infos=infos_json)\n\n\n@router.post(path=\"/search_sticker\", response_model=SearchStickerResponse)\ndef search_sticker(ssr: SearchStickerRequest) -> SearchStickerResponse:\n    \"\"\"\n    搜索贴纸 (v1版本)\n    \"\"\"\n    \n    # 调用service层处理业务逻辑\n    data = service.search_sticker(\n        keyword=ssr.keyword\n    )\n    \n    return SearchStickerResponse(data=data)\n\n\n@router.post(path=\"/get_url\", response_model=GetUrlResponse)\ndef get_url(gur: GetUrlRequest) -> GetUrlResponse:\n    \"\"\"\n    提取链接 (v1版本)\n    \"\"\"\n    \n    # 调用service层处理业务逻辑\n    output = service.get_url(\n        output=gur.output\n    )\n    \n    return GetUrlResponse(output=output)\n\n\n@router.post(path=\"/str_list_to_objs\", response_model=StrListToObjsResponse)\ndef str_list_to_objs(slto: StrListToObjsRequest) -> StrListToObjsResponse:\n    \"\"\"\n    字符串列表转化成对象列表 (v1版本)\n    \"\"\"\n    \n    # 调用service层处理业务逻辑\n    infos = service.str_list_to_objs(\n        infos=slto.infos\n    )\n    \n    return StrListToObjsResponse(infos=infos)\n\n\n@router.post(path=\"/str_to_list\", response_model=StrToListResponse)\ndef str_to_list(stl: StrToListRequest) -> StrToListResponse:\n    \"\"\"\n    字符转列表 (v1版本)\n    \"\"\"\n    \n    # 调用service层处理业务逻辑\n    infos = service.str_to_list(\n        obj=stl.obj\n    )\n    \n    return StrToListResponse(infos=infos)\n\n\n@router.post(path=\"/objs_to_str_list\", response_model=ObjsToStrListResponse)\ndef objs_to_str_list(otl: ObjsToStrListRequest) -> ObjsToStrListResponse:\n    \"\"\"\n    对象列表转化成字符串列表 (v1版本)\n    \"\"\"\n    \n    # 调用service层处理业务逻辑\n    infos = service.objs_to_str_list(\n        outputs=[obj.dict() for obj in otl.outputs]\n    )\n    \n    return ObjsToStrListResponse(infos=infos)\n"
  },
  {
    "path": "src/schemas/__init__.py",
    "content": "from .create_draft import CreateDraftRequest, CreateDraftResponse\nfrom .add_videos import AddVideosRequest, AddVideosResponse\nfrom .gen_video import GenVideoRequest, GenVideoResponse\nfrom .save_draft import SaveDraftRequest, SaveDraftResponse\nfrom .get_draft import GetDraftRequest, GetDraftResponse\nfrom .get_audio_duration import GetAudioDurationRequest, GetAudioDurationResponse\n\n__all__ = [\n    \"CreateDraftRequest\", \n    \"CreateDraftResponse\", \n    \"AddVideosRequest\", \n    \"AddVideosResponse\", \n    \"GenVideoRequest\", \n    \"GenVideoResponse\", \n    \"SaveDraftRequest\", \n    \"SaveDraftResponse\", \n    \"GetDraftRequest\", \n    \"GetDraftResponse\",\n    \"GetAudioDurationRequest\",\n    \"GetAudioDurationResponse\"\n]\n"
  },
  {
    "path": "src/schemas/add_audios.py",
    "content": "import json\nfrom pydantic import BaseModel, Field, field_validator\nfrom typing import List\n\n\nclass AddAudiosRequest(BaseModel):\n    \"\"\"批量添加音频请求参数\"\"\"\n    draft_url: str = Field(..., description=\"草稿URL\")\n    audio_infos: str = Field(..., description=\"音频信息列表, 用JSON字符串表示\")\n\n    @field_validator(\"audio_infos\")\n    @classmethod\n    def validate_audio_infos_http_urls(cls, value: str) -> str:\n        \"\"\"在 schema 层校验 audio_url 必须为 http/https。\"\"\"\n        try:\n            data = json.loads(value)\n        except json.JSONDecodeError as exc:\n            raise ValueError(f\"audio_infos JSON parse error: {exc.msg}\") from exc\n\n        if not isinstance(data, list):\n            raise ValueError(\"audio_infos should be a list\")\n\n        for idx, item in enumerate(data):\n            if not isinstance(item, dict):\n                raise ValueError(f\"audio_infos[{idx}] should be an object\")\n            audio_url = item.get(\"audio_url\")\n            if not isinstance(audio_url, str) or not audio_url.startswith((\"http://\", \"https://\")):\n                raise ValueError(f\"audio_infos[{idx}].audio_url must start with http:// or https://\")\n        return value\n\n\nclass AddAudiosResponse(BaseModel):\n    \"\"\"添加音频响应参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    track_id: str = Field(default=\"\", description=\"音频轨道ID\")\n    audio_ids: List[str] = Field(default=[], description=\"音频ID列表\")"
  },
  {
    "path": "src/schemas/add_captions.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List, Optional\n\n\nclass ShadowInfo(BaseModel):\n    \"\"\"文本阴影参数\"\"\"\n    shadow_alpha: float = Field(default=1.0, ge=0.0, le=1.0, description=\"阴影不透明度, 取值范围为[0, 1]\")\n    shadow_color: str = Field(default=\"#000000\", description=\"阴影颜色（十六进制）\")\n    shadow_diffuse: float = Field(default=15.0, ge=0.0, le=100.0, description=\"阴影扩散程度, 取值范围为[0, 100]\")\n    shadow_distance: float = Field(default=5.0, ge=0.0, le=100.0, description=\"阴影距离, 取值范围为[0, 100]\")\n    shadow_angle: float = Field(default=-45.0, ge=-180.0, le=180.0, description=\"阴影角度, 取值范围为[-180, 180]\")\n\n\nclass AddCaptionsRequest(BaseModel):\n    \"\"\"批量添加字幕请求参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    captions: str = Field(default=\"\", description=\"字幕信息列表, 用JSON字符串表示\")\n    text_color: str = Field(default=\"#ffffff\", description=\"文本颜色（十六进制）\")\n    border_color: Optional[str] = Field(default=None, description=\"边框颜色（十六进制）\")\n    alignment: int = Field(default=1, ge=0, le=5, description=\"文本对齐方式（0-5）\")\n    alpha: float = Field(default=1.0, ge=0.0, le=1.0, description=\"文本透明度（0.0-1.0）\")\n    font: Optional[str] = Field(default=None, description=\"字体名称\")\n    font_size: int = Field(default=15, ge=1, description=\"字体大小\")\n    letter_spacing: Optional[float] = Field(default=None, description=\"字间距\")\n    line_spacing: Optional[float] = Field(default=None, description=\"行间距\")\n    scale_x: float = Field(default=1.0, description=\"水平缩放\")\n    scale_y: float = Field(default=1.0, description=\"垂直缩放\")\n    transform_x: float = Field(default=0.0, description=\"水平位移\")\n    transform_y: float = Field(default=0.0, description=\"垂直位移\")\n    style_text: bool = Field(default=False, description=\"是否使用样式文本\")\n    underline: bool = Field(default=False, description=\"文字下划线开关\")\n    italic: bool = Field(default=False, description=\"文本斜体开关\")\n    bold: bool = Field(default=False, description=\"文本加粗开关\")\n    has_shadow: bool = Field(default=False, description=\"是否启用文本阴影\")\n    shadow_info: Optional[ShadowInfo] = Field(default=None, description=\"文本阴影参数\")\n    text_effect: Optional[str] = Field(default=None, description=\"花字效果名称或 effect_id，例如：'白字橘色发光花字'\")\n\n\nclass CaptionItem(BaseModel):\n    \"\"\"单个字幕信息\"\"\"\n    start: int = Field(..., description=\"字幕开始时间（微秒）\")\n    end: int = Field(..., description=\"字幕结束时间（微秒）\")\n    text: str = Field(..., description=\"字幕文本内容\")\n    keyword: Optional[str] = Field(default=None, description=\"关键词（用|分隔多个关键词）\")\n    keyword_color: str = Field(default=\"#ff7100\", description=\"关键词颜色\")\n    keyword_border_color: Optional[str] = Field(default=None, description=\"关键词边框颜色\")\n    keyword_font_size: int = Field(default=15, ge=1, description=\"关键词字体大小\")\n    font_size: int = Field(default=15, ge=1, description=\"文本字体大小\")\n    in_animation: Optional[str] = Field(default=None, description=\"入场动画\")\n    out_animation: Optional[str] = Field(default=None, description=\"出场动画\")\n    loop_animation: Optional[str] = Field(default=None, description=\"循环动画\")\n    in_animation_duration: Optional[int] = Field(default=None, description=\"入场动画时长\")\n    out_animation_duration: Optional[int] = Field(default=None, description=\"出场动画时长\")\n    loop_animation_duration: Optional[int] = Field(\n        default=None,\n        description=\"循环动画单次循环时长（微秒），与 get_text_animations 中 loop 的 duration 一致；不填则用该动画默认值\",\n    )\n    text_effect: Optional[str] = Field(default=None, description=\"花字效果名称或 effect_id，例如：'白字橘色发光花字'\")\n\n\nclass SegmentInfo(BaseModel):\n    \"\"\"片段信息\"\"\"\n    id: str = Field(..., description=\"片段ID\")\n    start: int = Field(..., description=\"片段开始时间（微秒）\")\n    end: int = Field(..., description=\"片段结束时间（微秒）\")\n\n\nclass AddCaptionsResponse(BaseModel):\n    \"\"\"添加字幕响应参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    track_id: str = Field(default=\"\", description=\"字幕轨道ID\")\n    text_ids: List[str] = Field(default=[], description=\"字幕ID列表\")\n    segment_ids: List[str] = Field(default=[], description=\"字幕片段ID列表\")\n    segment_infos: List[SegmentInfo] = Field(default=[], description=\"片段信息列表\")"
  },
  {
    "path": "src/schemas/add_effects.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List\n\n\nclass AddEffectsRequest(BaseModel):\n    \"\"\"添加特效请求参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    effect_infos: str = Field(default=\"\", description=\"特效信息列表, 用JSON字符串表示\")\n\n\nclass EffectItem(BaseModel):\n    \"\"\"单个特效信息\"\"\"\n    effect_title: str = Field(..., description=\"特效名称/标题\")\n    start: int = Field(..., description=\"特效开始时间（微秒）\")\n    end: int = Field(..., description=\"特效结束时间（微秒）\")\n\n\nclass AddEffectsResponse(BaseModel):\n    \"\"\"添加特效响应参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    track_id: str = Field(default=\"\", description=\"特效轨道ID\")\n    effect_ids: List[str] = Field(default=[], description=\"特效ID列表\")\n    segment_ids: List[str] = Field(default=[], description=\"特效片段ID列表\")"
  },
  {
    "path": "src/schemas/add_filters.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List\n\n\nclass AddFiltersRequest(BaseModel):\n    \"\"\"添加滤镜请求参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    filter_infos: str = Field(default=\"\", description=\"滤镜信息列表, 用JSON字符串表示\")\n\n\nclass FilterItem(BaseModel):\n    \"\"\"单个滤镜信息\"\"\"\n    filter_title: str = Field(..., description=\"滤镜名称/标题\")\n    start: int = Field(..., description=\"滤镜开始时间（微秒）\")\n    end: int = Field(..., description=\"滤镜结束时间（微秒）\")\n    intensity: float = Field(default=100.0, ge=0, le=100, description=\"滤镜强度(0-100)\")\n\n\nclass AddFiltersResponse(BaseModel):\n    \"\"\"添加滤镜响应参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    track_id: str = Field(default=\"\", description=\"滤镜轨道ID\")\n    filter_ids: List[str] = Field(default=[], description=\"滤镜ID列表\")\n    segment_ids: List[str] = Field(default=[], description=\"滤镜片段ID列表\")\n"
  },
  {
    "path": "src/schemas/add_images.py",
    "content": "import json\nfrom pydantic import BaseModel, Field, field_validator\nfrom typing import List, Dict, Any\n\n\nclass AddImagesRequest(BaseModel):\n    \"\"\"批量添加图片请求参数\"\"\"\n    draft_url: str = Field(..., description=\"草稿URL\")\n    image_infos: str = Field(..., description=\"图片信息列表, 用JSON字符串表示\")\n    alpha: float = Field(default=1.0, description=\"全局透明度[0, 1]\")\n    scale_x: float = Field(default=1.0, description=\"X轴缩放比例\")\n    scale_y: float = Field(default=1.0, description=\"Y轴缩放比例\")\n    transform_x: int = Field(default=0, description=\"X轴位置偏移(像素)\")\n    transform_y: int = Field(default=0, description=\"Y轴位置偏移(像素)\")\n\n    @field_validator(\"image_infos\")\n    @classmethod\n    def validate_image_infos_http_urls(cls, value: str) -> str:\n        \"\"\"在 schema 层校验 image_url 必须为 http/https。\"\"\"\n        try:\n            data = json.loads(value)\n        except json.JSONDecodeError as exc:\n            raise ValueError(f\"image_infos JSON parse error: {exc.msg}\") from exc\n\n        if not isinstance(data, list):\n            raise ValueError(\"image_infos should be a list\")\n\n        for idx, item in enumerate(data):\n            if not isinstance(item, dict):\n                raise ValueError(f\"image_infos[{idx}] should be an object\")\n            image_url = item.get(\"image_url\")\n            if not isinstance(image_url, str) or not image_url.startswith((\"http://\", \"https://\")):\n                raise ValueError(f\"image_infos[{idx}].image_url must start with http:// or https://\")\n        return value\n\n\nclass SegmentInfo(BaseModel):\n    \"\"\"片段信息\"\"\"\n    id: str = Field(..., description=\"片段ID\")\n    start: int = Field(..., description=\"开始时间(微秒)\")\n    end: int = Field(..., description=\"结束时间(微秒)\")\n\n\nclass AddImagesResponse(BaseModel):\n    \"\"\"添加图片响应参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    track_id: str = Field(default=\"\", description=\"视频轨道ID\")\n    image_ids: List[str] = Field(default=[], description=\"图片ID列表\")\n    segment_ids: List[str] = Field(default=[], description=\"片段ID列表\")\n    segment_infos: List[SegmentInfo] = Field(default=[], description=\"片段信息列表\")"
  },
  {
    "path": "src/schemas/add_keyframes.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List\n\n\nclass AddKeyframesRequest(BaseModel):\n    \"\"\"添加关键帧请求参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    keyframes: str = Field(default=\"\", description=\"关键帧信息列表, 用JSON字符串表示\")\n\n\nclass KeyframeItem(BaseModel):\n    \"\"\"单个关键帧信息\"\"\"\n    segment_id: str = Field(..., description=\"目标片段的唯一标识ID\")\n    property: str = Field(..., description=\"动画属性类型 (KFTypePositionX, KFTypePositionY, KFTypeScaleX, KFTypeScaleY, KFTypeRotation, KFTypeAlpha)\")\n    offset: float = Field(..., ge=0.0, le=1.0, description=\"关键帧在片段中的时间偏移 (0-1范围)\")\n    value: float = Field(..., description=\"属性在该时间点的值\")\n\n\nclass AddKeyframesResponse(BaseModel):\n    \"\"\"添加关键帧响应参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    keyframes_added: int = Field(default=0, description=\"添加的关键帧数量\")\n    affected_segments: List[str] = Field(default=[], description=\"受影响的片段ID列表\")"
  },
  {
    "path": "src/schemas/add_masks.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List\n\n\nclass AddMasksRequest(BaseModel):\n    \"\"\"添加遮罩请求参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    segment_ids: List[str] = Field(default=[], description=\"要应用遮罩的片段ID数组\")\n    name: str = Field(default=\"线性\", description=\"遮罩类型名称\")\n    X: int = Field(default=0, description=\"遮罩中心X坐标（像素）\")\n    Y: int = Field(default=0, description=\"遮罩中心Y坐标（像素）\")\n    width: int = Field(default=512, description=\"遮罩宽度（像素）\")\n    height: int = Field(default=512, description=\"遮罩高度（像素）\")\n    feather: int = Field(default=0, description=\"羽化程度（0-100）\")\n    rotation: int = Field(default=0, description=\"旋转角度（度）\")\n    invert: bool = Field(default=False, description=\"是否反转遮罩\")\n    roundCorner: int = Field(default=0, description=\"圆角半径（0-100）\")\n\n\nclass AddMasksResponse(BaseModel):\n    \"\"\"添加遮罩响应参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    masks_added: int = Field(default=0, description=\"成功添加的遮罩数量\")\n    affected_segments: List[str] = Field(default=[], description=\"受影响的片段ID列表\")\n    mask_ids: List[str] = Field(default=[], description=\"遮罩ID列表\")"
  },
  {
    "path": "src/schemas/add_sticker.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List\n\nclass AddStickerRequest(BaseModel):\n    \"\"\"添加贴纸请求参数\"\"\"\n    draft_url: str = Field(..., description=\"草稿URL\")\n    sticker_id: str = Field(..., description=\"贴纸的唯一标识ID\")\n    start: int = Field(..., description=\"贴纸开始时间（微秒）\")\n    end: int = Field(..., description=\"贴纸结束时间（微秒）\")\n    scale: float = Field(default=1.0, description=\"贴纸缩放比例，建议范围[0.1, 5.0]\")\n    transform_x: int = Field(default=0, description=\"X轴位置偏移（像素），以画布中心为原点\")\n    transform_y: int = Field(default=0, description=\"Y轴位置偏移（像素），以画布中心为原点\")\n\nclass AddStickerResponse(BaseModel):\n    \"\"\"添加贴纸响应参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    sticker_id: str = Field(default=\"\", description=\"贴纸的唯一标识ID\")\n    track_id: str = Field(default=\"\", description=\"轨道ID\")\n    segment_id: str = Field(default=\"\", description=\"片段ID\")\n    duration: int = Field(default=0, description=\"贴纸显示时长（微秒）\")"
  },
  {
    "path": "src/schemas/add_text_style.py",
    "content": "from pydantic import BaseModel, Field\n\n\nclass AddTextStyleRequest(BaseModel):\n    \"\"\"创建文本富文本样式请求参数\"\"\"\n    text: str = Field(..., description=\"要处理的文本内容\")\n    keyword: str = Field(..., description=\"关键词，多个用 | 分隔\")\n    font_size: int = Field(default=12, description=\"普通文本的字体大小\")\n    keyword_color: str = Field(default=\"#ff7100\", description=\"关键词文本颜色（十六进制）\")\n    keyword_font_size: int = Field(default=15, description=\"关键词字体大小\")\n\n\nclass AddTextStyleResponse(BaseModel):\n    \"\"\"创建文本富文本样式响应参数\"\"\"\n    text_style: str = Field(default=\"\", description=\"文本样式JSON字符串\")"
  },
  {
    "path": "src/schemas/add_videos.py",
    "content": "import json\nfrom pydantic import BaseModel, Field, field_validator\nfrom typing import List, Optional\n\n\nclass SceneTimelineItem(BaseModel):\n    \"\"\"场景时间线项\"\"\"\n    start: int = Field(..., description=\"场景开始时间（微秒）\")\n    end: int = Field(..., description=\"场景结束时间（微秒）\")\n\n\nclass AddVideosRequest(BaseModel):\n    \"\"\"批量添加视频请求参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    video_infos: str = Field(default=\"\", description=\"视频信息列表, 用JSON字符串表示\")\n    scene_timelines: Optional[List[SceneTimelineItem]] = Field(default=None, description=\"场景时间线列表，用于视频变速\")\n    alpha: float = Field(default=1.0, description=\"全局透明度[0, 1]\")\n    scale_x: float = Field(default=1.0, description=\"X轴缩放比例, 建议范围[0.1, 5.0]\")\n    scale_y: float = Field(default=1.0, description=\"Y轴缩放比例, 建议范围[0.1, 5.0]\")\n    transform_x: int = Field(default=0, description=\"X轴位置偏移(像素)\")\n    transform_y: int = Field(default=0, description=\"Y轴位置偏移(像素)\")\n\n    @field_validator(\"video_infos\")\n    @classmethod\n    def validate_video_infos_http_urls(cls, value: str) -> str:\n        \"\"\"在 schema 层校验 video_url 必须为 http/https。\"\"\"\n        try:\n            data = json.loads(value)\n        except json.JSONDecodeError as exc:\n            raise ValueError(f\"video_infos JSON parse error: {exc.msg}\") from exc\n\n        if not isinstance(data, list):\n            raise ValueError(\"video_infos should be a list\")\n\n        for idx, item in enumerate(data):\n            if not isinstance(item, dict):\n                raise ValueError(f\"video_infos[{idx}] should be an object\")\n            video_url = item.get(\"video_url\")\n            if not isinstance(video_url, str) or not video_url.startswith((\"http://\", \"https://\")):\n                raise ValueError(f\"video_infos[{idx}].video_url must start with http:// or https://\")\n        return value\n\n\nclass SegmentInfo(BaseModel):\n    \"\"\"片段信息\"\"\"\n    id: str = Field(..., description=\"片段ID\")\n    start: int = Field(..., description=\"开始时间(微秒)\")\n    end: int = Field(..., description=\"结束时间(微秒)\")\n\n\nclass AddVideosResponse(BaseModel):\n    \"\"\"添加视频响应参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    track_id: str = Field(default=\"\", description=\"轨道ID\")\n    video_ids: List[str] = Field(default=[], description=\"视频ID列表\")\n    segment_ids: List[str] = Field(default=[], description=\"片段ID列表\")\n    segment_infos: List[SegmentInfo] = Field(default=[], description=\"片段信息列表\")\n"
  },
  {
    "path": "src/schemas/audio_infos.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List, Optional, Any\nfrom .audio_timelines import TimelineItem\n\n\nclass AudioInfosRequest(BaseModel):\n    \"\"\"音频信息请求参数\"\"\"\n    mp3_urls: List[str] = Field(..., description=\"音频文件URL数组\")\n    timelines: List[TimelineItem] = Field(..., description=\"时间线数组\")\n    audio_effect: Optional[str] = Field(None, description=\"音频效果\")\n    volume: Optional[float] = Field(None, description=\"音量\")\n\n\nclass AudioInfosResponse(BaseModel):\n    \"\"\"音频信息响应参数\"\"\"\n    infos: str = Field(..., description=\"JSON字符串格式的音频信息\")"
  },
  {
    "path": "src/schemas/audio_timelines.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List, Optional\n\n\nclass AudioTimelinesRequest(BaseModel):\n    \"\"\"音频时间线请求参数\"\"\"\n    links: List[str] = Field(..., description=\"音频文件URL数组\")\n\n\nclass TimelineItem(BaseModel):\n    \"\"\"时间线项\"\"\"\n    start: int = Field(..., description=\"开始时间（微秒）\")\n    end: int = Field(..., description=\"结束时间（微秒）\")\n\n\nclass AudioTimelinesResponse(BaseModel):\n    \"\"\"音频时间线响应参数\"\"\"\n    timelines: List[TimelineItem] = Field(..., description=\"分割后的时间线列表\")\n    all_timelines: List[TimelineItem] = Field(..., description=\"完整的时间线列表\")"
  },
  {
    "path": "src/schemas/caption_infos.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List, Optional\nfrom .audio_timelines import TimelineItem\n\n\nclass CaptionInfosRequest(BaseModel):\n    \"\"\"字幕信息请求参数\"\"\"\n    texts: List[str] = Field(..., description=\"文本列表\")\n    timelines: List[TimelineItem] = Field(..., description=\"时间线数组\")\n    font_size: Optional[int] = Field(None, description=\"字体大小\")\n    keyword_color: Optional[str] = Field(None, description=\"关键词颜色\")\n    keyword_border_color: Optional[str] = Field(None, description=\"关键词边框颜色\")\n    keyword_font_size: Optional[int] = Field(None, description=\"关键词字体大小\")\n    keywords: Optional[List[str]] = Field(None, description=\"文本里面的重点词列表\")\n    in_animation: Optional[str] = Field(None, description=\"入场动画名称\")\n    in_animation_duration: Optional[int] = Field(None, description=\"入场动画时长\")\n    loop_animation: Optional[str] = Field(None, description=\"组合动画名称\")\n    loop_animation_duration: Optional[int] = Field(\n        None, description=\"循环动画单次循环时长（微秒），与 get_text_animations 中 loop 的 duration 一致\"\n    )\n    out_animation: Optional[str] = Field(None, description=\"出场动画名称\")\n    out_animation_duration: Optional[int] = Field(None, description=\"出场动画时长\")\n    transition: Optional[str] = Field(None, description=\"转场名称\")\n    transition_duration: Optional[int] = Field(None, description=\"转场时长\")\n\n\nclass CaptionInfosResponse(BaseModel):\n    \"\"\"字幕信息响应参数\"\"\"\n    infos: str = Field(..., description=\"JSON字符串格式的字幕信息\")"
  },
  {
    "path": "src/schemas/create_draft.py",
    "content": "from pydantic import BaseModel, Field\n\n\nclass CreateDraftRequest(BaseModel):\n    \"\"\"创建草稿请求参数\"\"\"\n    height: int = Field(default=1080, ge=1, description=\"视频高度\")\n    width: int = Field(default=1920, ge=1, description=\"视频宽度\")\n\n\nclass CreateDraftResponse(BaseModel):\n    \"\"\"创建草稿响应参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    tip_url: str = Field(default=\"\", description=\"草稿提示URL，获取帮助文档\")\n"
  },
  {
    "path": "src/schemas/easy_create_material.py",
    "content": "from pydantic import BaseModel, Field, field_validator\nfrom typing import Optional\n\n\nclass EasyCreateMaterialRequest(BaseModel):\n    \"\"\"快速创建素材轨道请求参数\"\"\"\n    draft_url: str = Field(..., description=\"目标草稿的完整URL\")\n    audio_url: str = Field(..., description=\"音频文件URL，不能为空或null\")\n    text: Optional[str] = Field(default=None, description=\"要添加的文字内容\")\n    img_url: Optional[str] = Field(default=None, description=\"图片文件URL\")\n    video_url: Optional[str] = Field(default=None, description=\"视频文件URL\")\n    text_color: str = Field(default=\"#ffffff\", description=\"文字颜色（十六进制格式）\")\n    font_size: int = Field(default=15, description=\"字体大小\")\n    text_transform_y: int = Field(default=0, description=\"文字Y轴位置偏移\")\n\n    @staticmethod\n    def _is_http_url(url: str) -> bool:\n        return isinstance(url, str) and url.startswith((\"http://\", \"https://\"))\n\n    @field_validator(\"audio_url\")\n    @classmethod\n    def validate_audio_url(cls, value: str) -> str:\n        \"\"\"音频 URL 必须为 http/https。\"\"\"\n        if not cls._is_http_url(value):\n            raise ValueError(\"audio_url must start with http:// or https://\")\n        return value\n\n    @field_validator(\"img_url\", \"video_url\")\n    @classmethod\n    def validate_optional_media_url(cls, value: Optional[str]) -> Optional[str]:\n        \"\"\"可选图片/视频 URL 如有传值，必须为 http/https。\"\"\"\n        if value is None:\n            return value\n        if not cls._is_http_url(value):\n            raise ValueError(\"optional media URL must start with http:// or https://\")\n        return value\n\n\nclass EasyCreateMaterialResponse(BaseModel):\n    \"\"\"快速创建素材轨道响应参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")"
  },
  {
    "path": "src/schemas/effect_infos.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List\nfrom .audio_timelines import TimelineItem\n\n\nclass EffectInfosRequest(BaseModel):\n    \"\"\"特效信息请求参数\"\"\"\n    effects: List[str] = Field(..., description=\"特效名称列表\")\n    timelines: List[TimelineItem] = Field(..., description=\"时间线数组\")\n\n\nclass EffectInfosResponse(BaseModel):\n    \"\"\"特效信息响应参数\"\"\"\n    infos: str = Field(..., description=\"JSON字符串格式的特效信息\")"
  },
  {
    "path": "src/schemas/filter_infos.py",
    "content": "from pydantic import BaseModel, Field, field_validator\nfrom typing import List, Optional\nfrom .audio_timelines import TimelineItem\n\n\nclass FilterInfosRequest(BaseModel):\n    \"\"\"滤镜信息请求参数\"\"\"\n    filters: List[str] = Field(..., description=\"滤镜名称列表\")\n    timelines: List[TimelineItem] = Field(..., description=\"时间线数组\")\n    intensities: Optional[List[float]] = Field(default=None, description=\"滤镜强度列表(0-100)，可选\")\n    \n    @field_validator('intensities', mode='before')\n    @classmethod\n    def validate_intensities(cls, v):\n        \"\"\"验证并限制 intensities 数组中的每个值在 0-100 范围内\"\"\"\n        if v is None:\n            return v\n        return [max(0, min(100, val)) for val in v]\n\n\nclass FilterInfosResponse(BaseModel):\n    \"\"\"滤镜信息响应参数\"\"\"\n    infos: str = Field(..., description=\"JSON字符串格式的滤镜信息\")\n"
  },
  {
    "path": "src/schemas/gen_video.py",
    "content": "import uuid\nfrom pydantic import BaseModel, Field\nfrom pydantic.functional_validators import field_validator\nfrom typing import Optional\n\n\nclass GenVideoRequest(BaseModel):\n    \"\"\"根据草稿导出视频\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n    apiKey: Optional[str] = Field(default=None, description=\"apiKey必须是合法的UUID格式\")\n    \n    @field_validator('apiKey')\n    @classmethod\n    def validate_api_key(cls, v):\n        if v is None or v == \"\":\n            return None\n        try:\n            uuid.UUID(v)\n        except ValueError:\n            raise ValueError('API密钥格式不正确，必须是合法的UUID')\n        return v\n\n\nclass GenVideoResponse(BaseModel):\n    \"\"\"生成视频响应参数\"\"\"\n    message: str = Field(..., description=\"响应消息\")"
  },
  {
    "path": "src/schemas/gen_video_active_count.py",
    "content": "\"\"\"云渲染进行中数量查询\"\"\"\nfrom pydantic import BaseModel, Field\n\n\nclass GenVideoActiveCountResponse(BaseModel):\n    \"\"\"当前排队与渲染中的云渲染草稿数量\"\"\"\n    count: int = Field(..., description=\"排队中(pending)与渲染中(processing)的草稿数量，不含已完成/失败\")\n"
  },
  {
    "path": "src/schemas/gen_video_status.py",
    "content": "\"\"\"\n视频生成状态查询的数据模型定义\n\"\"\"\nfrom typing import Optional\nfrom pydantic import BaseModel, Field\n\n\nclass GenVideoStatusRequest(BaseModel):\n    \"\"\"查询视频生成状态的请求模型\"\"\"\n    draft_url: str = Field(..., description=\"草稿URL\")\n\n\nclass GenVideoStatusResponse(BaseModel):\n    \"\"\"查询视频生成状态的响应模型\"\"\"\n    draft_url: str = Field(..., description=\"草稿URL\")\n    status: str = Field(..., description=\"任务状态：pending=等待中，processing=处理中，completed=已完成，failed=失败\")\n    progress: int = Field(..., description=\"任务进度（0-100）\")\n    video_url: str = Field(default=\"\", description=\"生成的视频URL（仅在completed状态时有值）\")\n    error_message: str = Field(default=\"\", description=\"错误信息（仅在failed状态时有值）\")\n    created_at: Optional[str] = Field(default=None, description=\"任务创建时间\")\n    started_at: Optional[str] = Field(default=None, description=\"任务开始时间\")\n    completed_at: Optional[str] = Field(default=None, description=\"任务完成时间\")"
  },
  {
    "path": "src/schemas/get_audio_duration.py",
    "content": "from pydantic import BaseModel, Field, HttpUrl\n\n\nclass GetAudioDurationRequest(BaseModel):\n    \"\"\"获取音频时长请求参数\"\"\"\n    mp3_url: HttpUrl = Field(\n        ..., \n        description=\"音频文件URL，支持mp3、wav、m4a等常见音频格式\"\n    )\n    \n    class Config:\n        json_schema_extra = {\n            \"example\": {\n                \"mp3_url\": \"https://www.soundjay.com/misc/sounds/bell-ringing-05.wav\"\n            }\n        }\n\n\nclass GetAudioDurationResponse(BaseModel):\n    \"\"\"获取音频时长响应参数\"\"\"\n    duration: int = Field(\n        ..., \n        description=\"音频时长，单位：微秒\",\n        ge=0\n    )\n    \n    class Config:\n        json_schema_extra = {\n            \"example\": {\n                \"duration\": 2325333\n            }\n        }"
  },
  {
    "path": "src/schemas/get_draft.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List\n\n\nclass GetDraftRequest(BaseModel):\n    \"\"\"获取草稿请求参数\"\"\"\n    draft_id: str = Field(..., min_length=20, max_length=32, description=\"草稿ID\")\n\n\nclass GetDraftResponse(BaseModel):\n    \"\"\"获取草稿响应参数\"\"\"\n    files: List[str] = Field(default=[], description=\"文件列表\")\n"
  },
  {
    "path": "src/schemas/get_effects.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List, Optional\n\n\nclass GetEffectsRequest(BaseModel):\n    \"\"\"获取特效列表请求参数\"\"\"\n    mode: Optional[int] = Field(default=0, ge=0, le=2, description=\"特效模式，0=所有，1=VIP，2=免费，默认值为 0\")\n\n\nclass EffectItem(BaseModel):\n    \"\"\"特效信息项\"\"\"\n    name: str = Field(..., description=\"特效名称\")\n    is_vip: bool = Field(..., description=\"是否为 VIP 特效\")\n    resource_id: str = Field(..., description=\"资源 ID\")\n    effect_id: str = Field(..., description=\"效果 ID\")\n    icon_url: str = Field(..., description=\"图标 URL\")\n    has_params: bool = Field(..., description=\"是否有额外参数\")\n\n\nclass GetEffectsResponse(BaseModel):\n    \"\"\"获取特效列表响应参数\"\"\"\n    effects: List[EffectItem] = Field(..., description=\"特效对象数组\")\n"
  },
  {
    "path": "src/schemas/get_filters.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List, Optional\n\n\nclass GetFiltersRequest(BaseModel):\n    \"\"\"获取滤镜列表请求参数\"\"\"\n    mode: Optional[int] = Field(default=0, ge=0, le=2, description=\"滤镜模式，0=所有，1=VIP，2=免费，默认值为 0\")\n\n\nclass FilterItem(BaseModel):\n    \"\"\"滤镜信息项\"\"\"\n    name: str = Field(..., description=\"滤镜名称\")\n    is_vip: bool = Field(..., description=\"是否为 VIP 滤镜\")\n    resource_id: str = Field(..., description=\"资源 ID\")\n    effect_id: str = Field(..., description=\"效果 ID\")\n    has_params: bool = Field(..., description=\"是否有额外参数\")\n\n\nclass GetFiltersResponse(BaseModel):\n    \"\"\"获取滤镜列表响应参数\"\"\"\n    filters: List[FilterItem] = Field(..., description=\"滤镜对象数组\")\n"
  },
  {
    "path": "src/schemas/get_image_animations.py",
    "content": "\"\"\"\n获取图片出入场动画的数据模型定义\n\"\"\"\nfrom typing import Literal, List, Dict, Any\nfrom pydantic import BaseModel, Field\n\n\nclass GetImageAnimationsRequest(BaseModel):\n    \"\"\"获取图片出入场动画的请求模型\"\"\"\n    mode: int = Field(default=0, description=\"动画模式：0=所有，1=VIP，2=免费\")\n    type: Literal[\"in\", \"out\", \"loop\"] = Field(..., description=\"动画类型：in=入场，out=出场，loop=循环\")\n\n\nclass ImageAnimationItem(BaseModel):\n    \"\"\"单个图片动画项的数据模型\"\"\"\n    resource_id: str = Field(..., description=\"动画资源ID\")\n    type: str = Field(..., description=\"动画类型\")\n    category_id: str = Field(..., description=\"动画分类ID\")\n    category_name: str = Field(..., description=\"动画分类名称\")\n    duration: int = Field(..., description=\"动画时长（微秒）\")\n    id: str = Field(..., description=\"动画唯一标识ID\")\n    name: str = Field(..., description=\"动画名称\")\n    request_id: str = Field(default=\"\", description=\"请求ID\")\n    start: int = Field(default=0, description=\"动画开始时间\")\n    icon_url: str = Field(..., description=\"动画图标URL\")\n    material_type: str = Field(default=\"sticker\", description=\"素材类型\")\n    panel: str = Field(default=\"\", description=\"面板信息\")\n    path: str = Field(default=\"\", description=\"路径信息\")\n    platform: str = Field(default=\"all\", description=\"支持平台\")\n\n\nclass GetImageAnimationsResponse(BaseModel):\n    \"\"\"获取图片出入场动画的响应模型\"\"\"\n    effects: List[ImageAnimationItem] = Field(..., description=\"图片出入场动画对象数组\")\n"
  },
  {
    "path": "src/schemas/get_text_animations.py",
    "content": "\"\"\"\n获取文字出入场动画的数据模型定义\n\"\"\"\nfrom typing import Literal, List, Dict, Any\nfrom pydantic import BaseModel, Field\n\n\nclass GetTextAnimationsRequest(BaseModel):\n    \"\"\"获取文字出入场动画的请求模型\"\"\"\n    mode: int = Field(default=0, description=\"动画模式：0=所有，1=VIP，2=免费\")\n    type: Literal[\"in\", \"out\", \"loop\"] = Field(..., description=\"动画类型：in=入场，out=出场，loop=循环\")\n\n\nclass TextAnimationItem(BaseModel):\n    \"\"\"单个文字动画项的数据模型\"\"\"\n    resource_id: str = Field(..., description=\"动画资源ID\")\n    type: str = Field(..., description=\"动画类型\")\n    category_id: str = Field(..., description=\"动画分类ID\")\n    category_name: str = Field(..., description=\"动画分类名称\")\n    duration: int = Field(..., description=\"动画时长（微秒）\")\n    id: str = Field(..., description=\"动画唯一标识ID\")\n    name: str = Field(..., description=\"动画名称\")\n    request_id: str = Field(default=\"\", description=\"请求ID\")\n    start: int = Field(default=0, description=\"动画开始时间\")\n    icon_url: str = Field(..., description=\"动画图标URL\")\n    material_type: str = Field(default=\"sticker\", description=\"素材类型\")\n    panel: str = Field(default=\"\", description=\"面板信息\")\n    path: str = Field(default=\"\", description=\"路径信息\")\n    platform: str = Field(default=\"all\", description=\"支持平台\")\n\n\nclass GetTextAnimationsResponse(BaseModel):\n    \"\"\"获取文字出入场动画的响应模型\"\"\"\n    effects: List[TextAnimationItem] = Field(..., description=\"文字出入场动画对象数组\")\n"
  },
  {
    "path": "src/schemas/get_text_effects.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List, Optional\n\n\nclass GetTextEffectsRequest(BaseModel):\n    \"\"\"获取花字效果列表请求参数\"\"\"\n    mode: Optional[int] = Field(default=0, ge=0, le=2, description=\"花字效果模式，0=所有，1=VIP，2=免费，默认值为 0\")\n\n\nclass TextEffectItem(BaseModel):\n    \"\"\"花字效果信息项\"\"\"\n    id: str = Field(..., description=\"花字效果 ID\")\n    title: str = Field(..., description=\"花字效果名称\")\n    is_vip: bool = Field(..., description=\"是否为 VIP 效果\")\n\n\nclass GetTextEffectsResponse(BaseModel):\n    \"\"\"获取花字效果列表响应参数\"\"\"\n    text_effects: List[TextEffectItem] = Field(..., description=\"花字效果对象数组\")\n"
  },
  {
    "path": "src/schemas/get_url.py",
    "content": "from pydantic import BaseModel, Field\n\n\nclass GetUrlRequest(BaseModel):\n    \"\"\"提取链接请求参数\"\"\"\n    output: str = Field(..., description='提取内容')\n\n\nclass GetUrlResponse(BaseModel):\n    \"\"\"提取链接响应参数\"\"\"\n    output: str = Field(..., description='提取内容')"
  },
  {
    "path": "src/schemas/imgs_infos.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List, Optional\nfrom .audio_timelines import TimelineItem\n\n\nclass ImgsInfosRequest(BaseModel):\n    \"\"\"图片信息请求参数\"\"\"\n    imgs: List[str] = Field(..., description=\"图片URL列表\")\n    timelines: List[TimelineItem] = Field(..., description=\"时间线数组\")\n    height: Optional[int] = Field(None, description=\"视频高度\")\n    width: Optional[int] = Field(None, description=\"视频宽度\")\n    in_animation: Optional[str] = Field(None, description=\"入场动画名称，支持多个动画用|分隔\")\n    in_animation_duration: Optional[int] = Field(None, description=\"入场动画时长\")\n    loop_animation: Optional[str] = Field(None, description=\"组合动画名称，支持多个动画用|分隔\")\n    loop_animation_duration: Optional[int] = Field(None, description=\"组合动画时长\")\n    out_animation: Optional[str] = Field(None, description=\"出场动画名称，支持多个动画用|分隔\")\n    out_animation_duration: Optional[int] = Field(None, description=\"出场动画时长\")\n    transition: Optional[str] = Field(None, description=\"转场名称\")\n    transition_duration: Optional[int] = Field(None, description=\"转场时长\")\n\n\nclass ImgsInfosResponse(BaseModel):\n    \"\"\"图片信息响应参数\"\"\"\n    infos: str = Field(..., description=\"JSON字符串格式的图片信息\")"
  },
  {
    "path": "src/schemas/keyframes_infos.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List, Optional\n\n\nclass SegmentInfoItem(BaseModel):\n    \"\"\"轨道数据项\"\"\"\n    id: str = Field(..., description=\"片段ID\")\n    start: int = Field(..., description=\"开始时间（微秒）\")\n    end: int = Field(..., description=\"结束时间（微秒）\")\n\n\nclass KeyframesInfosRequest(BaseModel):\n    \"\"\"关键帧信息请求参数\"\"\"\n    ctype: str = Field(..., description=\"关键帧类型：KFTypePositionX: X轴移动，需要提供width参数，值会被除以width进行归一化 KFTypePositionY: Y轴移动，需要提供height参数，值会被除以height进行归一化 KFTypeRotation: 旋转角度，值范围必须在0-360度之间 UNIFORM_SCALE: 均匀缩放，值范围必须在0.01-5之间 KFTypeAlpha: 透明度，值范围必须在0-1之间\")\n    offsets: str = Field(..., description=\"需要放置关键帧的位置比例，eg：0|100 这个就是代表在开始和结尾放置，0|50|100代表在开头，中间，结尾放置3个关键帧\")\n    values: str = Field(..., description=\"对应offsets的值，长度要一致，比如1|2，或者1|2|1\")\n    segment_infos: List[SegmentInfoItem] = Field(..., description=\"轨道数据，对象数组\")\n    height: Optional[int] = Field(None, description=\"视频高，可选参数\")\n    width: Optional[int] = Field(None, description=\"视频宽，可选参数\")\n\n\nclass KeyframesInfosResponse(BaseModel):\n    \"\"\"关键帧信息响应参数\"\"\"\n    keyframes_infos: str = Field(..., description=\"JSON字符串格式的关键帧信息\")"
  },
  {
    "path": "src/schemas/objs_to_str_list.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List, Optional\n\n\nclass ObjItem(BaseModel):\n    \"\"\"对象项\"\"\"\n    output: str = Field(..., description=\"URL地址\")\n\n\nclass ObjsToStrListRequest(BaseModel):\n    \"\"\"对象列表转化成字符串列表请求参数\"\"\"\n    outputs: List[ObjItem] = Field(..., description=\"数据对象\")\n\n\nclass ObjsToStrListResponse(BaseModel):\n    \"\"\"对象列表转化成字符串列表响应参数\"\"\"\n    infos: List[str] = Field(..., description=\"字符串列表\")"
  },
  {
    "path": "src/schemas/save_draft.py",
    "content": "from pydantic import BaseModel, Field\n\n\nclass SaveDraftRequest(BaseModel):\n    \"\"\"创建草稿请求参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n\n\nclass SaveDraftResponse(BaseModel):\n    \"\"\"创建草稿响应参数\"\"\"\n    draft_url: str = Field(default=\"\", description=\"草稿URL\")\n"
  },
  {
    "path": "src/schemas/search_sticker.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List, Optional\n\n\nclass StickerPackage(BaseModel):\n    \"\"\"贴纸包信息\"\"\"\n    height_per_frame: int = Field(..., description=\"每帧高度\")\n    size: int = Field(..., description=\"贴纸包大小\")\n    width_per_frame: int = Field(..., description=\"每帧宽度\")\n\n\nclass LargeImage(BaseModel):\n    \"\"\"大图信息\"\"\"\n    image_url: str = Field(..., description=\"图片URL\")\n\n\nclass StickerInfo(BaseModel):\n    \"\"\"贴纸信息\"\"\"\n    large_image: LargeImage = Field(..., description=\"大图信息\")\n    preview_cover: str = Field(..., description=\"预览封面\")\n    sticker_package: StickerPackage = Field(..., description=\"贴纸包信息\")\n    sticker_type: int = Field(..., description=\"贴纸类型\")\n    track_thumbnail: str = Field(..., description=\"轨道缩略图\")\n\n\nclass StickerItem(BaseModel):\n    \"\"\"贴纸项\"\"\"\n    sticker: StickerInfo = Field(..., description=\"贴纸信息\")\n    sticker_id: str = Field(..., description=\"贴纸ID\")\n    title: str = Field(..., description=\"贴纸标题\")\n\n\nclass SearchStickerRequest(BaseModel):\n    \"\"\"搜索贴纸请求参数\"\"\"\n    keyword: str = Field(..., description=\"关键词，必选参数\")\n\n\nclass SearchStickerResponse(BaseModel):\n    \"\"\"搜索贴纸响应参数\"\"\"\n    data: List[StickerItem] = Field(..., description=\"贴纸数据列表\")"
  },
  {
    "path": "src/schemas/str_list_to_objs.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List, Optional\n\n\nclass StrListToObjsItem(BaseModel):\n    \"\"\"字符串列表转对象列表项\"\"\"\n    output: str = Field(..., description=\"URL地址\")\n\n\nclass StrListToObjsRequest(BaseModel):\n    \"\"\"字符串列表转对象列表请求参数\"\"\"\n    infos: List[str] = Field(..., description=\"字符串列表\")\n\n\nclass StrListToObjsResponse(BaseModel):\n    \"\"\"字符串列表转对象列表响应参数\"\"\"\n    infos: List[StrListToObjsItem] = Field(..., description=\"对象列表\")"
  },
  {
    "path": "src/schemas/str_to_list.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List\n\n\nclass StrToListRequest(BaseModel):\n    \"\"\"字符转列表请求参数\"\"\"\n    obj: str = Field(..., description=\"对象内容\")\n\n\nclass StrToListResponse(BaseModel):\n    \"\"\"字符转列表响应参数\"\"\"\n    infos: List[str] = Field(..., description=\"字符串列表\")"
  },
  {
    "path": "src/schemas/timelines.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List\n\n\nclass TimelineItem(BaseModel):\n    \"\"\"时间线项\"\"\"\n    start: int = Field(..., description=\"开始时间\")\n    end: int = Field(..., description=\"结束时间\")\n\n\nclass TimelinesRequest(BaseModel):\n    \"\"\"时间线请求参数\"\"\"\n    duration: int = Field(..., description=\"总时长\")\n    num: int = Field(..., description=\"时间线的个数，值为2即表示将总时长分为2个小段\")\n    start: int = Field(..., description=\"开始时间\")\n    type: int = Field(..., description=\"0: 平均分，1：随机\")\n\n\nclass TimelinesResponse(BaseModel):\n    \"\"\"时间线响应参数\"\"\"\n    timelines: List[TimelineItem] = Field(..., description=\"分割后的时间线列表\")\n    all_timelines: List[TimelineItem] = Field(..., description=\"完整的时间线列表\")"
  },
  {
    "path": "src/schemas/video_infos.py",
    "content": "from pydantic import BaseModel, Field\nfrom typing import List, Optional\nfrom .audio_timelines import TimelineItem\n\n\nclass VideoInfosRequest(BaseModel):\n    \"\"\"视频信息请求参数\"\"\"\n    video_urls: List[str] = Field(..., description=\"视频列表\")\n    timelines: List[TimelineItem] = Field(..., description=\"时间线数组\")\n    height: Optional[int] = Field(None, description=\"视频高\")\n    width: Optional[int] = Field(None, description=\"视频宽\")\n    mask: Optional[str] = Field(None, description=\"视频蒙版，可填写值：圆形，矩形，爱心，星形\")\n    transition: Optional[str] = Field(None, description=\"转场名称\")\n    transition_duration: Optional[int] = Field(None, description=\"转场时长，整数\")\n    volume: Optional[float] = Field(1.0, description=\"float类型，音量大小，0-10,默认1\")\n\n\nclass VideoInfosResponse(BaseModel):\n    \"\"\"视频信息响应参数\"\"\"\n    infos: str = Field(..., description=\"JSON字符串格式的视频信息\")"
  },
  {
    "path": "src/service/__init__.py",
    "content": "from .create_draft import create_draft\nfrom .add_videos import add_videos, add_videos_async, _add_videos_internal\nfrom .add_audios import add_audios, add_audios_async\nfrom .add_images import add_images, add_images_async\nfrom .add_sticker import add_sticker, add_sticker_async\nfrom .add_keyframes import add_keyframes, add_keyframes_async\nfrom .add_captions import add_captions, add_captions_async\nfrom .add_effects import add_effects, add_effects_async\nfrom .add_filters import add_filters, add_filters_async\nfrom .add_masks import add_masks, add_masks_async\nfrom .add_text_style import add_text_style\nfrom .get_text_animations import get_text_animations\nfrom .get_image_animations import get_image_animations\nfrom .get_filters import get_filters\nfrom .get_effects import get_effects\nfrom .easy_create_material import easy_create_material, easy_create_material_async\nfrom .save_draft import save_draft, save_draft_async\nfrom .gen_video import gen_video, gen_video_status, get_gen_video_active_count\nfrom .get_draft import get_draft\nfrom .get_audio_duration import get_audio_duration\nfrom .timelines import timelines\nfrom .audio_timelines import audio_timelines\nfrom .audio_infos import audio_infos\nfrom .imgs_infos import imgs_infos\nfrom .caption_infos import caption_infos\nfrom .effect_infos import effect_infos\nfrom .filter_infos import filter_infos\nfrom .keyframes_infos import keyframes_infos\nfrom .video_infos import video_infos\nfrom .search_sticker import search_sticker\nfrom .get_url import get_url\nfrom .str_list_to_objs import str_list_to_objs\nfrom .str_to_list import str_to_list\nfrom .objs_to_str_list import objs_to_str_list\n\n__all__ = [\"create_draft\", \"add_videos\", \"add_audios\", \"add_images\", \"add_sticker\", \"add_keyframes\", \"add_captions\", \"add_effects\", \"add_filters\", \"add_masks\", \"add_text_style\", \"get_text_animations\", \"get_image_animations\", \"get_filters\", \"get_effects\", \"easy_create_material\", \"save_draft\", \"gen_video\", \"gen_video_status\", \"get_gen_video_active_count\", \"get_draft\", \"get_audio_duration\", \"timelines\", \"audio_timelines\", \"audio_infos\", \"imgs_infos\", \"caption_infos\", \"effect_infos\", \"filter_infos\", \"keyframes_infos\", \"video_infos\", \"search_sticker\", \"get_url\", \"str_list_to_objs\", \"str_to_list\", \"objs_to_str_list\", \"add_videos_async\", \"add_audios_async\", \"add_images_async\", \"add_sticker_async\", \"add_keyframes_async\", \"add_captions_async\", \"add_effects_async\", \"add_filters_async\", \"add_masks_async\", \"easy_create_material_async\", \"save_draft_async\"]\n"
  },
  {
    "path": "src/service/add_audios.py",
    "content": "from src.utils.logger import logger\nfrom src.pyJianYingDraft import ScriptFile, trange, AudioSceneEffectType, VideoSceneEffectType, VideoCharacterEffectType\nimport src.pyJianYingDraft as draft\nfrom src.pyJianYingDraft.local_materials import AudioMaterial\nfrom src.utils.draft_cache import DRAFT_CACHE\nfrom exceptions import CustomException, CustomError\nimport os\nfrom src.utils import helper\nfrom src.utils.download import download\nimport config\nimport json\nimport asyncio\nimport time\nfrom typing import List, Dict, Any, Tuple, Optional\nfrom src.utils.draft_lock_manager import DraftLockManager\n\n\ndef add_audios(\n    draft_url: str, \n    audio_infos: str\n) -> Tuple[str, str, List[str]]:\n    \"\"\"\n    添加音频到剪映草稿的业务逻辑\n    \n    Args:\n        draft_url: 草稿URL，必选参数\n        audio_infos: 音频信息JSON字符串\n\n    Returns:\n        draft_url: 草稿URL\n        track_id: 音频轨道ID（非主轨道）\n        audio_ids: 音频ID列表\n\n    Raises:\n        CustomException: 音频批量添加失败\n    \"\"\"\n    return _add_audios_internal(draft_url, audio_infos, prepared_audios=None)\n\n\ndef _prepare_audios_local_files(draft_url: str, audio_infos: str) -> List[Dict[str, Any]]:\n    \"\"\"\n    校验草稿、解析 audio_infos 并下载素材到草稿目录。\n    不修改 ScriptFile，可在草稿写锁外调用。\n    \"\"\"\n    draft_id = validate_and_get_draft_id(draft_url)\n    draft_audio_dir = create_audio_directory(draft_id)\n    audios = parse_audio_data(json_str=audio_infos)\n    validate_audio_data(audios, draft_id)\n    for audio in audios:\n        audio[\"local_audio_path\"] = download_audio_file(audio, draft_audio_dir)\n    return audios\n\n\ndef _add_audios_internal(\n    draft_url: str,\n    audio_infos: str,\n    prepared_audios: Optional[List[Dict[str, Any]]] = None,\n) -> Tuple[str, str, List[str]]:\n    logger.info(f\"add_audios, draft_url: {draft_url}, audio_infos: {audio_infos}\")\n\n    draft_id = validate_and_get_draft_id(draft_url)\n    script: ScriptFile = DRAFT_CACHE[draft_id]\n\n    draft_audio_dir = create_audio_directory(draft_id)\n\n    if prepared_audios is not None:\n        audios = prepared_audios\n    else:\n        audios = parse_audio_data(json_str=audio_infos)\n        validate_audio_data(audios, draft_id)\n\n    track_name = add_audio_track(script)\n\n    audio_ids = add_audio_segments(script, track_name, draft_audio_dir, audios)\n\n    script.save()\n    logger.info(f\"Draft saved successfully\")\n\n    track_id = get_track_id(script, track_name)\n    logger.info(f\"Audio track created, draft_id: {draft_id}, track_id: {track_id}\")\n\n    return draft_url, track_id, audio_ids\n\n\nasync def add_audios_async(\n    draft_url: str,\n    audio_infos: str,\n    lock_timeout: float = 30.0\n) -> Tuple[str, str, List[str]]:\n    \"\"\"\n    添加音频到剪映草稿的异步版本（带并发锁保护）\n    \n    功能：\n    1. 使用 DraftLockManager 防止同一草稿的并发写操作\n    2. 支持超时控制，避免无限等待\n    3. 自动释放锁，即使发生异常\n    4. 音频下载在获取锁之前完成，持锁阶段仅修改草稿与写盘\n    \n    Args:\n        draft_url: 草稿 URL，格式：\".../get_draft?draft_id=xxx\"\n        audio_infos: JSON 字符串，包含音频信息列表，详见 add_audios 函数\n        lock_timeout: 获取锁的超时时间（秒），默认 30 秒\n    \n    Returns:\n        tuple: (draft_url, track_id, audio_ids)\n    \n    Raises:\n        CustomException: 音频添加失败，或 `DRAFT_LOCK_TIMEOUT`（获取写锁超时）\n    \n    Example:\n        >>> result = await add_audios_async(\n        ...     draft_url=\"http://.../draft_id=123\",\n        ...     audio_infos='[{\"audio_url\":\"...\", \"start\":0, \"end\":5000000}]'\n        ... )\n    \"\"\"\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if not draft_id:\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    logger.info(f\"[flow:add_audios] prep_start, draft_id: {draft_id}\")\n    # 下载与预处理放到线程池，避免阻塞事件循环导致锁超时漂移\n    prep_started_at = time.monotonic()\n    prepared_audios = await asyncio.to_thread(\n        _prepare_audios_local_files,\n        draft_url,\n        audio_infos,\n    )\n    logger.info(\n        f\"[flow:add_audios] prep_done, draft_id: {draft_id}, \"\n        f\"count: {len(prepared_audios)}, elapsed: {time.monotonic() - prep_started_at:.3f}s\"\n    )\n\n    lock_manager = DraftLockManager()\n\n    logger.info(f\"[flow:add_audios] lock_wait_start, draft_id: {draft_id}, timeout: {lock_timeout}s\")\n    try:\n        await lock_manager.acquire_lock(draft_id, timeout=lock_timeout)\n        logger.info(f\"[flow:add_audios] lock_acquired, draft_id: {draft_id}\")\n    except asyncio.TimeoutError:\n        logger.error(f\"Timeout waiting for lock on draft_id: {draft_id}\")\n        raise CustomException(\n            CustomError.DRAFT_LOCK_TIMEOUT,\n            f\"Failed to acquire lock for draft {draft_id} within {lock_timeout}s\",\n        )\n\n    try:\n        return _add_audios_internal(\n            draft_url=draft_url,\n            audio_infos=audio_infos,\n            prepared_audios=prepared_audios,\n        )\n    finally:\n        await lock_manager.release_lock(draft_id)\n        logger.info(f\"[flow:add_audios] lock_released, draft_id: {draft_id}\")\n\n\ndef validate_and_get_draft_id(draft_url: str) -> str:\n    \"\"\"验证草稿URL并提取草稿ID\"\"\"\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if (not draft_id) or (draft_id not in DRAFT_CACHE):\n        logger.error(f\"Invalid draft URL or draft not found in cache, draft_id: {draft_id}\")\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n    return draft_id\n\n\ndef create_audio_directory(draft_id: str) -> str:\n    \"\"\"创建音频资源存储目录\"\"\"\n    draft_dir = os.path.join(config.DRAFT_DIR, draft_id)\n    draft_audio_dir = os.path.join(draft_dir, \"assets\", \"audios\")\n    os.makedirs(name=draft_audio_dir, exist_ok=True)\n    logger.info(f\"Created audio directory: {draft_audio_dir}\")\n    return draft_audio_dir\n\n\ndef validate_audio_data(audios: List[Dict[str, Any]], draft_id: str):\n    \"\"\"验证音频数据是否为空\"\"\"\n    if len(audios) == 0:\n        logger.error(f\"No audio info provided, draft_id: {draft_id}\")\n        raise CustomException(CustomError.INVALID_AUDIO_INFO)\n    logger.info(f\"Parsed {len(audios)} audio items\")\n\n\ndef add_audio_track(script: ScriptFile) -> str:\n    \"\"\"添加音频轨道到草稿\"\"\"\n    track_name = f\"audio_track_{helper.gen_unique_id()}\"\n    # 设置 relative_index=10 确保音频轨道在主音频轨道之上，避免与主轨道冲突\n    script.add_track(track_type=draft.TrackType.audio, track_name=track_name, relative_index=10)\n    logger.info(f\"Added audio track (non-main track): {track_name}\")\n    return track_name\n\n\ndef add_audio_segments(script: ScriptFile, track_name: str, draft_audio_dir: str, audios: List[Dict[str, Any]]) -> List[str]:\n    \"\"\"批量添加音频片段到指定轨道\"\"\"\n    audio_ids = []\n    for i, audio in enumerate(audios):\n        try:\n            audio_id = add_audio_to_draft(script, track_name, draft_audio_dir=draft_audio_dir, audio=audio)\n            audio_ids.append(audio_id)\n            logger.info(f\"Added audio {i+1}/{len(audios)}, audio_id: {audio_id}\")\n        except Exception as e:\n            logger.error(f\"Failed to add audio {i+1}/{len(audios)}, error: {str(e)}\")\n            raise\n    return audio_ids\n\n\ndef get_track_id(script: ScriptFile, track_name: str) -> str:\n    \"\"\"根据轨道名称获取轨道ID\"\"\"\n    track_id = \"\"\n    for key in script.tracks.keys():\n        if script.tracks[key].name == track_name:\n            track_id = script.tracks[key].track_id\n            break\n    return track_id\n\n\ndef find_audio_effect_type(audio_effect: str):\n    \"\"\"\n    根据音频效果名称查找对应的效果类型\n    \n    Args:\n        audio_effect: 音频效果名称\n    \n    Returns:\n        effect_type: 对应的效果类型对象，如果未找到则返回None\n    \"\"\"\n    effect_type = None\n    \n    # 查找对应的音频效果类型\n    for effect_name, effect_meta in AudioSceneEffectType.__members__.items():\n        if effect_meta.value.name == audio_effect:\n            effect_type = effect_meta\n            break\n    \n    # 如果没找到，则尝试在VideoSceneEffectType中查找\n    if effect_type is None:\n        for effect_name, effect_meta in VideoSceneEffectType.__members__.items():\n            if effect_meta.value.name == audio_effect:\n                effect_type = effect_meta\n                break\n    \n    # 如果没找到，则尝试在VideoCharacterEffectType中查找\n    if effect_type is None:\n        for effect_name, effect_meta in VideoCharacterEffectType.__members__.items():\n            if effect_meta.value.name == audio_effect:\n                effect_type = effect_meta\n                break\n    \n    return effect_type\n\n\ndef convert_params_to_range(effect_type) -> list:\n    \"\"\"\n    将效果参数转换为0-100范围内的值列表\n    \n    Args:\n        effect_type: 效果类型对象\n    \n    Returns:\n        params_list: 转换后的参数值列表\n    \"\"\"\n    params_list = []\n    for param in effect_type.value.params:\n        # 将实际默认值转换为0-100范围内的值\n        if param.min_value != param.max_value:\n            # 计算参数值在0-100范围内的对应值\n            param_value = ((param.default_value - param.min_value) / (param.max_value - param.min_value)) * 100\n        else:\n            # 如果参数范围是固定值，则使用50作为默认值\n            param_value = 50\n        params_list.append(param_value)\n    \n    return params_list\n\n\ndef add_audio_effect(audio_segment, audio_effect: str):\n    \"\"\"\n    为音频片段添加音频效果\n    \n    Args:\n        audio_segment: 音频片段对象\n        audio_effect: 音频效果名称\n    \"\"\"\n    effect_type = find_audio_effect_type(audio_effect)\n    \n    # 如果找到了对应的效果类型，则添加效果\n    if effect_type:\n        params_list = convert_params_to_range(effect_type)\n        \n        # 添加效果\n        audio_segment.add_effect(\n            effect_type=effect_type,\n            params=params_list\n        )\n        logger.info(f\"Added audio effect: {audio_effect} with params: {params_list}\")\n    else:\n        logger.warning(f\"Unknown audio effect: {audio_effect}\")\n\n\ndef add_audio_to_draft(\n    script: ScriptFile,\n    track_name: str,\n    draft_audio_dir: str,\n    audio: dict\n) -> str:\n    \"\"\"\n    向剪映草稿中添加单个音频\n    \n    Args:\n        script: 草稿文件对象\n        track_name: 音频轨道名称\n        draft_audio_dir: 音频资源目录\n        audio: 音频信息字典，包含以下字段：\n            audio_url: 音频URL\n            duration: 音频总时长(微秒)，可选字段\n            start: 开始时间(微秒)\n            end: 结束时间(微秒)\n            volume: 音量[0.0, 2.0]\n            audio_effect: 音频效果名称(可选)\n    \n    Returns:\n        material_id: 音频素材ID\n    \n    Raises:\n        CustomException: 添加音频失败\n    \"\"\"\n    try:\n        audio_path = audio.get(\"local_audio_path\")\n        if audio_path:\n            if not os.path.isfile(audio_path):\n                raise CustomException(\n                    CustomError.AUDIO_ADD_FAILED,\n                    f\"Missing local file: {audio_path}\",\n                )\n            logger.info(f\"Using local audio: {audio_path}\")\n        else:\n            audio_path = download_audio_file(audio, draft_audio_dir)\n        actual_duration = get_audio_actual_duration(audio_path)\n        \n        # 2. 处理音频时长参数\n        process_audio_duration(audio, actual_duration)\n        \n        # 3. 计算并调整音频片段时间范围\n        start_time, end_time, segment_duration = calculate_adjusted_time_range(audio, actual_duration)\n        \n        # 4. 更新音频对象中的时间参数\n        update_audio_time_params(audio, start_time, end_time)\n        \n        # 5. 创建音频片段\n        audio_segment = create_audio_segment(audio_path, start_time, segment_duration, audio)\n        \n        # 6. 添加音频效果（如果指定了）\n        if audio.get('audio_effect'):\n            add_audio_effect(audio_segment, audio['audio_effect'])\n        \n        logger.info(f\"Created audio segment, material_id: {audio_segment.material_instance.material_id}\")\n        logger.info(f\"Audio segment details - start: {start_time}, duration: {segment_duration}, volume: {audio['volume']}\")\n        \n        # 7. 添加片段到轨道（带重叠处理）\n        add_segment_with_overlap_handling(script, track_name, audio_segment, audio_path, start_time, segment_duration, audio)\n        \n        return audio_segment.material_instance.material_id\n        \n    except CustomException:\n        logger.error(f\"Add audio to draft failed, draft_audio_dir: {draft_audio_dir}, audio: {audio}\")\n        raise\n    except Exception as e:\n        logger.error(f\"Add audio to draft failed, error: {str(e)}\")\n        raise CustomException(err=CustomError.AUDIO_ADD_FAILED)\n\n\ndef download_audio_file(audio: dict, draft_audio_dir: str) -> str:\n    \"\"\"下载音频文件\"\"\"\n    audio_path = download(url=audio['audio_url'], save_dir=draft_audio_dir)\n    logger.info(f\"Downloaded audio from {audio['audio_url']} to {audio_path}\")\n    return audio_path\n\n\ndef get_audio_actual_duration(audio_path: str) -> int:\n    \"\"\"获取音频的实际时长\"\"\"\n    temp_material = AudioMaterial(audio_path)\n    actual_duration = temp_material.duration\n    logger.info(f\"Actual audio duration: {actual_duration} microseconds\")\n    return actual_duration\n\n\ndef process_audio_duration(audio: dict, actual_duration: int):\n    \"\"\"处理音频时长参数，如果没有提供duration，则使用实际检测到的时长\"\"\"\n    if audio.get('duration') is None:\n        audio['duration'] = actual_duration\n        logger.info(f\"Using detected audio duration: {actual_duration} microseconds\")\n\n\ndef calculate_adjusted_time_range(audio: dict, actual_duration: int):\n    \"\"\"计算并调整音频片段时间范围\"\"\"\n    start_time = audio['start']\n    requested_end_time = audio['end']\n    requested_duration = requested_end_time - start_time\n    \n    # 检查并修正开始时间，确保不小于0\n    if start_time < 0:\n        logger.warning(f\"Start time {start_time} is negative, setting to 0\")\n        start_time = 0\n        \n    # 根据实际音频时长和请求的时长进行智能处理\n    if actual_duration < requested_duration:\n        # 情况1: 音频实际长度不够（小于end - start）时，使用音频实际时长\n        logger.warning(f\"Audio actual duration {actual_duration} is less than requested duration {requested_duration}, using actual duration\")\n        # 使用音频实际时长，但保持起始时间不变\n        segment_duration = actual_duration\n        end_time = start_time + segment_duration\n    else:\n        # 情况2: 音频实际时长足够时，使用指定的end作为结束时间（但不超过音频实际时长）\n        calculated_end_time = min(requested_end_time, start_time + actual_duration)\n        segment_duration = calculated_end_time - start_time\n        end_time = calculated_end_time\n    \n    # 确保片段至少有最小持续时间，避免0持续时间导致的问题\n    if segment_duration <= 0:\n        logger.warning(f\"Segment duration is zero or negative ({segment_duration}), setting to minimum duration\")\n        # 设置最小持续时间，比如100微秒，这样可以避免重叠问题\n        segment_duration = 100\n        end_time = start_time + segment_duration\n    \n    logger.info(f\"Adjusted audio segment: start={start_time}, end={end_time}, duration={segment_duration}, requested_duration={requested_duration}\")\n    \n    return start_time, end_time, segment_duration\n\n\ndef update_audio_time_params(audio: dict, start_time: int, end_time: int):\n    \"\"\"更新音频对象中的时间参数\"\"\"\n    audio['start'] = start_time\n    audio['end'] = end_time\n\n\ndef create_audio_segment(audio_path: str, start_time: int, segment_duration: int, audio: dict):\n    \"\"\"创建音频片段对象\"\"\"\n    audio_segment = draft.AudioSegment(\n        material=audio_path,\n        target_timerange=trange(start=start_time, duration=segment_duration),\n        volume=audio['volume']\n    )\n    return audio_segment\n\n\ndef add_segment_with_overlap_handling(script: ScriptFile, track_name: str, audio_segment, audio_path: str, start_time: int, segment_duration: int, audio: dict):\n    \"\"\"添加片段到轨道，处理可能的重叠问题\"\"\"\n    try:\n        script.add_segment(audio_segment, track_name)\n    except Exception as e:\n        # 如果添加片段时出现重叠错误，尝试调整片段位置\n        if \"overlaps\" in str(e) or \"overlap\" in str(e).lower():\n            logger.warning(f\"Segment overlap detected: {str(e)}, attempting to adjust\")\n            # 稍微调整片段的开始时间，避免重叠\n            # 逐步增加偏移量，直到不再重叠\n            offset = 100\n            max_attempts = 10\n            attempts = 0\n            \n            while attempts < max_attempts:\n                try:\n                    adjusted_start = start_time + offset\n                    logger.info(f\"Attempt {attempts + 1}: Adjusting segment start time from {start_time} to {adjusted_start}\")\n                    \n                    # 重新创建片段，使用调整后的时间\n                    adjusted_audio_segment = draft.AudioSegment(\n                        material=audio_path,\n                        target_timerange=trange(start=adjusted_start, duration=segment_duration),\n                        volume=audio['volume']\n                    )\n                    \n                    # 再次尝试添加片段\n                    script.add_segment(adjusted_audio_segment, track_name)\n                    logger.info(f\"Successfully added adjusted segment with start time {adjusted_start}\")\n                    break  # 成功添加，跳出循环\n                except Exception as retry_e:\n                    if \"overlaps\" in str(retry_e) or \"overlap\" in str(retry_e).lower():\n                        attempts += 1\n                        offset += 100  # 增加偏移量\n                        logger.info(f\"Still overlapping, increasing offset to {offset}\")\n                    else:\n                        # 如果不是重叠错误，重新抛出异常\n                        raise\n            \n            if attempts >= max_attempts:\n                logger.error(f\"Failed to add segment after {max_attempts} attempts, giving up\")\n                raise\n        else:\n            # 如果不是重叠错误，重新抛出异常\n            raise\n\n\ndef parse_audio_data(json_str: str) -> List[Dict[str, Any]]:\n    \"\"\"\n    解析音频数据的JSON字符串，处理可选字段的默认值\n    \n    Args:\n        json_str: 包含音频数据的JSON字符串\n        \n    Returns:\n        包含音频对象的数组，每个对象都处理了默认值\n        \n    Raises:\n        CustomException: 当JSON格式错误或缺少必选字段时抛出\n    \"\"\"\n    # 解析JSON字符串\n    data = parse_json_string(json_str)\n    \n    # 验证数据格式\n    validate_input_format(data)\n    \n    # 处理音频项列表\n    result = []\n    for i, item in enumerate(data):\n        processed_item = process_single_audio_item(item, i)\n        result.append(processed_item)\n    \n    return result\n\n\ndef parse_json_string(json_str: str) -> List[Dict[str, Any]]:\n    \"\"\"解析JSON字符串\"\"\"\n    try:\n        data = json.loads(json_str)\n        logger.info(f\"Successfully parsed JSON with {len(data) if isinstance(data, list) else 1} items\")\n        return data\n    except json.JSONDecodeError as e:\n        logger.error(f\"JSON parse error: {e.msg}\")\n        raise CustomException(CustomError.INVALID_AUDIO_INFO, f\"JSON parse error: {e.msg}\")\n\n\ndef validate_input_format(data: Any):\n    \"\"\"验证输入数据格式\"\"\"\n    if not isinstance(data, list):\n        logger.error(\"Audio infos should be a list\")\n        raise CustomException(CustomError.INVALID_AUDIO_INFO, \"audio_infos should be a list\")\n\n\ndef process_single_audio_item(item: Any, index: int) -> Dict[str, Any]:\n    \"\"\"处理单个音频项\"\"\"\n    # 验证单个项的数据类型\n    validate_item_type(item, index)\n    \n    # 验证必选字段\n    validate_required_fields(item, index)\n    \n    # 创建处理后的对象，设置默认值\n    processed_item = create_processed_item(item)\n    \n    # 验证数值范围\n    validate_numeric_ranges(processed_item, index)\n    \n    logger.debug(f\"Processed audio item {index+1}: {processed_item}\")\n    return processed_item\n\n\ndef validate_item_type(item: Any, index: int):\n    \"\"\"验证单个项的数据类型\"\"\"\n    if not isinstance(item, dict):\n        logger.error(f\"The {index}th item should be a dict\")\n        raise CustomException(CustomError.INVALID_AUDIO_INFO, f\"the {index}th item should be a dict\")\n\n\ndef validate_required_fields(item: Dict[str, Any], index: int):\n    \"\"\"验证必选字段\"\"\"\n    required_fields = [\"audio_url\", \"start\", \"end\"]\n    missing_fields = [field for field in required_fields if field not in item]\n    \n    if missing_fields:\n        logger.error(f\"The {index}th item is missing required fields: {', '.join(missing_fields)}\")\n        raise CustomException(CustomError.INVALID_AUDIO_INFO, f\"the {index}th item is missing required fields: {', '.join(missing_fields)}\")\n\n\ndef create_processed_item(item: Dict[str, Any]) -> Dict[str, Any]:\n    \"\"\"创建处理后的音频项，设置默认值\"\"\"\n    return {\n        \"audio_url\": item[\"audio_url\"],\n        \"duration\": item.get(\"duration\"),  # duration变为可选字段\n        \"start\": item[\"start\"],\n        \"end\": item[\"end\"],\n        \"volume\": item.get(\"volume\", 1.0),  # 默认音量 1.0\n        \"audio_effect\": item.get(\"audio_effect\", None)  # 默认无音频效果\n    }\n\n\ndef validate_numeric_ranges(processed_item: Dict[str, Any], index: int):\n    \"\"\"验证数值范围\"\"\"\n    if processed_item[\"volume\"] < 0.0 or processed_item[\"volume\"] > 2.0:\n        logger.warning(f\"Volume value {processed_item['volume']} out of range [0.0, 2.0], using default 1.0\")\n        processed_item[\"volume\"] = 1.0\n    \n    # 如果提供了 duration 且小于等于 0，则报错\n    if processed_item[\"duration\"] is not None and processed_item[\"duration\"] <= 0:\n        logger.error(f\"Invalid duration: {processed_item['duration']}\")\n        raise CustomException(CustomError.INVALID_AUDIO_INFO, f\"the {index}th item has invalid duration\")"
  },
  {
    "path": "src/service/add_captions.py",
    "content": "import json\nfrom typing import List, Dict, Any, Tuple, Optional, Literal\nimport asyncio\n\nfrom src.utils.logger import logger\nfrom src.pyJianYingDraft import ScriptFile, TrackType, TextSegment, TextStyle, ClipSettings, Timerange, FontType, TextBorder, TextShadow\nfrom src.pyJianYingDraft.metadata import TextIntro, TextOutro, TextLoopAnim\nfrom src.utils.draft_cache import DRAFT_CACHE\nfrom exceptions import CustomException, CustomError\nfrom src.utils import helper\nfrom src.schemas.add_captions import ShadowInfo\nfrom src.service.get_text_effects import resolve_text_effect\nfrom src.utils.draft_lock_manager import DraftLockManager\n\n\nFONT_ALIAS_MAP = {\n    \"志向黑\": \"励字志向黑简_特粗\",\n    \"励字志向黑\": \"励字志向黑简_特粗\",\n    \"励字志向黑简\": \"励字志向黑简_特粗\",\n}\n\n\ndef resolve_font_type(font_name: str) -> Optional[FontType]:\n    \"\"\"\n    解析用户传入的字体名称，支持：\n    1. FontType 枚举字段名\n    2. 预定义别名（例如“志向黑”）\n    3. 字体展示名（EffectMeta.name）\n    4. 唯一的模糊包含匹配\n    \"\"\"\n    if not font_name:\n        return None\n\n    raw_name = font_name.strip()\n    if not raw_name:\n        return None\n\n    # 1) 直接按枚举字段名匹配\n    direct_match = getattr(FontType, raw_name, None)\n    if isinstance(direct_match, FontType):\n        return direct_match\n\n    # 2) 优先走别名映射\n    normalized_name = raw_name.strip()\n    alias_key = FONT_ALIAS_MAP.get(raw_name)\n    if alias_key is None:\n        for key, value in FONT_ALIAS_MAP.items():\n            if key.strip() == normalized_name:\n                alias_key = value\n                break\n    if alias_key:\n        alias_match = getattr(FontType, alias_key, None)\n        if isinstance(alias_match, FontType):\n            return alias_match\n\n    # 3) 枚举自带名称匹配（忽略空格/下划线）\n    try:\n        return FontType.from_name(raw_name)\n    except ValueError:\n        pass\n\n    # 4) 按展示名/枚举名做容错匹配\n    exact_candidates: List[FontType] = []\n    fuzzy_candidates: List[FontType] = []\n    for font_type in FontType:\n        normalized_enum_name = font_type.name.strip()\n        normalized_display_name = font_type.value.name.strip()\n\n        if normalized_name in (normalized_enum_name, normalized_display_name):\n            exact_candidates.append(font_type)\n            continue\n\n        if normalized_name and (\n            normalized_name in normalized_enum_name or normalized_name in normalized_display_name\n        ):\n            fuzzy_candidates.append(font_type)\n\n    if len(exact_candidates) == 1:\n        return exact_candidates[0]\n    if len(exact_candidates) > 1:\n        logger.warning(f\"Font '{font_name}' matched multiple exact candidates, using default font\")\n        return None\n\n    if len(fuzzy_candidates) == 1:\n        logger.info(f\"Font '{font_name}' resolved to '{fuzzy_candidates[0].name}' via fuzzy match\")\n        return fuzzy_candidates[0]\n    if len(fuzzy_candidates) > 1:\n        logger.warning(f\"Font '{font_name}' matched multiple fuzzy candidates, using default font\")\n        return None\n\n    return None\n\n\ndef add_captions(\n    draft_url: str,\n    captions: str,\n    text_color: str = \"#ffffff\",\n    border_color: Optional[str] = None,\n    alignment: int = 1,\n    alpha: float = 1.0,\n    font: Optional[str] = None,\n    font_size: int = 15,\n    letter_spacing: Optional[float] = None,\n    line_spacing: Optional[float] = None,\n    scale_x: float = 1.0,\n    scale_y: float = 1.0,\n    transform_x: float = 0.0,\n    transform_y: float = 0.0,\n    style_text: bool = False,\n    underline: bool = False,\n    italic: bool = False,\n    bold: bool = False,\n    has_shadow: bool = False,\n    shadow_info: Optional[ShadowInfo] = None,\n    text_effect: Optional[str] = None\n) -> Tuple[str, str, List[str], List[str], List[dict]]:\n    \"\"\"\n    批量添加字幕到剪映草稿的业务逻辑\n    \n    Args:\n        draft_url: 草稿 URL\n        captions: 字幕信息列表的 JSON 字符串，格式如下：\n            [\n                {\n                    \"start\": 0,  # 字幕开始时间（微秒）\n                    \"end\": 10000000,  # 字幕结束时间（微秒）\n                    \"text\": \"你好，剪映\",  # 字幕文本内容\n                    \"keyword\": \"好\",  # 关键词（用 | 分隔多个关键词），可选参数\n                    \"keyword_color\": \"#457616\",  # 关键词颜色，可选参数\n                    \"keyword_border_color\": \"#000000\",  # 关键词边框颜色，可选参数\n                    \"keyword_font_size\": 15,  # 关键词字体大小，可选参数\n                    \"font_size\": 15,  # 文本字体大小，可选参数\n                    \"in_animation\": None,  # 入场动画，可选参数\n                    \"out_animation\": None,  # 出场动画，可选参数\n                    \"loop_animation\": None,  # 循环动画，可选参数\n                    \"in_animation_duration\": None,  # 入场动画时长，可选参数\n                    \"out_animation_duration\": None,  # 出场动画时长，可选参数\n                    \"loop_animation_duration\": None,  # 循环动画时长，可选参数\n                }\n            ]\n        text_color: 文本颜色（十六进制），默认\"#ffffff\"\n        border_color: 边框颜色（十六进制），默认 None\n        alignment: 文本对齐方式（0-5），默认 1\n        alpha: 文本透明度（0.0-1.0），默认 1.0\n        font: 字体名称，默认 None\n        font_size: 字体大小，默认 15\n        letter_spacing: 字间距，默认 None\n        line_spacing: 行间距，默认 None\n        scale_x: 水平缩放，默认 1.0\n        scale_y: 垂直缩放，默认 1.0\n        transform_x: 水平位移，默认 0.0\n        transform_y: 垂直位移，默认 0.0\n        style_text: 是否使用样式文本，默认 False\n        underline: 文字下划线开关，默认 False\n        italic: 文本斜体开关，默认 False\n        bold: 文本加粗开关，默认 False\n        has_shadow: 是否启用文本阴影，默认 False\n        shadow_info: 文本阴影参数，默认 None\n        text_effect: 花字效果名称或 effect_id，默认 None\n    \n    Returns:\n        draft_url: 草稿 URL\n        track_id: 字幕轨道 ID\n        text_ids: 字幕 ID 列表\n        segment_ids: 字幕片段 ID 列表\n        segment_infos: 片段信息列表\n    \n    Raises:\n        CustomException: 字幕添加失败\n    \"\"\"\n    # 记录函数入口参数，便于调试\n    logger.info(f\"add_captions started, draft_url: {draft_url}\")\n    logger.debug(f\"Function parameters - text_color: {text_color}, border_color: {border_color}, \"\n                 f\"alignment: {alignment}, alpha: {alpha}, font: {font}, font_size: {font_size}, \"\n                 f\"scale_x: {scale_x}, scale_y: {scale_y}, transform_x: {transform_x}, transform_y: {transform_y}, \"\n                 f\"style_text: {style_text}, underline: {underline}, italic: {italic}, bold: {bold}, has_shadow: {has_shadow}, shadow_info: {shadow_info}\")\n    \n    try:\n        # 1. 提取草稿ID\n        draft_id = helper.get_url_param(draft_url, \"draft_id\")\n        if (not draft_id) or (draft_id not in DRAFT_CACHE):\n            logger.error(f\"Invalid draft_url or draft not found in cache: {draft_url}\")\n            raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n        # 2. 解析字幕信息\n        caption_items = parse_captions_data(json_str=captions)\n        if len(caption_items) == 0:\n            logger.info(f\"No caption info provided, draft_id: {draft_id}\")\n            raise CustomException(CustomError.INVALID_CAPTION_INFO)\n\n        logger.info(f\"Parsed {len(caption_items)} caption items\")\n\n        # 3. 从缓存中获取草稿\n        script: ScriptFile = DRAFT_CACHE[draft_id]\n\n        # 4. 添加字幕轨道（与其它素材接口一致：按全局接口调用顺序叠层，后调用者在上）\n        track_name = f\"caption_track_{helper.gen_unique_id()}\"\n        script.add_track_ordered(track_type=TrackType.text, track_name=track_name)\n        logger.info(f\"Added caption track: {track_name}\")\n\n        # 5. 遍历字幕信息，添加字幕到草稿中的指定轨道，收集片段ID\n        segment_ids = []\n        text_ids = []\n        segment_infos = []\n        for i, caption in enumerate(caption_items):\n            try:\n                logger.info(f\"Processing caption {i+1}/{len(caption_items)}, text: {caption['text'][:20]}...\")\n                \n                segment_id, text_id, segment_info = add_caption_to_draft(\n                    script, track_name,\n                    caption=caption,\n                    text_color=text_color,\n                    border_color=border_color,\n                    alignment=alignment,\n                    alpha=alpha,\n                    font=font,\n                    font_size=font_size,\n                    letter_spacing=letter_spacing,\n                    line_spacing=line_spacing,\n                    scale_x=scale_x,\n                    scale_y=scale_y,\n                    transform_x=transform_x,\n                    transform_y=transform_y,\n                    style_text=style_text,\n                    underline=underline,\n                    italic=italic,\n                    bold=bold,\n                    has_shadow=has_shadow,\n                    shadow_info=shadow_info,\n                    text_effect=text_effect\n                )\n                segment_ids.append(segment_id)\n                text_ids.append(text_id)\n                segment_infos.append(segment_info)\n                logger.info(f\"Added caption {i+1}/{len(caption_items)}, segment_id: {segment_id}\")\n            except Exception as e:\n                logger.error(f\"Failed to add caption {i+1}/{len(caption_items)}, error: {str(e)}\")\n                raise\n\n        # 6. 保存草稿\n        script.save()\n        logger.info(f\"Draft saved successfully\")\n\n        # 7. 获取当前字幕轨道ID\n        track_id = \"\"\n        for key in script.tracks.keys():\n            if script.tracks[key].name == track_name:\n                track_id = script.tracks[key].track_id\n                break\n        logger.info(f\"Caption track created, draft_id: {draft_id}, track_id: {track_id}\")\n\n        logger.info(f\"add_captions completed successfully - draft_id: {draft_id}, track_id: {track_id}, captions_added: {len(caption_items)}\")\n        \n        return draft_url, track_id, text_ids, segment_ids, segment_infos\n        \n    except CustomException:\n        # 重新抛出自定义异常\n        raise\n    except Exception as e:\n        # 捕获其他未预期的异常并转换为自定义异常\n        logger.error(f\"Unexpected error in add_captions: {str(e)}\")\n        raise CustomException(CustomError.CAPTION_ADD_FAILED, f\"Unexpected error: {str(e)}\")\n\n\nasync def add_captions_async(\n    draft_url: str,\n    captions: str,\n    text_color: str = \"#ffffff\",\n    border_color: Optional[str] = None,\n    alignment: int = 1,\n    alpha: float = 1.0,\n    font: Optional[str] = None,\n    font_size: int = 15,\n    letter_spacing: Optional[float] = None,\n    line_spacing: Optional[float] = None,\n    scale_x: float = 1.0,\n    scale_y: float = 1.0,\n    transform_x: float = 0.0,\n    transform_y: float = 0.0,\n    style_text: bool = False,\n    underline: bool = False,\n    italic: bool = False,\n    bold: bool = False,\n    has_shadow: bool = False,\n    shadow_info: Optional[ShadowInfo] = None,\n    text_effect: Optional[str] = None,\n    lock_timeout: float = 30.0\n) -> Tuple[str, str, List[str], List[str], List[dict]]:\n    \"\"\"\n    批量添加字幕到剪映草稿的异步版本（带并发锁保护）\n    \n    功能：\n    1. 使用 DraftLockManager 防止同一草稿的并发写操作\n    2. 支持超时控制，避免无限等待\n    3. 自动释放锁，即使发生异常\n    \n    Args:\n        draft_url: 草稿 URL，格式：\".../get_draft?draft_id=xxx\"\n        captions: JSON 字符串，包含字幕信息列表，详见 add_captions 函数\n        text_color: 文本颜色（十六进制），默认\"#ffffff\"\n        border_color: 边框颜色（十六进制），默认 None\n        alignment: 文本对齐方式（0-5），默认 1\n        alpha: 文本透明度（0.0-1.0），默认 1.0\n        font: 字体名称，默认 None\n        font_size: 字体大小，默认 15\n        letter_spacing: 字间距，默认 None\n        line_spacing: 行间距，默认 None\n        scale_x: 水平缩放，默认 1.0\n        scale_y: 垂直缩放，默认 1.0\n        transform_x: 水平位移，默认 0.0\n        transform_y: 垂直位移，默认 0.0\n        style_text: 是否使用样式文本，默认 False\n        underline: 文字下划线开关，默认 False\n        italic: 文本斜体开关，默认 False\n        bold: 文本加粗开关，默认 False\n        has_shadow: 是否启用文本阴影，默认 False\n        shadow_info: 文本阴影参数，默认 None\n        text_effect: 花字效果名称或 effect_id，默认 None\n        lock_timeout: 获取锁的超时时间（秒），默认 30 秒\n    \n    Returns:\n        tuple: (draft_url, track_id, text_ids, segment_ids, segment_infos)\n    \n    Raises:\n        CustomException: 字幕添加失败或获取锁超时\n        asyncio.TimeoutError: 等待锁超时时抛出\n    \n    Example:\n        >>> result = await add_captions_async(\n        ...     draft_url=\"http://.../draft_id=123\",\n        ...     captions='[{\"start\":0, \"end\":5000000, \"text\":\"你好\"}]'\n        ... )\n    \"\"\"\n    # 提取草稿 ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if not draft_id:\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n    \n    # 获取锁管理器\n    lock_manager = DraftLockManager()\n    \n    # 尝试获取锁\n    try:\n        await lock_manager.acquire_lock(draft_id, timeout=lock_timeout)\n        logger.info(f\"Lock acquired for draft_id: {draft_id}\")\n    except asyncio.TimeoutError:\n        logger.error(f\"Timeout waiting for lock on draft_id: {draft_id}\")\n        raise CustomException(\n            CustomError.DRAFT_LOCK_TIMEOUT,\n            f\"Failed to acquire lock for draft {draft_id} within {lock_timeout}s\"\n        )\n    \n    try:\n        # 调用内部处理函数（不获取锁，由外层控制）\n        return add_captions(\n            draft_url=draft_url,\n            captions=captions,\n            text_color=text_color,\n            border_color=border_color,\n            alignment=alignment,\n            alpha=alpha,\n            font=font,\n            font_size=font_size,\n            letter_spacing=letter_spacing,\n            line_spacing=line_spacing,\n            scale_x=scale_x,\n            scale_y=scale_y,\n            transform_x=transform_x,\n            transform_y=transform_y,\n            style_text=style_text,\n            underline=underline,\n            italic=italic,\n            bold=bold,\n            has_shadow=has_shadow,\n            shadow_info=shadow_info,\n            text_effect=text_effect\n        )\n    finally:\n        # 释放锁\n        await lock_manager.release_lock(draft_id)\n        logger.info(f\"Lock released for draft_id: {draft_id}\")\n\n\ndef add_caption_to_draft(\n    script: ScriptFile,\n    track_name: str,\n    caption: dict,\n    text_color: str = \"#ffffff\",\n    border_color: Optional[str] = None,\n    alignment: int = 1,\n    alpha: float = 1.0,\n    font: Optional[str] = None,\n    font_size: int = 15,\n    letter_spacing: Optional[float] = None,\n    line_spacing: Optional[float] = None,\n    scale_x: float = 1.0,\n    scale_y: float = 1.0,\n    transform_x: float = 0.0,\n    transform_y: float = 0.0,\n    style_text: bool = False,\n    underline: bool = False,\n    italic: bool = False,\n    bold: bool = False,\n    has_shadow: bool = False,\n    shadow_info: Optional[ShadowInfo] = None,\n    text_effect: Optional[str] = None\n) -> Tuple[str, str, dict]:\n    \"\"\"\n    向剪映草稿中添加单个字幕\n    \n    Args:\n        script: 草稿文件对象\n        track_name: 字幕轨道名称\n        caption: 字幕信息字典，包含以下字段：\n            start: 字幕开始时间（微秒）\n            end: 字幕结束时间（微秒）\n            text: 字幕文本内容\n            keyword: 关键词（用 | 分隔多个关键词），可选\n            keyword_color: 关键词颜色，可选\n            keyword_border_color: 关键词边框颜色，可选\n            keyword_font_size: 关键词字体大小，可选\n            font_size: 文本字体大小，可选\n            in_animation: 入场动画，可选\n            out_animation: 出场动画，可选\n            loop_animation: 循环动画，可选\n            in_animation_duration: 入场动画时长，可选\n            out_animation_duration: 出场动画时长，可选\n            loop_animation_duration: 循环动画时长，可选\n        text_color: 文本颜色（十六进制），默认\"#ffffff\"\n        border_color: 边框颜色（十六进制），默认 None\n        alignment: 文本对齐方式（0-5），默认 1\n        alpha: 文本透明度（0.0-1.0），默认 1.0\n        font: 字体名称，默认 None\n        font_size: 字体大小，默认 15\n        letter_spacing: 字间距，默认 None\n        line_spacing: 行间距，默认 None\n        scale_x: 水平缩放，默认 1.0\n        scale_y: 垂直缩放，默认 1.0\n        transform_x: 水平位移，默认 0.0\n        transform_y: 垂直位移，默认 0.0\n        style_text: 是否使用样式文本，默认 False\n        underline: 文字下划线开关，默认 False\n        italic: 文本斜体开关，默认 False\n        bold: 文本加粗开关，默认 False\n        has_shadow: 是否启用文本阴影，默认 False\n        shadow_info: 文本阴影参数，默认 None\n        text_effect: 花字效果名称或 effect_id，默认 None\n    \n    Returns:\n        segment_id: 片段 ID\n        text_id: 文本 ID（material_id）\n        segment_info: 片段信息字典，包含 id、start、end\n    \n    Raises:\n        CustomException: 添加字幕失败\n    \"\"\"\n    try:\n        # 记录函数入口参数，便于调试\n        logger.debug(f\"add_caption_to_draft called with caption: {caption}\")\n\n        # 0. 在函数开头统一处理参数约束：\n        # 当花字有效时，直接将 text_color / border_color / has_shadow 重置为默认值\n        if text_effect:\n            try:\n                if resolve_text_effect(text_effect):\n                    logger.info(\n                        f\"Valid text effect detected: {text_effect}, \"\n                        f\"resetting text_color/border_color/has_shadow to defaults\"\n                    )\n                    text_color = \"#ffffff\"\n                    border_color = None\n                    has_shadow = False\n                else:\n                    logger.warning(f\"Text effect not found: {text_effect}\")\n            except Exception as e:\n                logger.error(f\"Failed to resolve text effect '{text_effect}': {str(e)}\")\n        \n        # 1. 创建时间范围\n        caption_duration = caption['end'] - caption['start']\n        timerange = Timerange(start=caption['start'], duration=caption_duration)\n        \n        # 2. 解析颜色\n        rgb_color = hex_to_rgb(text_color)\n        \n        # 3. 创建文本样式\n        align_value: Literal[0, 1, 2] = 0\n        if alignment == 1:\n            align_value = 1\n        elif alignment == 2:\n            align_value = 2\n        \n        # 根据需求修改：只有当caption中明确指定了font_size时才使用，否则不设置默认值\n        font_size_value = font_size\n        if 'font_size' in caption and caption['font_size'] is not None:\n            font_size_value = float(caption['font_size'])\n        \n        # 创建TextStyle对象\n        text_style = TextStyle(\n            size=font_size_value,\n            color=rgb_color,\n            alpha=alpha,\n            align=align_value,\n            letter_spacing=int(letter_spacing) if letter_spacing is not None else 0,\n            line_spacing=int(line_spacing) if line_spacing is not None else 0,\n            auto_wrapping=True,  # 字幕默认开启自动换行\n            underline=underline,\n            italic=italic,\n            bold=bold\n        )\n        logger.info(f\"Created text style, text_style.size: {text_style.size}, font_size from caption: {font_size}\")\n        \n        # 4. 创建文本描边（如果提供了border_color）\n        text_border = None\n        if border_color:\n            border_rgb_color = hex_to_rgb(border_color)\n            text_border = TextBorder(color=border_rgb_color)\n        \n        # 5. 创建字体（如果提供了font）\n        font_type = None\n        if font:\n            font_type = resolve_font_type(font)\n            if font_type is None:\n                logger.warning(f\"Font '{font}' not found, using default font\")\n        \n        # 6. 创建图像调节设置\n        clip_settings = ClipSettings(\n            scale_x=scale_x,\n            scale_y=scale_y,\n            transform_x=transform_x / script.width,  # 转换为画布宽度单位\n            transform_y=transform_y / script.height  # 转换为画布高度单位\n        )\n        \n        # 7. 创建文本阴影（如果启用了阴影）\n        text_shadow = None\n        if has_shadow:\n            # 如果启用了阴影但没有提供shadow_info，则使用默认值\n            if shadow_info is None:\n                # 创建默认的阴影配置\n                shadow_rgb_color = hex_to_rgb(\"#000000\")\n                text_shadow = TextShadow(\n                    alpha=0.9,\n                    color=shadow_rgb_color,\n                    diffuse=15.0,\n                    distance=5.0,\n                    angle=-45.0\n                )\n            else:\n                # 使用提供的shadow_info配置\n                shadow_rgb_color = hex_to_rgb(shadow_info.shadow_color)\n                text_shadow = TextShadow(\n                    alpha=shadow_info.shadow_alpha,\n                    color=shadow_rgb_color,\n                    diffuse=shadow_info.shadow_diffuse,\n                    distance=shadow_info.shadow_distance,\n                    angle=shadow_info.shadow_angle\n                )\n        \n        # 8. 创建文本片段\n        text_segment = TextSegment(\n            text=caption['text'],\n            timerange=timerange,\n            style=text_style,\n            border=text_border,  # 添加边框\n            font=font_type,      # 添加字体\n            shadow=text_shadow,  # 添加阴影\n            clip_settings=clip_settings\n        )\n        \n        logger.info(f\"Created text segment, material_id: {text_segment.material_id}\")\n        logger.info(f\"Text segment details - start: {caption['start']}, duration: {caption_duration}, text: {caption['text'][:50]}\")\n\n        # 10. 处理花字效果\n        if text_effect:\n            try:\n                resolved_effect = resolve_text_effect(text_effect)\n                if resolved_effect:\n                    text_segment.add_effect(resolved_effect['effect_id'])\n                    logger.info(f\"Added text effect: {text_effect} (effect_id: {resolved_effect['effect_id']})\")\n            except Exception as e:\n                logger.error(f\"Failed to add text effect '{text_effect}': {str(e)}\")\n        \n        # 11. 处理动画效果\n        if caption.get('keyword'):\n            keyword_color = caption.get('keyword_color', '#ff7100')  # 默认橙色\n            keyword_rgb_color = hex_to_rgb(keyword_color)\n            keyword_font_size = caption.get('keyword_font_size')  # 获取关键词字体大小\n            keyword_border_color = caption.get('keyword_border_color')  # 获取关键词边框颜色\n            # 优先使用keyword_border_color，如果没有指定则使用border_color\n            if keyword_border_color:\n                keyword_border_rgb_color = hex_to_rgb(keyword_border_color)\n            elif border_color:\n                keyword_border_rgb_color = hex_to_rgb(border_color)\n            else:\n                keyword_border_rgb_color = None\n            # 应用关键词颜色和字体大小到文本样式中\n            apply_keyword_highlight(text_segment, caption['keyword'], keyword_rgb_color, keyword_font_size, keyword_border_rgb_color)\n            logger.info(f\"Applied keyword highlighting: {caption['keyword']} with color {keyword_color}, font size {keyword_font_size}, border color {keyword_border_color or border_color}\")\n        \n        # 10. 处理动画效果\n        if caption.get('in_animation'):\n            in_animation_name = caption['in_animation']\n            in_animation_enum = map_animation_name_to_enum(in_animation_name, \"in\")\n            if in_animation_enum:\n                # 获取动画时长，优先使用指定时长，否则使用默认时长\n                in_duration = caption.get('in_animation_duration')\n                try:\n                    text_segment.add_animation(in_animation_enum, duration=in_duration)\n                    logger.info(f\"Added in animation: {in_animation_name}\")\n                except Exception as e:\n                    logger.error(f\"Failed to add in animation '{in_animation_name}': {str(e)}\")\n            else:\n                logger.warning(f\"In animation not found: {in_animation_name}\")\n        \n        if caption.get('out_animation'):\n            out_animation_name = caption['out_animation']\n            out_animation_enum = map_animation_name_to_enum(out_animation_name, \"out\")\n            if out_animation_enum:\n                # 获取动画时长，优先使用指定时长，否则使用默认时长\n                out_duration = caption.get('out_animation_duration')\n                try:\n                    text_segment.add_animation(out_animation_enum, duration=out_duration)\n                    logger.info(f\"Added out animation: {out_animation_name}\")\n                except Exception as e:\n                    logger.error(f\"Failed to add out animation '{out_animation_name}': {str(e)}\")\n            else:\n                logger.warning(f\"Out animation not found: {out_animation_name}\")\n        \n        if caption.get('loop_animation'):\n            loop_animation_name = caption['loop_animation']\n            loop_animation_enum = map_animation_name_to_enum(loop_animation_name, \"loop\")\n            if loop_animation_enum:\n                # 获取动画时长，优先使用指定时长，否则使用默认时长\n                loop_duration = caption.get('loop_animation_duration')\n                try:\n                    text_segment.add_animation(loop_animation_enum, duration=loop_duration)\n                    logger.info(f\"Added loop animation: {loop_animation_name}\")\n                except Exception as e:\n                    logger.error(f\"Failed to add loop animation '{loop_animation_name}': {str(e)}\")\n            else:\n                logger.warning(f\"Loop animation not found: {loop_animation_name}\")\n\n        # 12. 向指定轨道添加片段\n        script.add_segment(text_segment, track_name)\n\n        # 13. 构造片段信息\n        segment_info = {\n            \"id\": text_segment.segment_id,\n            \"start\": caption['start'],\n            \"end\": caption['end']\n        }\n\n        return text_segment.segment_id, text_segment.material_id, segment_info\n        \n    except CustomException:\n        # 重新抛出自定义异常\n        raise\n    except Exception as e:\n        # 捕获其他未预期的异常并转换为自定义异常\n        logger.error(f\"Unexpected error in add_caption_to_draft: {str(e)}\")\n        raise CustomException(CustomError.CAPTION_ADD_FAILED)\n\n\ndef apply_keyword_highlight(text_segment: TextSegment, keywords: str, keyword_color: tuple, keyword_font_size: float = None, keyword_border_color: tuple = None):\n    \"\"\"\n    应用关键词高亮到文本片段\n    \n    Args:\n        text_segment: 文本片段对象\n        keywords: 关键词字符串，用'|'分隔多个关键词\n        keyword_color: 关键词颜色的RGB元组 (0-1范围)\n        keyword_font_size: 关键词字体大小，默认为None，使用文本默认字体大小\n        keyword_border_color: 关键词边框颜色的RGB元组 (0-1范围)，默认为None\n    \"\"\"\n    # 分割关键词\n    keyword_list = keywords.split('|')\n    text = text_segment.text\n    \n    # 使用关键词字体大小，如果没有指定则使用文本默认字体大小\n    font_size = keyword_font_size if keyword_font_size is not None else text_segment.style.size\n    \n    # 为每个关键词创建高亮样式\n    for keyword in keyword_list:\n        keyword = keyword.strip()\n        if not keyword:\n            continue\n            \n        # 查找所有匹配的关键词位置\n        start_pos = 0\n        while start_pos < len(text):\n            start_pos = text.find(keyword, start_pos)\n            if start_pos == -1:\n                break\n                \n            end_pos = start_pos + len(keyword)\n            \n            # 创建关键词高亮样式\n            highlight_style = {\n                \"fill\": {\n                    \"alpha\": 1.0,\n                    \"content\": {\n                        \"render_type\": \"solid\",\n                        \"solid\": {\n                            \"alpha\": 1.0,\n                            \"color\": list(keyword_color)  # 使用关键词颜色\n                        }\n                    }\n                },\n                \"range\": [start_pos, end_pos],\n                \"size\": font_size,  # 使用关键词字体大小\n                \"bold\": text_segment.style.bold,\n                \"italic\": text_segment.style.italic,\n                \"underline\": text_segment.style.underline\n            }\n            \n            # 处理关键词边框颜色：当keyword_border_color不为None时添加描边\n            # keyword_border_color的值由调用方决定：优先使用keyword_border_color参数，否则使用border_color\n            if keyword_border_color is not None:\n                # 使用指定的关键词边框颜色创建描边\n                # 注意：剪映的stroke格式需要包含content.solid结构\n                highlight_style[\"strokes\"] = [{\n                    \"content\": {\n                        \"solid\": {\n                            \"alpha\": 1.0,\n                            \"color\": list(keyword_border_color)\n                        }\n                    },\n                    \"width\": 0.08  # 默认边框宽度（与剪映内部表示一致）\n                }]\n            # 注意：当keyword_border_color为None时（即既没有指定keyword_border_color也没有指定border_color），不添加描边\n            \n            # 添加到文本片段的额外样式中\n            text_segment.extra_styles.append(highlight_style)\n            start_pos = end_pos\n\n\ndef parse_captions_data(json_str: str) -> List[Dict[str, Any]]:\n    \"\"\"\n    解析字幕数据的JSON字符串，处理可选字段的默认值\n    \n    Args:\n        json_str: 包含字幕数据的JSON字符串，格式如下：\n        [\n            {\n                \"start\": 0,  # [必选] 字幕开始时间（微秒）\n                \"end\": 10000000,  # [必选] 字幕结束时间（微秒）\n                \"text\": \"你好，剪映\",  # [必选] 字幕文本内容\n                \"keyword\": \"好\",  # [可选] 关键词（用|分隔多个关键词）\n                \"keyword_color\": \"#457616\",  # [可选] 关键词颜色，默认\"#ff7100\"\n                \"keyword_border_color\": \"#000000\",  # [可选] 关键词边框颜色，默认None\n                \"keyword_font_size\": 15,  # [可选] 关键词字体大小，默认15\n                \"font_size\": 15,  # [可选] 文本字体大小，默认15\n                \"in_animation\": None,  # [可选] 入场动画，默认None\n                \"out_animation\": None,  # [可选] 出场动画，默认None\n                \"loop_animation\": None,  # [可选] 循环动画，默认None\n                \"in_animation_duration\": None,  # [可选] 入场动画时长，默认None\n                \"out_animation_duration\": None,  # [可选] 出场动画时长，默认None\n                \"loop_animation_duration\": None  # [可选] 循环动画时长，默认None\n            }\n        ]\n        \n    Returns:\n        包含字幕对象的数组，每个对象都处理了默认值\n        \n    Raises:\n        CustomException: 当JSON格式错误或缺少必选字段时抛出\n    \"\"\"\n    try:\n        # 解析JSON字符串\n        data = json.loads(json_str)\n        logger.debug(f\"Parsed JSON data: {data}\")\n    except json.JSONDecodeError as e:\n        logger.error(f\"JSON parse error: {e.msg}\")\n        raise CustomException(CustomError.INVALID_CAPTION_INFO, f\"JSON parse error: {e.msg}\")\n    \n    # 确保输入是列表\n    if not isinstance(data, list):\n        logger.error(\"captions should be a list\")\n        raise CustomException(CustomError.INVALID_CAPTION_INFO, \"captions should be a list\")\n    \n    result = []\n    \n    for i, item in enumerate(data):\n        if not isinstance(item, dict):\n            logger.error(f\"the {i}th item should be a dict\")\n            raise CustomException(CustomError.INVALID_CAPTION_INFO, f\"the {i}th item should be a dict\")\n        \n        # 检查必选字段\n        required_fields = [\"start\", \"end\", \"text\"]\n        missing_fields = [field for field in required_fields if field not in item]\n        \n        if missing_fields:\n            logger.error(f\"the {i}th item is missing required fields: {', '.join(missing_fields)}\")\n            raise CustomException(CustomError.INVALID_CAPTION_INFO, f\"the {i}th item is missing required fields: {', '.join(missing_fields)}\")\n        \n        # 创建处理后的对象，设置默认值\n        processed_item = {\n            \"start\": item[\"start\"],\n            \"end\": item[\"end\"],\n            \"text\": item[\"text\"],\n            \"keyword\": item.get(\"keyword\", None),\n            \"keyword_color\": item.get(\"keyword_color\", \"#ff7100\"),\n            \"keyword_border_color\": item.get(\"keyword_border_color\", None),\n            \"keyword_font_size\": item.get(\"keyword_font_size\", 15),\n            \"font_size\": item.get(\"font_size\", None),\n            \"in_animation\": item.get(\"in_animation\", None),\n            \"out_animation\": item.get(\"out_animation\", None),\n            \"loop_animation\": item.get(\"loop_animation\", None),\n            \"in_animation_duration\": item.get(\"in_animation_duration\", None),\n            \"out_animation_duration\": item.get(\"out_animation_duration\", None),\n            \"loop_animation_duration\": item.get(\"loop_animation_duration\", None)\n        }\n        \n        # 验证数值类型和范围\n        if not isinstance(processed_item[\"start\"], (int, float)) or processed_item[\"start\"] < 0:\n            logger.error(f\"the {i}th item has invalid start time: {processed_item['start']}\")\n            raise CustomException(CustomError.INVALID_CAPTION_INFO, f\"the {i}th item has invalid start time\")\n        \n        if not isinstance(processed_item[\"end\"], (int, float)) or processed_item[\"end\"] <= processed_item[\"start\"]:\n            logger.error(f\"the {i}th item has invalid end time: {processed_item['end']}\")\n            raise CustomException(CustomError.INVALID_CAPTION_INFO, f\"the {i}th item has invalid end time\")\n        \n        if not isinstance(processed_item[\"text\"], str) or len(processed_item[\"text\"].strip()) == 0:\n            logger.error(f\"the {i}th item has invalid text: {processed_item['text']}\")\n            raise CustomException(CustomError.INVALID_CAPTION_INFO, f\"the {i}th item has invalid text\")\n        \n        # 验证keyword_font_size参数\n        if processed_item[\"keyword_font_size\"] is not None and (\n                not isinstance(processed_item[\"keyword_font_size\"], (int, float)) or \n                processed_item[\"keyword_font_size\"] <= 0):\n            logger.warning(f\"the {i}th item has invalid keyword_font_size: {processed_item['keyword_font_size']}, using default value 15\")\n            processed_item[\"keyword_font_size\"] = 15\n        \n        result.append(processed_item)\n    \n    logger.info(f\"Successfully parsed {len(result)} caption items\")\n    return result\n\n\ndef map_animation_name_to_enum(animation_name: str, animation_type: str):\n    \"\"\"\n    将动画名称字符串映射到对应的枚举值\n    \n    Args:\n        animation_name: 动画名称字符串\n        animation_type: 动画类型 (\"in\", \"out\", \"loop\")\n    \n    Returns:\n        对应的动画枚举值，如果未找到则返回None\n    \"\"\"\n    # 入场动画映射\n    in_animation_map = {}\n    for attr_name in dir(TextIntro):\n        attr = getattr(TextIntro, attr_name)\n        if isinstance(attr, TextIntro):\n            in_animation_map[attr.value.title] = attr\n    \n    # 出场动画映射\n    out_animation_map = {}\n    for attr_name in dir(TextOutro):\n        attr = getattr(TextOutro, attr_name)\n        if isinstance(attr, TextOutro):\n            out_animation_map[attr.value.title] = attr\n    \n    # 循环动画映射\n    loop_animation_map = {}\n    for attr_name in dir(TextLoopAnim):\n        attr = getattr(TextLoopAnim, attr_name)\n        if isinstance(attr, TextLoopAnim):\n            loop_animation_map[attr.value.title] = attr\n    \n    if animation_type == \"in\":\n        return in_animation_map.get(animation_name)\n    elif animation_type == \"out\":\n        return out_animation_map.get(animation_name)\n    elif animation_type == \"loop\":\n        return loop_animation_map.get(animation_name)\n    \n    return None\n\n\ndef hex_to_rgb(hex_color: str) -> tuple:\n    \"\"\"\n    将十六进制颜色值转换为RGB三元组（0-1范围）\n    \n    Args:\n        hex_color: 十六进制颜色值，如\"#ffffff\"或\"ffffff\"\n    \n    Returns:\n        RGB三元组，取值范围为[0, 1]\n    \"\"\"\n    # 去掉首尾空白后再处理 #，否则 \" #RRGGBB\" 会 lstrip 不到 # 导致长度校验失败\n    hex_color = hex_color.strip().lstrip('#')\n    \n    # 确保是6位十六进制\n    if len(hex_color) != 6:\n        logger.warning(f\"Invalid hex color format: {hex_color}, using white as default\")\n        return (1.0, 1.0, 1.0)\n    \n    try:\n        # 转换为RGB值（0-255）\n        r = int(hex_color[0:2], 16)\n        g = int(hex_color[2:4], 16)\n        b = int(hex_color[4:6], 16)\n        \n        # 转换为0-1范围\n        return (r / 255.0, g / 255.0, b / 255.0)\n    except ValueError:\n        logger.warning(f\"Invalid hex color format: {hex_color}, using white as default\")\n        return (1.0, 1.0, 1.0)"
  },
  {
    "path": "src/service/add_effects.py",
    "content": "import json\nfrom typing import List, Dict, Any, Tuple, Optional, Union\nimport asyncio\n\nfrom src.utils.logger import logger\nfrom src.pyJianYingDraft import ScriptFile, TrackType, EffectSegment, Timerange\nfrom src.pyJianYingDraft.metadata import VideoSceneEffectType, VideoCharacterEffectType\nfrom src.utils.draft_cache import DRAFT_CACHE\nfrom exceptions import CustomException, CustomError\nfrom src.utils import helper\nfrom src.utils.draft_lock_manager import DraftLockManager\n\n\ndef add_effects(\n    draft_url: str,\n    effect_infos: str\n) -> Tuple[str, str, List[str], List[str]]:\n    \"\"\"\n    添加特效到剪映草稿的业务逻辑\n    \n    Args:\n        draft_url: 草稿URL\n        effect_infos: 特效信息列表的JSON字符串，格式如下：\n            [\n                {\n                    \"effect_title\": \"录制边框 III\",  # 特效名称/标题，必选参数\n                    \"start\": 0,  # 特效开始时间（微秒），必选参数\n                    \"end\": 5000000  # 特效结束时间（微秒），必选参数\n                }\n            ]\n    \n    Returns:\n        draft_url: 草稿URL\n        track_id: 特效轨道ID\n        effect_ids: 特效ID列表\n        segment_ids: 特效片段ID列表\n    \n    Raises:\n        CustomException: 特效添加失败\n    \"\"\"\n    logger.info(f\"add_effects started, draft_url: {draft_url}, effects count: {len(json.loads(effect_infos) if effect_infos else [])}\")\n\n    # 1. 提取草稿ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if (not draft_id) or (draft_id not in DRAFT_CACHE):\n        logger.error(f\"Invalid draft_url or draft not found in cache: {draft_url}\")\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    # 2. 解析特效信息\n    effect_items = parse_effects_data(json_str=effect_infos)\n    if len(effect_items) == 0:\n        logger.info(f\"No effect info provided, draft_id: {draft_id}\")\n        raise CustomException(CustomError.INVALID_EFFECT_INFO)\n\n    logger.info(f\"Parsed {len(effect_items)} effect items\")\n\n    # 3. 从缓存中获取草稿\n    script: ScriptFile = DRAFT_CACHE[draft_id]\n\n    # 4. 添加特效轨道（与其它素材接口一致：按全局调用顺序叠层）\n    track_name = f\"effect_track_{helper.gen_unique_id()}\"\n    script.add_track_ordered(track_type=TrackType.effect, track_name=track_name)\n    logger.info(f\"Added effect track: {track_name}\")\n\n    # 5. 遍历特效信息，添加特效到草稿中的指定轨道，收集片段ID\n    segment_ids = []\n    effect_ids = []\n    for i, effect in enumerate(effect_items):\n        try:\n            logger.info(f\"Processing effect {i+1}/{len(effect_items)}, title: {effect['effect_title']}\")\n            \n            segment_id, effect_id = add_effect_to_draft(\n                script, track_name, effect=effect\n            )\n            segment_ids.append(segment_id)\n            effect_ids.append(effect_id)\n            logger.info(f\"Added effect {i+1}/{len(effect_items)}, segment_id: {segment_id}\")\n        except Exception as e:\n            logger.error(f\"Failed to add effect {i+1}/{len(effect_items)}, error: {str(e)}\")\n            raise\n\n    # 6. 保存草稿\n    script.save()\n    logger.info(f\"Draft saved successfully\")\n\n    # 7. 获取当前特效轨道ID\n    track_id = \"\"\n    for key in script.tracks.keys():\n        if script.tracks[key].name == track_name:\n            track_id = script.tracks[key].track_id\n            break\n    logger.info(f\"Effect track created, draft_id: {draft_id}, track_id: {track_id}\")\n\n    logger.info(f\"add_effects completed successfully - draft_id: {draft_id}, track_id: {track_id}, effects_added: {len(effect_items)}\")\n    \n    return draft_url, track_id, effect_ids, segment_ids\n\n\nasync def add_effects_async(\n    draft_url: str,\n    effect_infos: str,\n    lock_timeout: float = 30.0\n) -> Tuple[str, str, List[str], List[str]]:\n    \"\"\"\n    添加特效到剪映草稿的异步版本（带并发锁保护）\n    \n    功能：\n    1. 使用 DraftLockManager 防止同一草稿的并发写操作\n    2. 支持超时控制，避免无限等待\n    3. 自动释放锁，即使发生异常\n    \n    Args:\n        draft_url: 草稿 URL，格式：\".../get_draft?draft_id=xxx\"\n        effect_infos: JSON 字符串，包含特效信息列表，详见 add_effects 函数\n        lock_timeout: 获取锁的超时时间（秒），默认 30 秒\n    \n    Returns:\n        tuple: (draft_url, track_id, effect_ids, segment_ids)\n    \n    Raises:\n        CustomException: 特效添加失败或获取锁超时\n        asyncio.TimeoutError: 等待锁超时时抛出\n    \n    Example:\n        >>> result = await add_effects_async(\n        ...     draft_url=\"http://.../draft_id=123\",\n        ...     effect_infos='[{\"effect_title\":\"录制边框 III\", \"start\":0, \"end\":5000000}]'\n        ... )\n    \"\"\"\n    # 提取草稿 ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if not draft_id:\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n    \n    # 获取锁管理器\n    lock_manager = DraftLockManager()\n    \n    # 尝试获取锁\n    try:\n        await lock_manager.acquire_lock(draft_id, timeout=lock_timeout)\n        logger.info(f\"Lock acquired for draft_id: {draft_id}\")\n    except asyncio.TimeoutError:\n        logger.error(f\"Timeout waiting for lock on draft_id: {draft_id}\")\n        raise CustomException(\n            CustomError.DRAFT_LOCK_TIMEOUT,\n            f\"Failed to acquire lock for draft {draft_id} within {lock_timeout}s\"\n        )\n    \n    try:\n        # 调用内部处理函数（不获取锁，由外层控制）\n        return add_effects(\n            draft_url=draft_url,\n            effect_infos=effect_infos\n        )\n    finally:\n        # 释放锁\n        await lock_manager.release_lock(draft_id)\n        logger.info(f\"Lock released for draft_id: {draft_id}\")\n\n\ndef add_effect_to_draft(\n    script: ScriptFile,\n    track_name: str,\n    effect: dict\n) -> Tuple[str, str]:\n    \"\"\"\n    向剪映草稿中添加单个特效\n    \n    Args:\n        script: 草稿文件对象\n        track_name: 特效轨道名称\n        effect: 特效信息字典，包含以下字段：\n            effect_title: 特效名称/标题\n            start: 特效开始时间（微秒）\n            end: 特效结束时间（微秒）\n    \n    Returns:\n        segment_id: 片段ID\n        effect_id: 特效ID（material_id）\n    \n    Raises:\n        CustomException: 添加特效失败\n    \"\"\"\n    try:\n        # 1. 查找特效类型\n        effect_type = find_effect_type_by_name(effect['effect_title'])\n        if effect_type is None:\n            logger.error(f\"Effect type not found for title: {effect['effect_title']}\")\n            raise CustomException(CustomError.EFFECT_NOT_FOUND)\n        \n        # 2. 创建时间范围\n        effect_duration = effect['end'] - effect['start']\n        timerange = Timerange(start=effect['start'], duration=effect_duration)\n        \n        # 3. 创建特效片段\n        effect_segment = EffectSegment(\n            effect_type=effect_type,\n            target_timerange=timerange\n        )\n        \n        logger.info(f\"Created effect segment, effect_id: {effect_segment.effect_inst.global_id}\")\n        logger.info(f\"Effect segment details - start: {effect['start']}, duration: {effect_duration}, title: {effect['effect_title']}\")\n\n        # 4. 向指定轨道添加片段\n        script.add_segment(effect_segment, track_name)\n\n        return effect_segment.segment_id, effect_segment.effect_inst.global_id\n        \n    except CustomException:\n        logger.error(f\"Add effect to draft failed, effect: {effect}\")\n        raise\n    except Exception as e:\n        logger.error(f\"Add effect to draft failed, error: {str(e)}\")\n        raise CustomException(CustomError.EFFECT_ADD_FAILED)\n\n\ndef find_effect_type_by_name(effect_title: str) -> Optional[Union[VideoSceneEffectType, VideoCharacterEffectType]]:\n    \"\"\"\n    根据特效名称查找对应的特效类型\n    \n    Args:\n        effect_title: 特效名称/标题\n    \n    Returns:\n        对应的特效类型枚举，如果未找到则返回None\n    \"\"\"\n    logger.info(f\"Searching for effect type with title: {effect_title}\")\n    \n    # 搜索VideoSceneEffectType中的特效\n    for effect_type in VideoSceneEffectType:\n        if effect_type.value.name == effect_title:\n            logger.info(f\"Found scene effect: {effect_title}\")\n            return effect_type\n    \n    # 搜索VideoCharacterEffectType中的特效\n    for effect_type in VideoCharacterEffectType:\n        if effect_type.value.name == effect_title:\n            logger.info(f\"Found character effect: {effect_title}\")\n            return effect_type\n    \n    logger.warning(f\"Effect type not found for title: {effect_title}\")\n    return None\n\n\ndef parse_effects_data(json_str: str) -> List[Dict[str, Any]]:\n    \"\"\"\n    解析特效数据的JSON字符串，验证必选字段和数值范围\n    \n    Args:\n        json_str: 包含特效数据的JSON字符串，格式如下：\n        [\n            {\n                \"effect_title\": \"录制边框 III\",  # [必选] 特效名称/标题\n                \"start\": 0,  # [必选] 特效开始时间（微秒）\n                \"end\": 5000000  # [必选] 特效结束时间（微秒）\n            }\n        ]\n    \n    Returns:\n        包含特效对象的数组，每个对象都验证过格式和范围\n    \n    Raises:\n        CustomException: 当JSON格式错误或缺少必选字段时抛出\n    \"\"\"\n    try:\n        # 解析JSON字符串\n        data = json.loads(json_str)\n    except json.JSONDecodeError as e:\n        logger.error(f\"JSON parse error: {e.msg}\")\n        raise CustomException(CustomError.INVALID_EFFECT_INFO, f\"JSON parse error: {e.msg}\")\n    \n    # 确保输入是列表\n    if not isinstance(data, list):\n        logger.error(\"effect_infos should be a list\")\n        raise CustomException(CustomError.INVALID_EFFECT_INFO, \"effect_infos should be a list\")\n    \n    result = []\n    \n    for i, item in enumerate(data):\n        if not isinstance(item, dict):\n            logger.error(f\"the {i}th item should be a dict\")\n            raise CustomException(CustomError.INVALID_EFFECT_INFO, f\"the {i}th item should be a dict\")\n        \n        # 检查必选字段\n        required_fields = [\"effect_title\", \"start\", \"end\"]\n        missing_fields = [field for field in required_fields if field not in item]\n        \n        if missing_fields:\n            logger.error(f\"the {i}th item is missing required fields: {', '.join(missing_fields)}\")\n            raise CustomException(CustomError.INVALID_EFFECT_INFO, f\"the {i}th item is missing required fields: {', '.join(missing_fields)}\")\n        \n        # 创建处理后的对象\n        processed_item = {\n            \"effect_title\": str(item[\"effect_title\"]),\n            \"start\": item[\"start\"],\n            \"end\": item[\"end\"]\n        }\n        \n        # 验证数值类型和范围\n        if not isinstance(processed_item[\"start\"], (int, float)) or processed_item[\"start\"] < 0:\n            logger.error(f\"the {i}th item has invalid start time: {processed_item['start']}\")\n            raise CustomException(CustomError.INVALID_EFFECT_INFO, f\"the {i}th item has invalid start time\")\n        \n        if not isinstance(processed_item[\"end\"], (int, float)) or processed_item[\"end\"] <= processed_item[\"start\"]:\n            logger.error(f\"the {i}th item has invalid end time: {processed_item['end']}\")\n            raise CustomException(CustomError.INVALID_EFFECT_INFO, f\"the {i}th item has invalid end time\")\n        \n        # 验证特效名称\n        if len(processed_item[\"effect_title\"].strip()) == 0:\n            logger.error(f\"the {i}th item has invalid effect_title: {processed_item['effect_title']}\")\n            raise CustomException(CustomError.INVALID_EFFECT_INFO, f\"the {i}th item has invalid effect_title\")\n        \n        # 将时间转换为整数（微秒）\n        processed_item[\"start\"] = int(processed_item[\"start\"])\n        processed_item[\"end\"] = int(processed_item[\"end\"])\n        \n        result.append(processed_item)\n    \n    logger.info(f\"Successfully parsed {len(result)} effect items\")\n    return result"
  },
  {
    "path": "src/service/add_filters.py",
    "content": "import json\nfrom typing import List, Dict, Any, Tuple, Optional\nimport asyncio\n\nfrom src.utils.logger import logger\nfrom src.pyJianYingDraft import ScriptFile, TrackType, FilterSegment, Timerange\nfrom src.pyJianYingDraft.metadata import FilterType\nfrom src.utils.draft_cache import DRAFT_CACHE\nfrom exceptions import CustomException, CustomError\nfrom src.utils import helper\nfrom src.utils.draft_lock_manager import DraftLockManager\n\n\ndef add_filters(\n    draft_url: str,\n    filter_infos: str\n) -> Tuple[str, str, List[str], List[str]]:\n    \"\"\"\n    添加滤镜到剪映草稿的业务逻辑\n    \n    Args:\n        draft_url: 草稿URL\n        filter_infos: 滤镜信息列表的JSON字符串，格式如下：\n            [\n                {\n                    \"filter_title\": \"复古\",  # 滤镜名称/标题，必选参数\n                    \"start\": 0,  # 滤镜开始时间（微秒），必选参数\n                    \"end\": 5000000,  # 滤镜结束时间（微秒），必选参数\n                    \"intensity\": 100  # 滤镜强度(0-100)，可选参数，默认100\n                }\n            ]\n    \n    Returns:\n        draft_url: 草稿URL\n        track_id: 滤镜轨道ID\n        filter_ids: 滤镜ID列表\n        segment_ids: 滤镜片段ID列表\n    \n    Raises:\n        CustomException: 滤镜添加失败\n    \"\"\"\n    logger.info(f\"add_filters started, draft_url: {draft_url}, filters count: {len(json.loads(filter_infos) if filter_infos else [])}\")\n\n    # 1. 提取草稿ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if (not draft_id) or (draft_id not in DRAFT_CACHE):\n        logger.error(f\"Invalid draft_url or draft not found in cache: {draft_url}\")\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    # 2. 解析滤镜信息\n    filter_items = parse_filters_data(json_str=filter_infos)\n    if len(filter_items) == 0:\n        logger.info(f\"No filter info provided, draft_id: {draft_id}\")\n        raise CustomException(CustomError.INVALID_FILTER_INFO)\n\n    logger.info(f\"Parsed {len(filter_items)} filter items\")\n\n    # 3. 从缓存中获取草稿\n    script: ScriptFile = DRAFT_CACHE[draft_id]\n\n    # 4. 添加滤镜轨道（按全局接口调用顺序叠层，与 add_videos / add_images / add_captions 等一致）\n    track_name = f\"filter_track_{helper.gen_unique_id()}\"\n    script.add_track_ordered(track_type=TrackType.filter, track_name=track_name)\n    logger.info(f\"Added filter track: {track_name}\")\n\n    # 5. 遍历滤镜信息，添加滤镜到草稿中的指定轨道，收集片段ID\n    segment_ids = []\n    filter_ids = []\n    for i, filter_item in enumerate(filter_items):\n        try:\n            logger.info(f\"Processing filter {i+1}/{len(filter_items)}, title: {filter_item['filter_title']}\")\n            \n            segment_id, filter_id = add_filter_to_draft(\n                script, track_name, filter_item=filter_item\n            )\n            segment_ids.append(segment_id)\n            filter_ids.append(filter_id)\n            logger.info(f\"Added filter {i+1}/{len(filter_items)}, segment_id: {segment_id}\")\n        except Exception as e:\n            logger.error(f\"Failed to add filter {i+1}/{len(filter_items)}, error: {str(e)}\")\n            raise\n\n    # 6. 保存草稿\n    script.save()\n    logger.info(\"Draft saved successfully\")\n\n    # 7. 获取当前滤镜轨道ID\n    track_id = \"\"\n    for key in script.tracks.keys():\n        if script.tracks[key].name == track_name:\n            track_id = script.tracks[key].track_id\n            break\n    logger.info(f\"Filter track created, draft_id: {draft_id}, track_id: {track_id}\")\n\n    logger.info(f\"add_filters completed successfully - draft_id: {draft_id}, track_id: {track_id}, filters_added: {len(filter_items)}\")\n    \n    return draft_url, track_id, filter_ids, segment_ids\n\n\nasync def add_filters_async(\n    draft_url: str,\n    filter_infos: str,\n    lock_timeout: float = 30.0\n) -> Tuple[str, str, List[str], List[str]]:\n    \"\"\"\n    添加滤镜到剪映草稿的异步版本（带并发锁保护）\n    \n    功能：\n    1. 使用 DraftLockManager 防止同一草稿的并发写操作\n    2. 支持超时控制，避免无限等待\n    3. 自动释放锁，即使发生异常\n    \n    Args:\n        draft_url: 草稿 URL，格式：\".../get_draft?draft_id=xxx\"\n        filter_infos: JSON 字符串，包含滤镜信息列表，详见 add_filters 函数\n        lock_timeout: 获取锁的超时时间（秒），默认 30 秒\n    \n    Returns:\n        tuple: (draft_url, track_id, filter_ids, segment_ids)\n    \n    Raises:\n        CustomException: 滤镜添加失败或获取锁超时\n        asyncio.TimeoutError: 等待锁超时时抛出\n    \n    Example:\n        >>> result = await add_filters_async(\n        ...     draft_url=\"http://.../draft_id=123\",\n        ...     filter_infos='[{\"filter_title\":\"复古\", \"start\":0, \"end\":5000000}]'\n        ... )\n    \"\"\"\n    # 提取草稿 ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if not draft_id:\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n    \n    # 获取锁管理器\n    lock_manager = DraftLockManager()\n    \n    # 尝试获取锁\n    try:\n        await lock_manager.acquire_lock(draft_id, timeout=lock_timeout)\n        logger.info(f\"Lock acquired for draft_id: {draft_id}\")\n    except asyncio.TimeoutError:\n        logger.error(f\"Timeout waiting for lock on draft_id: {draft_id}\")\n        raise CustomException(\n            CustomError.DRAFT_LOCK_TIMEOUT,\n            f\"Failed to acquire lock for draft {draft_id} within {lock_timeout}s\"\n        )\n    \n    try:\n        # 调用内部处理函数（不获取锁，由外层控制）\n        return add_filters(\n            draft_url=draft_url,\n            filter_infos=filter_infos\n        )\n    finally:\n        # 释放锁\n        await lock_manager.release_lock(draft_id)\n        logger.info(f\"Lock released for draft_id: {draft_id}\")\n\n\ndef add_filter_to_draft(\n    script: ScriptFile,\n    track_name: str,\n    filter_item: dict\n) -> Tuple[str, str]:\n    \"\"\"\n    向剪映草稿中添加单个滤镜\n    \n    Args:\n        script: 草稿文件对象\n        track_name: 滤镜轨道名称\n        filter_item: 滤镜信息字典，包含以下字段：\n            filter_title: 滤镜名称/标题\n            start: 滤镜开始时间（微秒）\n            end: 滤镜结束时间（微秒）\n            intensity: 滤镜强度(0-100)，可选，默认100\n    \n    Returns:\n        segment_id: 片段ID\n        filter_id: 滤镜ID（material_id）\n    \n    Raises:\n        CustomException: 添加滤镜失败\n    \"\"\"\n    try:\n        # 1. 查找滤镜类型\n        filter_type = find_filter_type_by_name(filter_item['filter_title'])\n        if filter_type is None:\n            logger.error(f\"Filter type not found for title: {filter_item['filter_title']}\")\n            raise CustomException(CustomError.FILTER_NOT_FOUND)\n        \n        # 2. 创建时间范围\n        filter_duration = filter_item['end'] - filter_item['start']\n        timerange = Timerange(start=filter_item['start'], duration=filter_duration)\n        \n        # 3. 获取滤镜强度（默认100）\n        intensity = filter_item.get('intensity', 100.0)\n        \n        # 4. 创建滤镜片段\n        filter_segment = FilterSegment(\n            meta=filter_type,\n            target_timerange=timerange,\n            intensity=intensity / 100.0  # 转换为0-1范围\n        )\n        \n        logger.info(f\"Created filter segment, filter_id: {filter_segment.material.global_id}\")\n        logger.info(f\"Filter segment details - start: {filter_item['start']}, duration: {filter_duration}, title: {filter_item['filter_title']}, intensity: {intensity}\")\n\n        # 5. 向指定轨道添加片段\n        script.add_segment(filter_segment, track_name)\n\n        return filter_segment.segment_id, filter_segment.material.global_id\n        \n    except CustomException:\n        logger.error(f\"Add filter to draft failed, filter: {filter_item}\")\n        raise\n    except Exception as e:\n        logger.error(f\"Add filter to draft failed, error: {str(e)}\")\n        raise CustomException(CustomError.FILTER_ADD_FAILED)\n\n\ndef find_filter_type_by_name(filter_title: str) -> Optional[FilterType]:\n    \"\"\"\n    根据滤镜名称查找对应的滤镜类型\n    \n    Args:\n        filter_title: 滤镜名称/标题\n    \n    Returns:\n        对应的滤镜类型枚举，如果未找到则返回None\n    \"\"\"\n    logger.info(f\"Searching for filter type with title: {filter_title}\")\n    \n    # 搜索FilterType中的滤镜\n    for filter_type in FilterType:\n        if filter_type.value.name == filter_title:\n            logger.info(f\"Found filter: {filter_title}\")\n            return filter_type\n    \n    logger.warning(f\"Filter type not found for title: {filter_title}\")\n    return None\n\n\ndef parse_filters_data(json_str: str) -> List[Dict[str, Any]]:\n    \"\"\"\n    解析滤镜数据的JSON字符串，验证必选字段和数值范围\n    \n    Args:\n        json_str: 包含滤镜数据的JSON字符串，格式如下：\n        [\n            {\n                \"filter_title\": \"复古\",  # [必选] 滤镜名称/标题\n                \"start\": 0,  # [必选] 滤镜开始时间（微秒）\n                \"end\": 5000000,  # [必选] 滤镜结束时间（微秒）\n                \"intensity\": 100  # [可选] 滤镜强度(0-100)，默认100\n            }\n        ]\n    \n    Returns:\n        包含滤镜对象的数组，每个对象都验证过格式和范围\n    \n    Raises:\n        CustomException: 当JSON格式错误或缺少必选字段时抛出\n    \"\"\"\n    try:\n        # 解析JSON字符串\n        data = json.loads(json_str)\n    except json.JSONDecodeError as e:\n        logger.error(f\"JSON parse error: {e.msg}\")\n        raise CustomException(CustomError.INVALID_FILTER_INFO, f\"JSON parse error: {e.msg}\")\n    \n    # 确保输入是列表\n    if not isinstance(data, list):\n        logger.error(\"filter_infos should be a list\")\n        raise CustomException(CustomError.INVALID_FILTER_INFO, \"filter_infos should be a list\")\n    \n    result = []\n    \n    for i, item in enumerate(data):\n        if not isinstance(item, dict):\n            logger.error(f\"the {i}th item should be a dict\")\n            raise CustomException(CustomError.INVALID_FILTER_INFO, f\"the {i}th item should be a dict\")\n        \n        # 检查必选字段\n        required_fields = [\"filter_title\", \"start\", \"end\"]\n        missing_fields = [field for field in required_fields if field not in item]\n        \n        if missing_fields:\n            logger.error(f\"the {i}th item is missing required fields: {', '.join(missing_fields)}\")\n            raise CustomException(CustomError.INVALID_FILTER_INFO, f\"the {i}th item is missing required fields: {', '.join(missing_fields)}\")\n        \n        # 创建处理后的对象\n        processed_item = {\n            \"filter_title\": str(item[\"filter_title\"]),\n            \"start\": item[\"start\"],\n            \"end\": item[\"end\"],\n            \"intensity\": item.get(\"intensity\", 100.0)  # 默认强度为100\n        }\n        \n        # 验证数值类型和范围\n        if not isinstance(processed_item[\"start\"], (int, float)) or processed_item[\"start\"] < 0:\n            logger.error(f\"the {i}th item has invalid start time: {processed_item['start']}\")\n            raise CustomException(CustomError.INVALID_FILTER_INFO, f\"the {i}th item has invalid start time\")\n        \n        if not isinstance(processed_item[\"end\"], (int, float)) or processed_item[\"end\"] <= processed_item[\"start\"]:\n            logger.error(f\"the {i}th item has invalid end time: {processed_item['end']}\")\n            raise CustomException(CustomError.INVALID_FILTER_INFO, f\"the {i}th item has invalid end time\")\n        \n        # 验证滤镜名称\n        if len(processed_item[\"filter_title\"].strip()) == 0:\n            logger.error(f\"the {i}th item has invalid filter_title: {processed_item['filter_title']}\")\n            raise CustomException(CustomError.INVALID_FILTER_INFO, f\"the {i}th item has invalid filter_title\")\n        \n        # 验证强度范围\n        if not isinstance(processed_item[\"intensity\"], (int, float)) or processed_item[\"intensity\"] < 0 or processed_item[\"intensity\"] > 100:\n            logger.error(f\"the {i}th item has invalid intensity: {processed_item['intensity']}\")\n            raise CustomException(CustomError.INVALID_FILTER_INFO, f\"the {i}th item has invalid intensity (must be 0-100)\")\n        \n        # 将时间转换为整数（微秒）\n        processed_item[\"start\"] = int(processed_item[\"start\"])\n        processed_item[\"end\"] = int(processed_item[\"end\"])\n        processed_item[\"intensity\"] = float(processed_item[\"intensity\"])\n        \n        result.append(processed_item)\n    \n    logger.info(f\"Successfully parsed {len(result)} filter items\")\n    return result\n"
  },
  {
    "path": "src/service/add_images.py",
    "content": "from src.utils.logger import logger\nfrom src.pyJianYingDraft import ScriptFile, trange\nimport src.pyJianYingDraft as draft\nfrom src.utils.draft_cache import DRAFT_CACHE\nfrom exceptions import CustomException, CustomError\nfrom src.schemas.add_images import SegmentInfo\nimport os\nfrom src.utils import helper\nfrom src.utils.download import download\nimport config\nimport json\nimport asyncio\nimport time\nfrom typing import List, Dict, Any, Tuple, Optional\nfrom src.utils.draft_lock_manager import DraftLockManager\n\nfrom src.pyJianYingDraft.metadata import IntroType, OutroType, GroupAnimationType, TransitionType\n\n\ndef add_images(\n    draft_url: str, \n    image_infos: str,\n    alpha: float = 1.0, \n    scale_x: float = 1.0, \n    scale_y: float = 1.0, \n    transform_x: int = 0, \n    transform_y: int = 0\n) -> Tuple[str, str, List[str], List[str], List[SegmentInfo]]:\n    \"\"\"\n    添加图片到剪映草稿的业务逻辑\n    \n    Args:\n        draft_url: 草稿URL，必选参数\n        image_infos: 图片信息JSON字符串，格式如下：\n        [\n            {\n                \"image_url\": \"https://s.coze.cn/t/XpufYwc2_u4/\", // [必选] 图片文件URL\n                \"width\": 1920, // [可选] 图片宽度(像素)，不传则使用草稿画布尺寸\n                \"height\": 1080, // [可选] 图片高度(像素)，不传则使用草稿画布尺寸\n                \"start\": 0, // [必选] 显示开始时间(微秒)\n                \"end\": 1000000, // [必选] 显示结束时间(微秒)\n                \"in_animation\": \"\", // [可选] 入场动画类型\n                \"out_animation\": \"\", // [可选] 出场动画类型\n                \"loop_animation\": \"\", // [可选] 循环动画类型\n                \"in_animation_duration\": \"\", // [可选] 入场动画时长(微秒)\n                \"out_animation_duration\": \"\", // [可选] 出场动画时长(微秒)\n                \"loop_animation_duration\": \"\", // [可选] 循环动画时长(微秒)\n                \"transition\": \"\", // [可选] 转场效果类型\n                \"transition_duration\": 500000 // [可选] 转场效果时长(微秒，范围100000-2500000)\n            }\n        ]\n        alpha: 全局透明度[0, 1]，默认值为1.0\n        scale_x: X轴缩放比例，默认值为1.0\n        scale_y: Y轴缩放比例，默认值为1.0\n        transform_x: X轴位置偏移(像素)，默认值为0\n        transform_y: Y轴位置偏移(像素)，默认值为0\n    \n    Returns:\n        draft_url: 草稿URL\n        track_id: 图片轨道ID（非主轨道）\n        image_ids: 图片ID列表\n        segment_ids: 片段ID列表\n        segment_infos: 片段信息列表，包含每个片段的ID、开始时间和结束时间\n\n    Raises:\n        CustomException: 图片批量添加失败\n    \"\"\"\n    return _add_images_internal(\n        draft_url=draft_url,\n        image_infos=image_infos,\n        alpha=alpha,\n        scale_x=scale_x,\n        scale_y=scale_y,\n        transform_x=transform_x,\n        transform_y=transform_y,\n        prepared_images=None,\n    )\n\n\ndef _prepare_images_local_files(draft_url: str, image_infos: str) -> List[Dict[str, Any]]:\n    \"\"\"\n    校验草稿、解析 image_infos 并下载素材到草稿目录。\n    不修改 ScriptFile，可在草稿写锁外调用。\n    \"\"\"\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if (not draft_id) or (draft_id not in DRAFT_CACHE):\n        logger.error(f\"Invalid draft URL or draft not found in cache, draft_id: {draft_id}\")\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    draft_dir = os.path.join(config.DRAFT_DIR, draft_id)\n    draft_image_dir = os.path.join(draft_dir, \"assets\", \"images\")\n    os.makedirs(name=draft_image_dir, exist_ok=True)\n    logger.info(f\"Created image directory: {draft_image_dir}\")\n\n    images = parse_image_data(json_str=image_infos)\n    if len(images) == 0:\n        logger.error(f\"No image info provided, draft_id: {draft_id}\")\n        raise CustomException(CustomError.INVALID_IMAGE_INFO)\n\n    for image in images:\n        image[\"local_image_path\"] = download(url=image[\"image_url\"], save_dir=draft_image_dir)\n\n    return images\n\n\ndef _add_images_internal(\n    draft_url: str,\n    image_infos: str,\n    alpha: float = 1.0,\n    scale_x: float = 1.0,\n    scale_y: float = 1.0,\n    transform_x: int = 0,\n    transform_y: int = 0,\n    prepared_images: Optional[List[Dict[str, Any]]] = None,\n) -> Tuple[str, str, List[str], List[str], List[SegmentInfo]]:\n    logger.info(\n        f\"add_images started, draft_url: {draft_url}, alpha: {alpha}, scale_x: {scale_x}, \"\n        f\"scale_y: {scale_y}, transform_x: {transform_x}, transform_y: {transform_y}\"\n    )\n\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if (not draft_id) or (draft_id not in DRAFT_CACHE):\n        logger.error(f\"Invalid draft URL or draft not found in cache, draft_id: {draft_id}\")\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    draft_dir = os.path.join(config.DRAFT_DIR, draft_id)\n    draft_image_dir = os.path.join(draft_dir, \"assets\", \"images\")\n    os.makedirs(name=draft_image_dir, exist_ok=True)\n    logger.info(f\"Using image directory: {draft_image_dir}\")\n\n    if prepared_images is not None:\n        images = prepared_images\n    else:\n        images = parse_image_data(json_str=image_infos)\n        if len(images) == 0:\n            logger.error(f\"No image info provided, draft_id: {draft_id}\")\n            raise CustomException(CustomError.INVALID_IMAGE_INFO)\n\n    logger.info(f\"Using {len(images)} image items\")\n\n    script: ScriptFile = DRAFT_CACHE[draft_id]\n\n    track_name = f\"image_track_{helper.gen_unique_id()}\"\n    # 与 add_videos / add_captions / add_filters 等一致：按全局接口调用顺序叠层（后调用在上）\n    script.add_track_ordered(track_type=draft.TrackType.video, track_name=track_name)\n    logger.info(f\"Added image track (non-main track): {track_name}\")\n\n    segment_ids = []\n    segment_infos = []\n    for i, image in enumerate(images):\n        try:\n            segment_id, segment_info = add_image_to_draft(\n                script, track_name,\n                draft_image_dir=draft_image_dir,\n                image=image,\n                alpha=alpha,\n                scale_x=scale_x,\n                scale_y=scale_y,\n                transform_x=transform_x,\n                transform_y=transform_y,\n            )\n            segment_ids.append(segment_id)\n            segment_infos.append(segment_info)\n            logger.info(f\"Added image {i+1}/{len(images)}, segment_id: {segment_id}\")\n        except Exception as e:\n            logger.error(f\"Failed to add image {i+1}/{len(images)}, error: {str(e)}\")\n            raise\n\n    script.save()\n    logger.info(f\"Draft saved successfully\")\n\n    track_id = \"\"\n    for key in script.tracks.keys():\n        if script.tracks[key].name == track_name:\n            track_id = script.tracks[key].track_id\n            break\n    logger.info(f\"Image track created, draft_id: {draft_id}, track_id: {track_id}\")\n\n    image_ids = [video.material_id for video in script.materials.videos if video.material_type == \"photo\"]\n    logger.info(f\"Image track completed, draft_id: {draft_id}, image_ids: {image_ids}\")\n\n    return draft_url, track_id, image_ids, segment_ids, segment_infos\n\n\nasync def add_images_async(\n    draft_url: str,\n    image_infos: str,\n    alpha: float = 1.0,\n    scale_x: float = 1.0,\n    scale_y: float = 1.0,\n    transform_x: int = 0,\n    transform_y: int = 0,\n    lock_timeout: float = 30.0\n) -> Tuple[str, str, List[str], List[str], List[SegmentInfo]]:\n    \"\"\"\n    添加图片到剪映草稿的异步版本（带并发锁保护）\n    \n    功能：\n    1. 使用 DraftLockManager 防止同一草稿的并发写操作\n    2. 支持超时控制，避免无限等待\n    3. 自动释放锁，即使发生异常\n    4. 图片下载在获取锁之前完成，持锁阶段仅修改草稿与写盘\n    \n    Args:\n        draft_url: 草稿 URL，格式：\".../get_draft?draft_id=xxx\"\n        image_infos: JSON 字符串，包含图片信息列表，详见 add_images 函数\n        alpha: 全局透明度 [0, 1]，默认 1.0\n        scale_x: X 轴缩放比例，默认 1.0\n        scale_y: Y 轴缩放比例，默认 1.0\n        transform_x: X 轴位置偏移（像素），默认 0\n        transform_y: Y 轴位置偏移（像素），默认 0\n        lock_timeout: 获取锁的超时时间（秒），默认 30 秒\n    \n    Returns:\n        tuple: (draft_url, track_id, image_ids, segment_ids, segment_infos)\n    \n    Raises:\n        CustomException: 图片添加失败，或 `DRAFT_LOCK_TIMEOUT`（获取写锁超时）\n    \n    Example:\n        >>> result = await add_images_async(\n        ...     draft_url=\"http://.../draft_id=123\",\n        ...     image_infos='[{\"image_url\":\"...\", \"width\":1024, \"height\":1024, \"start\":0, \"end\":5000000}]'\n        ... )\n    \"\"\"\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if not draft_id:\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    logger.info(f\"[flow:add_images] prep_start, draft_id: {draft_id}\")\n    # 下载与预处理放到线程池，避免阻塞事件循环导致锁超时漂移\n    prep_started_at = time.monotonic()\n    prepared_images = await asyncio.to_thread(\n        _prepare_images_local_files,\n        draft_url,\n        image_infos,\n    )\n    logger.info(\n        f\"[flow:add_images] prep_done, draft_id: {draft_id}, \"\n        f\"count: {len(prepared_images)}, elapsed: {time.monotonic() - prep_started_at:.3f}s\"\n    )\n\n    lock_manager = DraftLockManager()\n\n    logger.info(f\"[flow:add_images] lock_wait_start, draft_id: {draft_id}, timeout: {lock_timeout}s\")\n    try:\n        await lock_manager.acquire_lock(draft_id, timeout=lock_timeout)\n        logger.info(f\"[flow:add_images] lock_acquired, draft_id: {draft_id}\")\n    except asyncio.TimeoutError:\n        logger.error(f\"Timeout waiting for lock on draft_id: {draft_id}\")\n        raise CustomException(\n            CustomError.DRAFT_LOCK_TIMEOUT,\n            f\"Failed to acquire lock for draft {draft_id} within {lock_timeout}s\",\n        )\n\n    try:\n        return _add_images_internal(\n            draft_url=draft_url,\n            image_infos=image_infos,\n            alpha=alpha,\n            scale_x=scale_x,\n            scale_y=scale_y,\n            transform_x=transform_x,\n            transform_y=transform_y,\n            prepared_images=prepared_images,\n        )\n    finally:\n        await lock_manager.release_lock(draft_id)\n        logger.info(f\"[flow:add_images] lock_released, draft_id: {draft_id}\")\n\n\ndef add_image_to_draft(\n    script: ScriptFile,\n    track_name: str,\n    draft_image_dir: str,\n    image: dict,\n    alpha: float = 1.0, \n    scale_x: float = 1.0, \n    scale_y: float = 1.0, \n    transform_x: int = 0, \n    transform_y: int = 0\n) -> Tuple[str, SegmentInfo]:\n    \"\"\"\n    向剪映草稿中添加单个图片\n    \n    Args:\n        script: 草稿文件对象\n        track_name: 视频轨道名称\n        draft_image_dir: 图片资源目录\n        image: 图片信息字典，包含以下字段：\n            image_url: 图片URL\n            width: 图片宽度(像素，可选，不传则使用草稿画布尺寸)\n            height: 图片高度(像素，可选，不传则使用草稿画布尺寸)\n            start: 显示开始时间(微秒)\n            end: 显示结束时间(微秒)\n            in_animation: 入场动画类型(可选)\n            out_animation: 出场动画类型(可选)\n            loop_animation: 循环动画类型(可选)\n            in_animation_duration: 入场动画时长(微秒，可选)\n            out_animation_duration: 出场动画时长(微秒，可选)\n            loop_animation_duration: 循环动画时长(微秒，可选)\n            transition: 转场效果类型(可选)\n            transition_duration: 转场效果时长(微秒，可选)\n        alpha: 图片透明度\n        scale_x: 横向缩放\n        scale_y: 纵向缩放\n        transform_x: X轴位置偏移(像素)\n        transform_y: Y轴位置偏移(像素)\n    \n    Returns:\n        segment_id: 片段ID\n        segment_info: 片段信息字典，包含id、start、end\n    \n    Raises:\n        CustomException: 添加图片失败\n    \"\"\"\n    try:\n        image_path = image.get(\"local_image_path\")\n        if image_path:\n            if not os.path.isfile(image_path):\n                raise CustomException(CustomError.IMAGE_ADD_FAILED, f\"Missing local file: {image_path}\")\n            logger.info(f\"Using local image: {image_path}\")\n        else:\n            image_path = download(url=image[\"image_url\"], save_dir=draft_image_dir)\n            logger.info(f\"Downloaded image from {image['image_url']} to {image_path}\")\n\n        # 2. 创建图片素材并添加到草稿\n        segment_duration = image['end'] - image['start']\n                \n        # 获取草稿的宽高用于transform坐标转换\n        draft_width = script.width\n        draft_height = script.height\n        image_width = int(image.get(\"width\") or draft_width)\n        image_height = int(image.get(\"height\") or draft_height)\n        logger.info(\n            f\"draft size: {draft_width}x{draft_height}, image size: {image_width}x{image_height}, \"\n            f\"transform_x: {transform_x}, transform_y: {transform_y}\"\n        )\n                \n        # 创建图像调节设置\n        clip_settings = draft.ClipSettings(\n            alpha=alpha,\n            scale_x=scale_x,\n            scale_y=scale_y,\n            transform_x=transform_x / draft_width,  # 转为半画布宽单位\n            transform_y=transform_y / draft_height  # 转换为半画布高单位\n        )\n        \n        # 创建视频片段（图片使用VideoSegment）\n        video_segment = draft.VideoSegment(\n            material=image_path,\n            target_timerange=trange(start=image['start'], duration=segment_duration),\n            clip_settings=clip_settings\n        )\n        \n        # 3. 添加动画效果（如果指定了）\n        if image.get('in_animation'):\n            try:\n                in_duration = image.get('in_animation_duration')\n                if in_duration is not None and in_duration != \"\":\n                    in_duration = int(in_duration)\n                else:\n                    in_duration = None\n                \n                intro_enum = map_video_animation_name_to_enum(image['in_animation'], 'in')\n                if intro_enum:\n                    video_segment.add_animation(intro_enum, duration=in_duration)\n                    logger.info(f\"Successfully added in animation '{image['in_animation']}' to image segment\")\n                else:\n                    logger.warning(f\"In animation '{image['in_animation']}' not found in available animations\")\n            except Exception as e:\n                logger.warning(f\"Failed to add in animation '{image['in_animation']}': {str(e)}\")\n        \n        if image.get('out_animation'):\n            try:\n                out_duration = image.get('out_animation_duration')\n                if out_duration is not None and out_duration != \"\":\n                    out_duration = int(out_duration)\n                else:\n                    out_duration = None\n                \n                outro_enum = map_video_animation_name_to_enum(image['out_animation'], 'out')\n                if outro_enum:\n                    video_segment.add_animation(outro_enum, duration=out_duration)\n                    logger.info(f\"Successfully added out animation '{image['out_animation']}' to image segment\")\n                else:\n                    logger.warning(f\"Out animation '{image['out_animation']}' not found in available animations\")\n            except Exception as e:\n                logger.warning(f\"Failed to add out animation '{image['out_animation']}': {str(e)}\")\n        \n        # 注意：对于图片，循环动画通常不适用，所以这里处理为组合动画\n        if image.get('loop_animation'):\n            try:\n                group_duration = image.get('loop_animation_duration')\n                if group_duration is not None and group_duration != \"\":\n                    group_duration = int(group_duration)\n                else:\n                    group_duration = None\n                \n                group_enum = map_video_animation_name_to_enum(image['loop_animation'], 'group')\n                if group_enum:\n                    video_segment.add_animation(group_enum, duration=group_duration)\n                    logger.info(f\"Successfully added group animation '{image['loop_animation']}' to image segment\")\n                else:\n                    logger.warning(f\"Group animation '{image['loop_animation']}' not found in available animations\")\n            except Exception as e:\n                logger.warning(f\"Failed to add group animation '{image['loop_animation']}': {str(e)}\")\n        \n        # 4. 添加转场效果（如果指定了）\n        if image.get('transition'):\n            try:\n                # 遍历TransitionType中的所有转场效果\n                transition_enum = None\n                for attr_name in dir(TransitionType):\n                    attr = getattr(TransitionType, attr_name)\n                    if isinstance(attr, TransitionType) and attr.value.name == image['transition']:\n                        transition_enum = attr\n                        break\n                \n                if transition_enum:\n                    transition_duration = image.get('transition_duration')\n                    if transition_duration is not None:\n                        transition_duration = int(transition_duration)\n                    video_segment.add_transition(transition_enum, duration=transition_duration)\n                    logger.info(f\"Successfully added transition '{image['transition']}' to image segment\")\n                else:\n                    logger.warning(f\"Transition '{image['transition']}' not found in available transitions\")\n            except Exception as e:\n                logger.warning(f\"Failed to add transition '{image['transition']}': {str(e)}\")\n\n        logger.info(f\"Created image segment, material_id: {video_segment.material_instance.material_id}\")\n        logger.info(f\"Image segment details - start: {image['start']}, duration: {segment_duration}, size: {image_width}x{image_height}\")\n\n        # 5. 向指定轨道添加片段\n        script.add_segment(video_segment, track_name)\n\n        # 6. 构造片段信息\n        segment_info = SegmentInfo(\n            id=video_segment.segment_id,\n            start=image['start'],\n            end=image['end']\n        )\n\n        return video_segment.segment_id, segment_info\n        \n    except CustomException:\n        logger.error(f\"Add image to draft failed, draft_image_dir: {draft_image_dir}, image: {image}\")\n        raise\n    except Exception as e:\n        logger.error(f\"Add image to draft failed, error: {str(e)}\")\n        raise CustomException(err=CustomError.IMAGE_ADD_FAILED)\n\n\ndef map_video_animation_name_to_enum(animation_name: str, animation_type: str):\n    \"\"\"\n    将视频动画名称字符串映射到对应的枚举值\n    \n    Args:\n        animation_name: 动画名称字符串\n        animation_type: 动画类型 (\"in\", \"out\", \"group\")\n    \n    Returns:\n        对应的动画枚举值，如果未找到则返回None\n    \"\"\"\n    # 入场动画映射\n    in_animation_map = {}\n    for attr_name in dir(IntroType):\n        attr = getattr(IntroType, attr_name)\n        if isinstance(attr, IntroType):\n            in_animation_map[attr.value.title] = attr\n    \n    # 出场动画映射\n    out_animation_map = {}\n    for attr_name in dir(OutroType):\n        attr = getattr(OutroType, attr_name)\n        if isinstance(attr, OutroType):\n            out_animation_map[attr.value.title] = attr\n    \n    # 组合动画映射\n    group_animation_map = {}\n    for attr_name in dir(GroupAnimationType):\n        attr = getattr(GroupAnimationType, attr_name)\n        if isinstance(attr, GroupAnimationType):\n            group_animation_map[attr.value.title] = attr\n    \n    if animation_type == \"in\":\n        return in_animation_map.get(animation_name)\n    elif animation_type == \"out\":\n        return out_animation_map.get(animation_name)\n    elif animation_type == \"group\":\n        return group_animation_map.get(animation_name)\n    \n    return None\n\n\ndef parse_image_data(json_str: str) -> List[Dict[str, Any]]:\n    \"\"\"\n    解析图片数据的JSON字符串，处理可选字段的默认值\n    \n    Args:\n        json_str: 包含图片数据的JSON字符串，格式如下：\n        [\n            {\n                \"image_url\": \"https://s.coze.cn/t/XpufYwc2_u4/\", // [必选] 图片文件URL\n                \"width\": 1920, // [可选] 图片宽度(像素)，不传则使用草稿画布尺寸\n                \"height\": 1080, // [可选] 图片高度(像素)，不传则使用草稿画布尺寸\n                \"start\": 0, // [必选] 显示开始时间(微秒)\n                \"end\": 1000000, // [必选] 显示结束时间(微秒)\n                \"in_animation\": \"\", // [可选] 入场动画类型\n                \"out_animation\": \"\", // [可选] 出场动画类型\n                \"loop_animation\": \"\", // [可选] 循环动画类型\n                \"in_animation_duration\": \"\", // [可选] 入场动画时长(微秒)\n                \"out_animation_duration\": \"\", // [可选] 出场动画时长(微秒)\n                \"loop_animation_duration\": \"\", // [可选] 循环动画时长(微秒)\n                \"transition\": \"\", // [可选] 转场效果类型\n                \"transition_duration\": 500000 // [可选] 转场效果时长(微秒，范围100000-2500000)\n            }\n        ]\n        \n    Returns:\n        包含图片对象的数组，每个对象都处理了默认值\n        \n    Raises:\n        CustomException: 当JSON格式错误或缺少必选字段时抛出\n    \"\"\"\n    try:\n        # 解析JSON字符串\n        data = json.loads(json_str)\n        logger.info(f\"Successfully parsed JSON with {len(data) if isinstance(data, list) else 1} items\")\n    except json.JSONDecodeError as e:\n        logger.error(f\"JSON parse error: {e.msg}\")\n        raise CustomException(CustomError.INVALID_IMAGE_INFO, f\"JSON parse error: {e.msg}\")\n    \n    # 确保输入是列表\n    if not isinstance(data, list):\n        logger.error(\"Image infos should be a list\")\n        raise CustomException(CustomError.INVALID_IMAGE_INFO, \"image_infos should be a list\")\n    \n    result = []\n    \n    for i, item in enumerate(data):\n        if not isinstance(item, dict):\n            logger.error(f\"The {i}th item should be a dict\")\n            raise CustomException(CustomError.INVALID_IMAGE_INFO, f\"the {i}th item should be a dict\")\n        \n        # 检查必选字段（width/height 可选，未传时在 add_image_to_draft 中使用草稿画布尺寸）\n        required_fields = [\"image_url\", \"start\", \"end\"]\n        missing_fields = [field for field in required_fields if field not in item]\n        \n        if missing_fields:\n            logger.error(f\"The {i}th item is missing required fields: {', '.join(missing_fields)}\")\n            raise CustomException(CustomError.INVALID_IMAGE_INFO, f\"the {i}th item is missing required fields: {', '.join(missing_fields)}\")\n        \n        width = item.get(\"width\")\n        height = item.get(\"height\")\n        if width is not None:\n            width = int(width)\n        if height is not None:\n            height = int(height)\n        # 创建处理后的对象，设置默认值\n        processed_item = {\n            \"image_url\": item[\"image_url\"],\n            \"width\": width,\n            \"height\": height,\n            \"start\": int(item[\"start\"]),\n            \"end\": int(item[\"end\"]),\n            \"in_animation\": item.get(\"in_animation\", None),  # 默认无入场动画\n            \"out_animation\": item.get(\"out_animation\", None),  # 默认无出场动画\n            \"loop_animation\": item.get(\"loop_animation\", None),  # 默认无循环动画\n            \"in_animation_duration\": item.get(\"in_animation_duration\", None),  # 默认无入场动画时长\n            \"out_animation_duration\": item.get(\"out_animation_duration\", None),  # 默认无出场动画时长\n            \"loop_animation_duration\": item.get(\"loop_animation_duration\", None),  # 默认无循环动画时长\n            \"transition\": item.get(\"transition\", None),  # 默认无转场\n            \"transition_duration\": item.get(\"transition_duration\", 500000)  # 默认转场时长500000微秒\n        }\n        \n        # 验证数值范围（仅校验显式传入的尺寸）\n        if (processed_item[\"width\"] is not None and processed_item[\"width\"] <= 0) or (\n            processed_item[\"height\"] is not None and processed_item[\"height\"] <= 0\n        ):\n            logger.error(\n                f\"Invalid image dimensions: width={processed_item['width']}, height={processed_item['height']}\"\n            )\n            raise CustomException(CustomError.INVALID_IMAGE_INFO, f\"the {i}th item has invalid image dimensions\")\n        \n        if processed_item[\"start\"] < 0 or processed_item[\"end\"] <= processed_item[\"start\"]:\n            logger.error(f\"Invalid time range: start={processed_item['start']}, end={processed_item['end']}\")\n            raise CustomException(CustomError.INVALID_IMAGE_INFO, f\"the {i}th item has invalid time range\")\n        \n        # 验证转场时长范围\n        if processed_item[\"transition_duration\"] < 100000 or processed_item[\"transition_duration\"] > 2500000:\n            logger.warning(f\"Transition duration {processed_item['transition_duration']} out of range [100000, 2500000], using default 500000\")\n            processed_item[\"transition_duration\"] = 500000\n        \n        result.append(processed_item)\n        logger.debug(f\"Processed image item {i+1}: {processed_item}\")\n    \n    return result"
  },
  {
    "path": "src/service/add_keyframes.py",
    "content": "import json\nfrom typing import List, Dict, Any, Tuple, Optional\nimport asyncio\n\nfrom src.utils.logger import logger\nfrom src.pyJianYingDraft import ScriptFile\nfrom src.pyJianYingDraft.keyframe import KeyframeProperty\nfrom src.pyJianYingDraft.segment import VisualSegment\nfrom src.utils.draft_cache import DRAFT_CACHE\nfrom exceptions import CustomException, CustomError\nfrom src.utils import helper\nfrom src.utils.draft_lock_manager import DraftLockManager\nfrom src.utils.keyframe_value import normalize_keyframe_value\n\n\ndef add_keyframes(\n    draft_url: str,\n    keyframes: str\n) -> Tuple[str, int, List[str]]:\n    \"\"\"\n    添加关键帧到剪映草稿的业务逻辑\n    \n    Args:\n        draft_url: 草稿URL\n        keyframes: 关键帧信息列表的JSON字符串，格式如下：\n            [\n                {\n                    \"segment_id\": \"d62994b4-25fe-422a-a123-87ef05038558\",  # 目标片段的唯一标识ID\n                    \"property\": \"KFTypePositionX\",  # 动画属性类型\n                    \"offset\": 0.5,  # 关键帧在片段中的时间偏移（0-1范围）\n                    \"value\": -0.1  # 属性在该时间点的值\n                }\n            ]\n    \n    Returns:\n        draft_url: 草稿URL\n        keyframes_added: 添加的关键帧数量\n        affected_segments: 受影响的片段ID列表\n    \n    Raises:\n        CustomException: 关键帧添加失败\n    \"\"\"\n    logger.info(f\"add_keyframes started, draft_url: {draft_url}, keyframes: {keyframes}\")\n\n    # 1. 提取草稿ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if (not draft_id) or (draft_id not in DRAFT_CACHE):\n        logger.error(f\"Invalid draft_url or draft not found in cache: {draft_url}\")\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    # 2. 解析关键帧信息\n    keyframe_items = parse_keyframes_data(json_str=keyframes)\n    if len(keyframe_items) == 0:\n        logger.info(f\"No keyframe info provided, draft_id: {draft_id}\")\n        raise CustomException(CustomError.INVALID_KEYFRAME_INFO)\n\n    logger.info(f\"Parsed {len(keyframe_items)} keyframe items\")\n\n    # 3. 从缓存中获取草稿\n    script: ScriptFile = DRAFT_CACHE[draft_id]\n\n    # 4. 处理每个关键帧\n    keyframes_added = 0\n    affected_segments: List[str] = []\n    failed_keyframes = 0  # 记录失败的关键帧数量\n    \n    for i, keyframe_item in enumerate(keyframe_items):\n        try:\n            logger.info(f\"Processing keyframe {i+1}/{len(keyframe_items)}, segment_id: {keyframe_item['segment_id']}, property: {keyframe_item['property']}\")\n            \n            # 查找片段\n            segment = find_segment_by_id(script, keyframe_item['segment_id'])\n            if segment is None:\n                logger.error(f\"Segment not found: {keyframe_item['segment_id']}, skipping this keyframe\")\n                failed_keyframes += 1\n                continue  # 继续处理下一个关键帧\n            \n            # 验证片段类型\n            if not isinstance(segment, VisualSegment):\n                logger.error(f\"Segment {keyframe_item['segment_id']} is not a visual segment, cannot add keyframes, skipping this keyframe\")\n                failed_keyframes += 1\n                continue  # 继续处理下一个关键帧\n            \n            # 验证动画属性类型\n            try:\n                property_enum = KeyframeProperty(keyframe_item['property'])\n            except ValueError:\n                logger.error(f\"Invalid property type: {keyframe_item['property']}, skipping this keyframe\")\n                failed_keyframes += 1\n                continue  # 继续处理下一个关键帧\n            \n            # 处理offset值：只支持微秒绝对时间，需要转换为相对时间\n            segment_duration = segment.duration\n            offset_value = keyframe_item['offset']\n            \n            # 将微秒绝对时间转换为相对时间（0-1范围）\n            relative_offset = offset_value / segment_duration\n            # 确保相对时间在有效范围内\n            relative_offset = max(0.0, min(1.0, relative_offset))\n            logger.info(f\"Converting absolute offset {offset_value} microseconds to relative offset {relative_offset} for segment duration {segment_duration}\")\n            \n            # 计算时间偏移（将相对位置转换为微秒）\n            time_offset = int(relative_offset * segment_duration)\n            \n            raw_value = keyframe_item['value']\n            normalized_value = normalize_keyframe_value(\n                keyframe_item['property'],\n                raw_value,\n                width=script.width,\n                height=script.height,\n            )\n            if normalized_value != raw_value:\n                logger.info(\n                    f\"Normalized keyframe value for {keyframe_item['property']}: \"\n                    f\"{raw_value} -> {normalized_value} \"\n                    f\"(canvas {script.width}x{script.height})\"\n                )\n\n            logger.info(\n                f\"Adding keyframe to segment {keyframe_item['segment_id']}: \"\n                f\"property={property_enum.value}, time_offset={time_offset}, value={normalized_value}\"\n            )\n\n            segment.add_keyframe(property_enum, time_offset, normalized_value)\n            \n            keyframes_added += 1\n            if keyframe_item['segment_id'] not in affected_segments:\n                affected_segments.append(keyframe_item['segment_id'])\n                \n            logger.info(f\"Successfully added keyframe {i+1}, total added: {keyframes_added}\")\n            \n        except Exception as e:\n            logger.error(f\"Failed to add keyframe {i+1}, error: {str(e)}, skipping this keyframe\")\n            failed_keyframes += 1\n            # 继续处理下一个关键帧，而不是抛出异常\n    \n    # 5. 保存草稿\n    try:\n        script.save()\n        logger.info(f\"Draft saved successfully, keyframes_added: {keyframes_added}, failed_keyframes: {failed_keyframes}\")\n    except Exception as e:\n        logger.error(f\"Failed to save draft: {str(e)}\")\n        raise CustomException(CustomError.KEYFRAME_ADD_FAILED)\n    \n    logger.info(f\"add_keyframes completed - draft_id: {draft_id}, keyframes_added: {keyframes_added}, affected_segments: {affected_segments}, failed_keyframes: {failed_keyframes}\")\n    \n    return draft_url, keyframes_added, affected_segments\n\n\nasync def add_keyframes_async(\n    draft_url: str,\n    keyframes: str,\n    lock_timeout: float = 30.0\n) -> Tuple[str, int, List[str]]:\n    \"\"\"\n    添加关键帧到剪映草稿的异步版本（带并发锁保护）\n    \n    功能：\n    1. 使用 DraftLockManager 防止同一草稿的并发写操作\n    2. 支持超时控制，避免无限等待\n    3. 自动释放锁，即使发生异常\n    \n    Args:\n        draft_url: 草稿 URL，格式：\".../get_draft?draft_id=xxx\"\n        keyframes: JSON 字符串，包含关键帧信息列表，详见 add_keyframes 函数\n        lock_timeout: 获取锁的超时时间（秒），默认 30 秒\n    \n    Returns:\n        tuple: (draft_url, keyframes_added, affected_segments)\n    \n    Raises:\n        CustomException: 关键帧添加失败或获取锁超时\n        asyncio.TimeoutError: 等待锁超时时抛出\n    \n    Example:\n        >>> result = await add_keyframes_async(\n        ...     draft_url=\"http://.../draft_id=123\",\n        ...     keyframes='[{\"segment_id\":\"...\", \"property\":\"KFTypePositionX\", \"offset\":0.5, \"value\":-0.1}]'\n        ... )\n    \"\"\"\n    # 提取草稿 ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if not draft_id:\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n    \n    # 获取锁管理器\n    lock_manager = DraftLockManager()\n    \n    # 尝试获取锁\n    try:\n        await lock_manager.acquire_lock(draft_id, timeout=lock_timeout)\n        logger.info(f\"Lock acquired for draft_id: {draft_id}\")\n    except asyncio.TimeoutError:\n        logger.error(f\"Timeout waiting for lock on draft_id: {draft_id}\")\n        raise CustomException(\n            CustomError.DRAFT_LOCK_TIMEOUT,\n            f\"Failed to acquire lock for draft {draft_id} within {lock_timeout}s\"\n        )\n    \n    try:\n        # 调用内部处理函数（不获取锁，由外层控制）\n        return add_keyframes(\n            draft_url=draft_url,\n            keyframes=keyframes\n        )\n    finally:\n        # 释放锁\n        await lock_manager.release_lock(draft_id)\n        logger.info(f\"Lock released for draft_id: {draft_id}\")\n\n\ndef find_segment_by_id(script: ScriptFile, segment_id: str) -> Optional[VisualSegment]:\n    \"\"\"\n    通过segment_id在草稿中查找对应的片段\n    \n    Args:\n        script: 草稿文件对象\n        segment_id: 片段ID\n    \n    Returns:\n        找到的片段对象，如果未找到则返回None\n    \"\"\"\n    logger.info(f\"Searching for segment with id: {segment_id}\")\n    \n    # 遍历所有轨道\n    for track_name, track in script.tracks.items():\n        logger.info(f\"Searching in track: {track_name}, segments count: {len(track.segments)}\")\n        \n        # 遍历轨道中的所有片段\n        for segment in track.segments:\n            if segment.segment_id == segment_id:\n                logger.info(f\"Found segment {segment_id} in track {track_name}\")\n                return segment\n    \n    logger.warning(f\"Segment {segment_id} not found in any track\")\n    return None\n\n\ndef parse_keyframes_data(json_str: str) -> List[Dict[str, Any]]:\n    \"\"\"\n    解析关键帧数据的JSON字符串，验证必选字段和数值范围\n    \n    Args:\n        json_str: 包含关键帧数据的JSON字符串，格式如下：\n        [\n            {\n                \"segment_id\": \"d62994b4-25fe-422a-a123-87ef05038558\",  # [必选] 目标片段的唯一标识ID\n                \"property\": \"KFTypePositionX\",  # [必选] 动画属性类型\n                \"offset\": 5000000,  # [必选] 关键帧在片段中的时间偏移（微秒绝对时间）\n                \"value\": -0.1  # [必选] 属性在该时间点的值\n            }\n        ]\n    \n    Returns:\n        包含关键帧对象的数组，每个对象都验证过格式和范围\n    \n    Raises:\n        CustomException: 当JSON格式错误或缺少必选字段时抛出\n    \"\"\"\n    try:\n        # 解析JSON字符串\n        data = json.loads(json_str)\n    except json.JSONDecodeError as e:\n        logger.error(f\"JSON parse error: {e.msg}\")\n        raise CustomException(CustomError.INVALID_KEYFRAME_INFO, f\"JSON parse error: {e.msg}\")\n    \n    # 确保输入是列表\n    if not isinstance(data, list):\n        logger.error(\"keyframes should be a list\")\n        raise CustomException(CustomError.INVALID_KEYFRAME_INFO, \"keyframes should be a list\")\n    \n    result = []\n    \n    # 支持的动画属性类型\n    supported_properties = {\n        \"KFTypePositionX\", \"KFTypePositionY\", \"KFTypeScaleX\", \n        \"KFTypeScaleY\", \"KFTypeRotation\", \"KFTypeAlpha\", \"UNIFORM_SCALE\",\n        \"KFTypeSaturation\", \"KFTypeContrast\", \"KFTypeBrightness\", \"KFTypeVolume\"\n    }\n    \n    for i, item in enumerate(data):\n        if not isinstance(item, dict):\n            logger.error(f\"the {i}th item should be a dict\")\n            raise CustomException(CustomError.INVALID_KEYFRAME_INFO, f\"the {i}th item should be a dict\")\n        \n        # 检查必选字段\n        required_fields = [\"segment_id\", \"property\", \"offset\", \"value\"]\n        missing_fields = [field for field in required_fields if field not in item]\n        \n        if missing_fields:\n            logger.error(f\"the {i}th item is missing required fields: {', '.join(missing_fields)}\")\n            raise CustomException(CustomError.INVALID_KEYFRAME_INFO, f\"the {i}th item is missing required fields: {', '.join(missing_fields)}\")\n        \n        # 验证动画属性类型\n        if item[\"property\"] not in supported_properties:\n            logger.error(f\"the {i}th item has unsupported property type: {item['property']}\")\n            raise CustomException(CustomError.INVALID_KEYFRAME_INFO, f\"the {i}th item has unsupported property type: {item['property']}\")\n        \n        # 验证offset是数字类型且为非负数\n        if not isinstance(item[\"offset\"], (int, float)) or item[\"offset\"] < 0:\n            logger.error(f\"the {i}th item has invalid offset type or value: {item['offset']}, must be a non-negative number\")\n            raise CustomException(CustomError.INVALID_KEYFRAME_INFO, f\"the {i}th item has invalid offset type or value: {item['offset']}\")\n        \n        # 验证value是数字类型\n        if not isinstance(item[\"value\"], (int, float)):\n            logger.error(f\"the {i}th item has invalid value type: {type(item['value'])}, must be a number\")\n            raise CustomException(CustomError.INVALID_KEYFRAME_INFO, f\"the {i}th item has invalid value type: {type(item['value'])}\")\n        \n        # 创建处理后的对象\n        processed_item = {\n            \"segment_id\": str(item[\"segment_id\"]),\n            \"property\": item[\"property\"],\n            \"offset\": float(item[\"offset\"]),  # 保持原始微秒值，在主函数中转换为相对时间\n            \"value\": float(item[\"value\"])\n        }\n        \n        result.append(processed_item)\n    \n    logger.info(f\"Successfully parsed {len(result)} keyframe items\")\n    return result\n"
  },
  {
    "path": "src/service/add_masks.py",
    "content": "from typing import List, Dict, Any, Tuple, Optional\nimport asyncio\n\nfrom src.utils.logger import logger\nfrom src.pyJianYingDraft import ScriptFile, MaskType\nfrom src.pyJianYingDraft.video_segment import VideoSegment\nfrom src.pyJianYingDraft.segment import VisualSegment\nfrom src.utils.draft_cache import DRAFT_CACHE\nfrom exceptions import CustomException, CustomError\nfrom src.utils import helper\nfrom src.utils.draft_lock_manager import DraftLockManager\n\n\ndef add_masks(\n    draft_url: str,\n    segment_ids: List[str],\n    name: str = \"线性\",\n    X: int = 0,\n    Y: int = 0,\n    width: int = 512,\n    height: int = 512,\n    feather: int = 0,\n    rotation: int = 0,\n    invert: bool = False,\n    roundCorner: int = 0\n) -> Tuple[str, int, List[str], List[str]]:\n    \"\"\"\n    向现有草稿中的指定片段添加遮罩效果的业务逻辑\n    \n    Args:\n        draft_url: 草稿URL，必选参数\n        segment_ids: 要应用遮罩的片段ID数组，必选参数\n        name: 遮罩类型名称，默认值：\"线性\"。支持：\"线性\", \"镜面\", \"圆形\", \"矩形\", \"爱心\", \"星形\"\n        X: 遮罩中心X坐标（像素），默认值：0\n        Y: 遮罩中心Y坐标（像素），默认值：0\n        width: 遮罩宽度（像素），默认值：512\n        height: 遮罩高度（像素），默认值：512\n        feather: 羽化程度（0-100），默认值：0\n        rotation: 旋转角度（度），默认值：0\n        invert: 是否反转遮罩，默认值：false\n        roundCorner: 圆角半径（0-100），默认值：0\n    \n    Returns:\n        Tuple[str, int, List[str], List[str]]: 返回元组包含以下信息\n        - draft_url: 草稿URL\n        - masks_added: 成功添加的遮罩数量\n        - affected_segments: 受影响的片段ID列表\n        - mask_ids: 遮罩ID列表\n    \n    Raises:\n        CustomException: 遮罩添加失败\n    \"\"\"\n    logger.info(f\"add_masks started, draft_url: {draft_url}, segment_ids: {segment_ids}, mask_name: {name}\")\n\n    # 1. 提取草稿ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if (not draft_id) or (draft_id not in DRAFT_CACHE):\n        logger.error(f\"Invalid draft_url or draft not found in cache: {draft_url}\")\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    # 2. 验证片段ID列表\n    if not segment_ids or len(segment_ids) == 0:\n        logger.error(\"No segment_ids provided\")\n        raise CustomException(CustomError.INVALID_MASK_INFO)\n\n    logger.info(f\"Processing {len(segment_ids)} segments for mask addition\")\n\n    # 3. 从缓存中获取草稿\n    script: ScriptFile = DRAFT_CACHE[draft_id]\n\n    # 4. 查找遮罩类型\n    mask_type = find_mask_type_by_name(name)\n    if mask_type is None:\n        logger.error(f\"Mask type not found for name: {name}\")\n        raise CustomException(CustomError.MASK_NOT_FOUND)\n\n    # 5. 遍历片段ID，为每个片段添加遮罩\n    masks_added = 0\n    affected_segments: List[str] = []\n    mask_ids: List[str] = []\n\n    for i, segment_id in enumerate(segment_ids):\n        try:\n            logger.info(f\"Processing segment {i+1}/{len(segment_ids)}, segment_id: {segment_id}\")\n            \n            mask_id = add_mask_to_segment(\n                script=script,\n                segment_id=segment_id,\n                mask_type=mask_type,\n                center_x=X,\n                center_y=Y,\n                width=width,\n                height=height,\n                feather=feather,\n                rotation=rotation,\n                invert=invert,\n                round_corner=roundCorner\n            )\n            \n            masks_added += 1\n            affected_segments.append(segment_id)\n            mask_ids.append(mask_id)\n            logger.info(f\"Added mask to segment {i+1}/{len(segment_ids)}, mask_id: {mask_id}\")\n            \n        except Exception as e:\n            logger.error(f\"Failed to add mask to segment {i+1}/{len(segment_ids)}, segment_id: {segment_id}, error: {str(e)}\")\n            raise\n\n    # 6. 保存草稿\n    script.save()\n    logger.info(f\"Draft saved successfully\")\n\n    logger.info(f\"add_masks completed successfully - draft_id: {draft_id}, masks_added: {masks_added}\")\n    \n    return draft_url, masks_added, affected_segments, mask_ids\n\n\nasync def add_masks_async(\n    draft_url: str,\n    segment_ids: List[str],\n    name: str = \"线性\",\n    X: int = 0,\n    Y: int = 0,\n    width: int = 512,\n    height: int = 512,\n    feather: int = 0,\n    rotation: int = 0,\n    invert: bool = False,\n    roundCorner: int = 0,\n    lock_timeout: float = 30.0\n) -> Tuple[str, int, List[str], List[str]]:\n    \"\"\"\n    向现有草稿中的指定片段添加遮罩效果的异步版本（带并发锁保护）\n    \n    功能：\n    1. 使用 DraftLockManager 防止同一草稿的并发写操作\n    2. 支持超时控制，避免无限等待\n    3. 自动释放锁，即使发生异常\n    \n    Args:\n        draft_url: 草稿 URL，格式：\".../get_draft?draft_id=xxx\"\n        segment_ids: 要应用遮罩的片段 ID 数组\n        name: 遮罩类型名称，默认值：\"线性\"\n        X: 遮罩中心 X 坐标（像素），默认值：0\n        Y: 遮罩中心 Y 坐标（像素），默认值：0\n        width: 遮罩宽度（像素），默认值：512\n        height: 遮罩高度（像素），默认值：512\n        feather: 羽化程度（0-100），默认值：0\n        rotation: 旋转角度（度），默认值：0\n        invert: 是否反转遮罩，默认值：false\n        roundCorner: 圆角半径（0-100），默认值：0\n        lock_timeout: 获取锁的超时时间（秒），默认 30 秒\n    \n    Returns:\n        tuple: (draft_url, masks_added, affected_segments, mask_ids)\n    \n    Raises:\n        CustomException: 遮罩添加失败或获取锁超时\n        asyncio.TimeoutError: 等待锁超时时抛出\n    \n    Example:\n        >>> result = await add_masks_async(\n        ...     draft_url=\"http://.../draft_id=123\",\n        ...     segment_ids=[\"segment-uuid\"],\n        ...     name=\"线性\"\n        ... )\n    \"\"\"\n    # 提取草稿 ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if not draft_id:\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n    \n    # 获取锁管理器\n    lock_manager = DraftLockManager()\n    \n    # 尝试获取锁\n    try:\n        await lock_manager.acquire_lock(draft_id, timeout=lock_timeout)\n        logger.info(f\"Lock acquired for draft_id: {draft_id}\")\n    except asyncio.TimeoutError:\n        logger.error(f\"Timeout waiting for lock on draft_id: {draft_id}\")\n        raise CustomException(\n            CustomError.DRAFT_LOCK_TIMEOUT,\n            f\"Failed to acquire lock for draft {draft_id} within {lock_timeout}s\"\n        )\n    \n    try:\n        # 调用内部处理函数（不获取锁，由外层控制）\n        return add_masks(\n            draft_url=draft_url,\n            segment_ids=segment_ids,\n            name=name,\n            X=X,\n            Y=Y,\n            width=width,\n            height=height,\n            feather=feather,\n            rotation=rotation,\n            invert=invert,\n            roundCorner=roundCorner\n        )\n    finally:\n        # 释放锁\n        await lock_manager.release_lock(draft_id)\n        logger.info(f\"Lock released for draft_id: {draft_id}\")\n\n\ndef add_mask_to_segment(\n    script: ScriptFile,\n    segment_id: str,\n    mask_type: MaskType,\n    center_x: int = 0,\n    center_y: int = 0,\n    width: int = 512,\n    height: int = 512,\n    feather: int = 0,\n    rotation: int = 0,\n    invert: bool = False,\n    round_corner: int = 0\n) -> str:\n    \"\"\"\n    向指定片段添加遮罩\n    \n    Args:\n        script: 草稿文件对象\n        segment_id: 目标片段ID\n        mask_type: 遮罩类型\n        center_x: 遮罩中心X坐标（像素）\n        center_y: 遮罩中心Y坐标（像素） \n        width: 遮罩宽度（像素）\n        height: 遮罩高度（像素）\n        feather: 羽化程度（0-100）\n        rotation: 旋转角度（度）\n        invert: 是否反转遮罩\n        round_corner: 圆角半径（0-100）\n    \n    Returns:\n        mask_id: 遮罩ID\n    \n    Raises:\n        CustomException: 添加遮罩失败\n    \"\"\"\n    try:\n        # 1. 查找片段\n        segment = find_segment_by_id(script, segment_id)\n        if segment is None:\n            logger.error(f\"Segment not found: {segment_id}\")\n            raise CustomException(CustomError.SEGMENT_NOT_FOUND)\n        \n        # 2. 验证片段类型（只有VideoSegment支持遮罩）\n        if not isinstance(segment, VideoSegment):\n            logger.error(f\"Segment {segment_id} is not a video segment, cannot add mask\")\n            raise CustomException(CustomError.INVALID_SEGMENT_TYPE)\n        \n        # 3. 检查片段是否已有遮罩\n        if segment.mask is not None:\n            logger.info(f\"Segment {segment_id} already has a mask, returning existing mask id\")\n            # 如果片段已经有遮罩，直接返回现有的遮罩ID而不是抛出异常\n            return segment.mask.global_id\n        \n        # 4. 计算遮罩尺寸参数\n        material_width, material_height = segment.material_size\n        size, rect_width = calculate_mask_size_params(\n            mask_type=mask_type,\n            width=width,\n            height=height,\n            material_width=material_width,\n            material_height=material_height\n        )\n        \n        logger.info(f\"Adding mask to segment {segment_id}: type={mask_type.value.name}, center=({center_x}, {center_y}), size={size}\")\n        logger.info(f\"Mask details - width: {width}, height: {height}, feather: {feather}, rotation: {rotation}, invert: {invert}, round_corner: {round_corner}\")\n\n        # 5. 添加遮罩到片段\n        if mask_type == MaskType.矩形:\n            # 矩形遮罩可以使用所有参数\n            segment.add_mask(\n                mask_type=mask_type,\n                center_x=float(center_x),\n                center_y=float(center_y), \n                size=size,\n                rotation=float(rotation),\n                feather=float(feather),\n                invert=invert,\n                rect_width=rect_width,\n                round_corner=float(round_corner)\n            )\n        else:\n            # 非矩形遮罩不能使用 rect_width 和 round_corner 参数\n            segment.add_mask(\n                mask_type=mask_type,\n                center_x=float(center_x),\n                center_y=float(center_y), \n                size=size,\n                rotation=float(rotation),\n                feather=float(feather),\n                invert=invert\n            )\n\n        # ⭐⭐⭐ 关键修复：手动将蒙版添加到 script.materials.masks ⭐⭐⭐\n        if segment.mask is not None:\n            # 检查是否已存在（避免重复添加）\n            mask_exists = False\n            for existing_mask in script.materials.masks:\n                if existing_mask.get(\"id\") == segment.mask.global_id:\n                    mask_exists = True\n                    break\n            \n            if not mask_exists:\n                script.materials.masks.append(segment.mask.export_json())\n                logger.info(f\"Registered mask to materials.masks, mask_id: {segment.mask.global_id}\")\n\n        mask_id = segment.mask.global_id if segment.mask is not None else \"\"\n        if not mask_id:\n            logger.error(f\"Failed to create mask for segment {segment_id}\")\n            raise CustomException(CustomError.MASK_ADD_FAILED)\n        \n        logger.info(f\"Successfully added mask to segment {segment_id}, mask_id: {mask_id}\")\n        \n        return mask_id\n        \n    except CustomException:\n        logger.error(f\"Add mask to segment failed, segment_id: {segment_id}\")\n        raise\n    except Exception as e:\n        logger.error(f\"Add mask to segment failed, error: {str(e)}\")\n        raise CustomException(CustomError.MASK_ADD_FAILED)\n\n\ndef find_segment_by_id(script: ScriptFile, segment_id: str) -> Optional[VisualSegment]:\n    \"\"\"\n    通过segment_id在草稿中查找对应的片段\n    \n    Args:\n        script: 草稿文件对象\n        segment_id: 片段ID\n    \n    Returns:\n        找到的片段对象，如果未找到则返回None\n    \"\"\"\n    logger.info(f\"Searching for segment with id: {segment_id}\")\n    \n    # 遍历所有轨道\n    for track_name, track in script.tracks.items():\n        logger.info(f\"Searching in track: {track_name}, segments count: {len(track.segments)}\")\n        \n        # 遍历轨道中的所有片段\n        for segment in track.segments:\n            if segment.segment_id == segment_id:\n                logger.info(f\"Found segment {segment_id} in track {track_name}\")\n                return segment\n    \n    logger.warning(f\"Segment {segment_id} not found in any track\")\n    return None\n\n\ndef calculate_mask_size_params(\n    mask_type: MaskType,\n    width: int,\n    height: int,\n    material_width: int,\n    material_height: int\n) -> Tuple[float, Optional[float]]:\n    \"\"\"\n    计算遮罩的尺寸参数\n    \n    Args:\n        mask_type: 遮罩类型\n        width: 遮罩宽度（像素）\n        height: 遮罩高度（像素）\n        material_width: 素材宽度（像素）\n        material_height: 素材高度（像素）\n    \n    Returns:\n        Tuple[float, Optional[float]]: \n        - size: 遮罩的主要尺寸比例\n        - rect_width: 矩形遮罩的宽度比例（仅矩形遮罩有效）\n    \"\"\"\n    # 计算高度比例作为主要尺寸\n    size = height / material_height\n    \n    # 仅矩形遮罩需要计算宽度比例\n    if mask_type == MaskType.矩形:\n        rect_width = width / material_width\n        return size, rect_width\n    \n    # 其他遮罩类型不需要设置 rect_width\n    return size, None\n\n\ndef find_mask_type_by_name(mask_name: str) -> Optional[MaskType]:\n    \"\"\"\n    根据遮罩名称查找对应的遮罩类型\n    \n    Args:\n        mask_name: 遮罩名称\n    \n    Returns:\n        对应的遮罩类型枚举，如果未找到则返回None\n    \"\"\"\n    logger.info(f\"Searching for mask type with name: {mask_name}\")\n    \n    # 搜索MaskType中的遮罩\n    for mask_type in MaskType:\n        if mask_type.value.name == mask_name:\n            logger.info(f\"Found mask type: {mask_name}\")\n            return mask_type\n    \n    logger.warning(f\"Mask type not found for name: {mask_name}\")\n    return None"
  },
  {
    "path": "src/service/add_sticker.py",
    "content": "from src.utils.logger import logger\nfrom src.pyJianYingDraft import ScriptFile, trange, StickerSegment, ClipSettings\nimport src.pyJianYingDraft as draft\nfrom src.utils.draft_cache import DRAFT_CACHE\nfrom exceptions import CustomException, CustomError\nimport os\nfrom src.utils import helper\nimport config\nimport asyncio\nfrom typing import Tuple\nfrom src.utils.draft_lock_manager import DraftLockManager\n\n\ndef add_sticker(\n    draft_url: str,\n    sticker_id: str,\n    start: int,\n    end: int,\n    scale: float = 1.0,\n    transform_x: int = 0,\n    transform_y: int = 0\n) -> Tuple[str, str, str, str, int]:\n    \"\"\"\n    添加贴纸到剪映草稿的业务逻辑\n    \n    Args:\n        draft_url: 草稿URL，必选参数\n        sticker_id: 贴纸的唯一标识ID，必选参数\n        start: 贴纸开始时间（微秒），必选参数\n        end: 贴纸结束时间（微秒），必选参数\n        scale: 贴纸缩放比例，默认1.0，可选参数。1.0=原始大小，0.5=缩小一半，2.0=放大两倍，建议范围[0.1, 5.0]\n        transform_x: X轴位置偏移（像素），默认值0，可选参数。正值向右移动，负值向左移动，以画布中心为原点\n        transform_y: Y轴位置偏移（像素），默认值0，可选参数。正值向下移动，负值向上移动，以画布中心为原点\n    \n    Returns:\n        Tuple[str, str, str, str, int]: 返回元组包含以下信息\n        - draft_url: 草稿URL\n        - sticker_id: 贴纸的唯一标识ID\n        - track_id: 轨道ID\n        - segment_id: 片段ID\n        - duration: 贴纸显示时长（微秒）\n    \n    Raises:\n        CustomException: 贴纸添加失败\n    \"\"\"\n    logger.info(f\"add_sticker starting, draft_url: {draft_url}, sticker_id: {sticker_id}, start: {start}, end: {end}, scale: {scale}, transform_x: {transform_x}, transform_y: {transform_y}\")\n\n    # 1. 验证时间参数\n    if end <= start:\n        logger.error(f\"Invalid time range: end ({end}) must be greater than start ({start})\")\n        raise CustomException(CustomError.INVALID_STICKER_INFO)\n    \n    # 计算贴纸显示时长\n    duration = end - start\n    logger.info(f\"Calculated sticker duration: {duration} microseconds\")\n\n    # 2. 提取草稿ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if (not draft_id) or (draft_id not in DRAFT_CACHE):\n        logger.error(f\"Invalid draft_url or draft not found in cache, draft_id: {draft_id}\")\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    # 3. 从缓存中获取草稿\n    script: ScriptFile = DRAFT_CACHE[draft_id]\n    logger.info(f\"Retrieved script from cache, draft_id: {draft_id}\")\n\n    # 4. 创建贴纸轨道（如果不存在）\n    track_name = f\"sticker_track_{helper.gen_unique_id()}\"\n    try:\n        script.add_track(track_type=draft.TrackType.sticker, track_name=track_name)\n        logger.info(f\"Created sticker track: {track_name}\")\n    except Exception as e:\n        logger.error(f\"Failed to create sticker track: {str(e)}\")\n        raise CustomException(CustomError.STICKER_ADD_FAILED)\n\n    # 5. 创建图像调节设置\n    # 获取草稿的宽高用于transform坐标转换\n    draft_width = script.width\n    draft_height = script.height\n    logger.info(f\"draft size: {draft_width}x{draft_height}, transform_x: {transform_x}, transform_y: {transform_y}\")\n    \n    clip_settings = ClipSettings(\n        scale_x=scale,\n        scale_y=scale,\n        transform_x=transform_x / draft_width,  # 转换为半画布宽单位\n        transform_y=transform_y / draft_height   # 转换为半画布高单位\n    )\n    logger.info(f\"Created clip settings - scale: {scale}, transform_x: {transform_x/draft_width}, transform_y: {transform_y/draft_height}\")\n\n    # 6. 创建贴纸片段\n    try:\n        sticker_segment = StickerSegment(\n            resource_id=sticker_id,\n            target_timerange=trange(start=start, duration=duration),\n            clip_settings=clip_settings\n        )\n        logger.info(f\"Created sticker segment, segment_id: {sticker_segment.segment_id}, resource_id: {sticker_id}\")\n    except Exception as e:\n        logger.error(f\"Failed to create sticker segment: {str(e)}\")\n        raise CustomException(CustomError.STICKER_ADD_FAILED)\n\n    # 7. 向指定轨道添加贴纸片段\n    try:\n        script.add_segment(sticker_segment, track_name)\n        logger.info(f\"Added sticker segment to track: {track_name}\")\n    except Exception as e:\n        logger.error(f\"Failed to add sticker segment to track: {str(e)}\")\n        raise CustomException(CustomError.STICKER_ADD_FAILED)\n\n    # 8. 保存草稿\n    try:\n        script.save()\n        logger.info(f\"Saved script successfully, draft_id: {draft_id}\")\n    except Exception as e:\n        logger.error(f\"Failed to save script: {str(e)}\")\n        raise CustomException(CustomError.STICKER_ADD_FAILED)\n\n    # 9. 获取轨道ID\n    track_id = \"\"\n    for key in script.tracks.keys():\n        if script.tracks[key].name == track_name:\n            track_id = script.tracks[key].track_id\n            break\n    \n    if not track_id:\n        logger.error(f\"Failed to retrieve track_id for track: {track_name}\")\n        raise CustomException(CustomError.STICKER_ADD_FAILED)\n    \n    logger.info(f\"Retrieved track_id: {track_id}\")\n\n    # 10. 获取片段ID\n    segment_id = sticker_segment.segment_id\n    logger.info(f\"Final segment_id: {segment_id}\")\n\n    logger.info(f\"add_sticker completed successfully - draft_id: {draft_id}, track_id: {track_id}, segment_id: {segment_id}, duration: {duration}\")\n    \n    return draft_url, sticker_id, track_id, segment_id, duration\n\n\nasync def add_sticker_async(\n    draft_url: str,\n    sticker_id: str,\n    start: int,\n    end: int,\n    scale: float = 1.0,\n    transform_x: int = 0,\n    transform_y: int = 0,\n    lock_timeout: float = 30.0\n) -> Tuple[str, str, str, str, int]:\n    \"\"\"\n    添加贴纸到剪映草稿的异步版本（带并发锁保护）\n    \n    功能：\n    1. 使用 DraftLockManager 防止同一草稿的并发写操作\n    2. 支持超时控制，避免无限等待\n    3. 自动释放锁，即使发生异常\n    \n    Args:\n        draft_url: 草稿 URL，格式：\".../get_draft?draft_id=xxx\"\n        sticker_id: 贴纸的唯一标识 ID，必选参数\n        start: 贴纸开始时间（微秒），必选参数\n        end: 贴纸结束时间（微秒），必选参数\n        scale: 贴纸缩放比例，默认 1.0\n        transform_x: X 轴位置偏移（像素），默认 0\n        transform_y: Y 轴位置偏移（像素），默认 0\n        lock_timeout: 获取锁的超时时间（秒），默认 30 秒\n    \n    Returns:\n        tuple: (draft_url, sticker_id, track_id, segment_id, duration)\n    \n    Raises:\n        CustomException: 贴纸添加失败或获取锁超时\n        asyncio.TimeoutError: 等待锁超时时抛出\n    \n    Example:\n        >>> result = await add_sticker_async(\n        ...     draft_url=\"http://.../draft_id=123\",\n        ...     sticker_id=\"sticker-uuid\",\n        ...     start=0,\n        ...     end=5000000\n        ... )\n    \"\"\"\n    # 提取草稿 ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if not draft_id:\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n    \n    # 获取锁管理器\n    lock_manager = DraftLockManager()\n    \n    # 尝试获取锁\n    try:\n        await lock_manager.acquire_lock(draft_id, timeout=lock_timeout)\n        logger.info(f\"Lock acquired for draft_id: {draft_id}\")\n    except asyncio.TimeoutError:\n        logger.error(f\"Timeout waiting for lock on draft_id: {draft_id}\")\n        raise CustomException(\n            CustomError.DRAFT_LOCK_TIMEOUT,\n            f\"Failed to acquire lock for draft {draft_id} within {lock_timeout}s\"\n        )\n    \n    try:\n        # 调用内部处理函数（不获取锁，由外层控制）\n        return add_sticker(\n            draft_url=draft_url,\n            sticker_id=sticker_id,\n            start=start,\n            end=end,\n            scale=scale,\n            transform_x=transform_x,\n            transform_y=transform_y\n        )\n    finally:\n        # 释放锁\n        await lock_manager.release_lock(draft_id)\n        logger.info(f\"Lock released for draft_id: {draft_id}\")"
  },
  {
    "path": "src/service/add_text_style.py",
    "content": "import json\nimport re\nfrom typing import List, Dict, Any, Tuple\nfrom src.utils.logger import logger\n\n\ndef add_text_style(\n    text: str,\n    keyword: str,\n    font_size: int = 12,\n    keyword_color: str = \"#ff7100\",\n    keyword_font_size: int = 15\n) -> str:\n    \"\"\"\n    为文本创建富文本样式，支持关键词高亮、颜色设置、字体大小调整等功能\n    \n    Args:\n        text: 要处理的文本内容，必选参数\n        keyword: 关键词，多个用 | 分隔，必选参数\n        font_size: 普通文本的字体大小，默认值：12\n        keyword_color: 关键词文本颜色（十六进制），默认值：\"#ff7100\"\n        keyword_font_size: 关键词字体大小，默认值：15\n    \n    Returns:\n        text_style: 文本样式JSON字符串，包含styles数组和text字段\n    \n    Raises:\n        Exception: 文本样式处理失败\n    \"\"\"\n    logger.info(f\"add_text_style started, text: {text[:20]}..., keyword: {keyword}\")\n\n    try:\n        # 1. 解析关键词\n        keywords = parse_keywords(keyword)\n        if not keywords:\n            logger.warning(\"No valid keywords found\")\n            return create_simple_text_style(text, font_size)\n\n        logger.info(f\"Parsed {len(keywords)} keywords: {keywords}\")\n\n        # 2. 查找关键词位置\n        keyword_positions = find_keyword_positions(text, keywords)\n        logger.info(f\"Found {len(keyword_positions)} keyword matches\")\n\n        # 3. 解析颜色\n        keyword_rgb = hex_to_rgb(keyword_color)\n        normal_rgb = [1.0, 1.0, 1.0]  # 默认白色\n        \n        logger.info(f\"Keyword color RGB: {keyword_rgb}\")\n\n        # 4. 生成文本样式\n        styles = generate_text_styles(\n            text, \n            keyword_positions, \n            font_size, \n            keyword_font_size, \n            normal_rgb, \n            keyword_rgb\n        )\n\n        # 5. 构建响应对象\n        result = {\n            \"text\": text,\n            \"styles\": styles\n        }\n\n        # 6. 转换为JSON字符串\n        text_style_json = json.dumps(result, ensure_ascii=False, separators=(',', ':'))\n        \n        logger.info(f\"add_text_style completed successfully, generated {len(styles)} style segments\")\n        \n        return text_style_json\n\n    except Exception as e:\n        logger.error(f\"add_text_style failed, error: {str(e)}\")\n        raise\n\n\ndef parse_keywords(keyword_str: str) -> List[str]:\n    \"\"\"\n    解析关键词字符串，支持多个关键词用 | 分隔\n    \n    Args:\n        keyword_str: 关键词字符串，格式如 \"快乐|顶级思维\"\n    \n    Returns:\n        关键词列表，按长度降序排列（先匹配长关键词）\n    \"\"\"\n    if not keyword_str or not keyword_str.strip():\n        return []\n    \n    # 分割关键词，去除空白\n    keywords = [kw.strip() for kw in keyword_str.split('|') if kw.strip()]\n    \n    # 按长度降序排列，优先匹配长关键词\n    keywords.sort(key=len, reverse=True)\n    \n    logger.info(f\"Parsed keywords: {keywords}\")\n    return keywords\n\n\ndef find_keyword_positions(text: str, keywords: List[str]) -> List[Tuple[int, int, str]]:\n    \"\"\"\n    在文本中查找所有关键词的位置\n    \n    Args:\n        text: 目标文本\n        keywords: 关键词列表\n    \n    Returns:\n        位置列表，每个元素为 (start_pos, end_pos, keyword) 的元组\n    \"\"\"\n    positions = []\n    used_positions = set()  # 记录已使用的字符位置，避免重叠\n    \n    for keyword in keywords:\n        # 使用正则表达式查找所有匹配位置\n        for match in re.finditer(re.escape(keyword), text):\n            start_pos = match.start()\n            end_pos = match.end()\n            \n            # 检查是否与已有匹配重叠\n            is_overlap = any(pos in used_positions for pos in range(start_pos, end_pos))\n            \n            if not is_overlap:\n                positions.append((start_pos, end_pos, keyword))\n                # 标记这些位置为已使用\n                used_positions.update(range(start_pos, end_pos))\n                logger.info(f\"Found keyword '{keyword}' at position [{start_pos}, {end_pos})\")\n    \n    # 按起始位置排序\n    positions.sort(key=lambda x: x[0])\n    \n    return positions\n\n\ndef hex_to_rgb(hex_color: str) -> List[float]:\n    \"\"\"\n    将十六进制颜色转换为RGB浮点数组\n    \n    Args:\n        hex_color: 十六进制颜色，如 \"#ff7100\"\n    \n    Returns:\n        RGB数组，值范围为0-1，如 [1.0, 0.44, 0.0]\n    \"\"\"\n    # 移除 # 前缀\n    hex_color = hex_color.lstrip('#')\n    \n    # 确保是6位十六进制\n    if len(hex_color) != 6:\n        logger.warning(f\"Invalid hex color: {hex_color}, using default orange\")\n        hex_color = \"ff7100\"  # 默认橙色\n    \n    try:\n        # 转换为RGB\n        r = int(hex_color[0:2], 16) / 255.0\n        g = int(hex_color[2:4], 16) / 255.0\n        b = int(hex_color[4:6], 16) / 255.0\n        \n        return [r, g, b]\n    except ValueError:\n        logger.warning(f\"Failed to parse hex color: {hex_color}, using default orange\")\n        return [1.0, 0.44313725490196076, 0.0]  # 默认橙色\n\n\ndef generate_text_styles(\n    text: str,\n    keyword_positions: List[Tuple[int, int, str]],\n    normal_font_size: int,\n    keyword_font_size: int,\n    normal_color: List[float],\n    keyword_color: List[float]\n) -> List[Dict[str, Any]]:\n    \"\"\"\n    生成文本样式数组\n    \n    Args:\n        text: 原始文本\n        keyword_positions: 关键词位置列表\n        normal_font_size: 普通文本字体大小\n        keyword_font_size: 关键词字体大小\n        normal_color: 普通文本颜色RGB\n        keyword_color: 关键词颜色RGB\n    \n    Returns:\n        样式数组，每个元素包含range、size、fill等属性\n    \"\"\"\n    styles = []\n    current_pos = 0\n    \n    for start_pos, end_pos, keyword in keyword_positions:\n        # 添加关键词前的普通文本样式\n        if current_pos < start_pos:\n            normal_style = create_text_style_segment(\n                start=current_pos,\n                end=start_pos,\n                font_size=normal_font_size,\n                color=normal_color,\n                use_letter_color=False\n            )\n            styles.append(normal_style)\n            logger.info(f\"Added normal text style: [{current_pos}, {start_pos})\")\n        \n        # 添加关键词样式\n        keyword_style = create_text_style_segment(\n            start=start_pos,\n            end=end_pos,\n            font_size=keyword_font_size,\n            color=keyword_color,\n            use_letter_color=True\n        )\n        styles.append(keyword_style)\n        logger.info(f\"Added keyword style for '{keyword}': [{start_pos}, {end_pos})\")\n        \n        current_pos = end_pos\n    \n    # 添加最后剩余的普通文本样式\n    if current_pos < len(text):\n        normal_style = create_text_style_segment(\n            start=current_pos,\n            end=len(text),\n            font_size=normal_font_size,\n            color=normal_color,\n            use_letter_color=False\n        )\n        styles.append(normal_style)\n        logger.info(f\"Added final normal text style: [{current_pos}, {len(text)})\")\n    \n    return styles\n\n\ndef create_text_style_segment(\n    start: int,\n    end: int,\n    font_size: int,\n    color: List[float],\n    use_letter_color: bool = False\n) -> Dict[str, Any]:\n    \"\"\"\n    创建单个文本样式片段\n    \n    Args:\n        start: 起始位置\n        end: 结束位置\n        font_size: 字体大小\n        color: 颜色RGB数组\n        use_letter_color: 是否使用字母颜色\n    \n    Returns:\n        样式片段字典\n    \"\"\"\n    style = {\n        \"fill\": {\n            \"content\": {\n                \"solid\": {\n                    \"color\": color\n                }\n            }\n        },\n        \"range\": [start, end],\n        \"size\": font_size,\n        \"font\": {\n            \"id\": \"\",\n            \"path\": \"\"\n        }\n    }\n    \n    if use_letter_color:\n        style[\"useLetterColor\"] = True\n    \n    return style\n\n\ndef create_simple_text_style(text: str, font_size: int) -> str:\n    \"\"\"\n    创建简单的文本样式（无关键词高亮）\n    \n    Args:\n        text: 文本内容\n        font_size: 字体大小\n    \n    Returns:\n        简单的文本样式JSON字符串\n    \"\"\"\n    result = {\n        \"text\": text,\n        \"styles\": [\n            {\n                \"fill\": {\n                    \"content\": {\n                        \"solid\": {\n                            \"color\": [1.0, 1.0, 1.0]  # 白色\n                        }\n                    }\n                },\n                \"range\": [0, len(text)],\n                \"size\": font_size,\n                \"font\": {\n                    \"id\": \"\",\n                    \"path\": \"\"\n                }\n            }\n        ]\n    }\n    \n    return json.dumps(result, ensure_ascii=False, separators=(',', ':'))"
  },
  {
    "path": "src/service/add_videos.py",
    "content": "from src.pyJianYingDraft.video_segment import VideoSegment\n\nimport asyncio\nfrom src.utils.logger import logger\nfrom src.pyJianYingDraft import ScriptFile, trange, IntroType\nimport src.pyJianYingDraft as draft\nfrom src.utils.draft_cache import DRAFT_CACHE\nfrom exceptions import CustomException, CustomError\nimport os\nfrom src.schemas.add_videos import SegmentInfo\nfrom src.utils import helper\nfrom src.utils.download import download\nimport config\nimport json\nimport time\nfrom typing import List, Dict, Any, Tuple, Optional\nfrom src.utils.draft_lock_manager import get_draft_lock_manager\n\n\ndef add_videos(\n    draft_url: str, \n    video_infos: str,\n    scene_timelines: Optional[List[Dict[str, int]]] = None,\n    alpha: float = 1.0, \n    scale_x: float = 1.0, \n    scale_y: float = 1.0, \n    transform_x: int = 0, \n    transform_y: int = 0\n) -> Tuple[str, str, List[str], List[str], List[SegmentInfo]]:\n    \"\"\"\n    添加视频到剪映草稿的业务逻辑（同步版本，兼容旧代码）\n    \n    Args:\n        draft_url: \"\"  // [必选] 草稿 URL\n        video_infos: [ \n            {\n                \"video_url\": \"https://example.com/video1.mp4\", // [必选] 视频文件的 URL 地址\n                \"width\": 1920, // [可选] 视频宽度，不传则自动获取视频文件尺寸\n                \"height\": 1080, // [可选] 视频高度，不传则自动获取视频文件尺寸\n                \"start\": 0.0, // [必选] 视频在时间轴上的开始时间 (微秒)\n                \"end\": 12000000.0, // [必选] 视频在时间轴上的结束时间 (微秒)\n                \"duration\": 12000000.0, // [可选] 视频总时长 (微秒)，如果不传则默认为 end-start\n                \"mask\": \"\", // 遮罩类型 [可选]，默认值为 None\n                \"transition\": \"\", // 转场效果名称 [可选]，默认值为 None\n                \"transition_duration\": 500000.0, // 转场持续时间 (微秒)[可选]，默认值为 500000\n                \"volume\": 1.0, // 音量大小 [0, 10][可选]，默认值为 1.0，10 为最大音量\n            } \n        ] // [必选]\n        scene_timelines: [ // [可选] 场景时间线数组，用于视频变速，与 video_infos 一一对应\n            {\n                \"start\": 0, // [必选] 场景开始时间 (微秒)\n                \"end\": 6000000 // [必选] 场景结束时间 (微秒)\n            }\n        ]\n        // 变速原理：speed = (video.end - video.start) / (scene_timeline.end - scene_timeline.start)\n        // 示例：视频时间轴 0-2000000(2 秒)，场景时间线 0-1000000(1 秒)，则视频以 2 倍速播放\n        // 如果不提供 scene_timelines 或对应项为 None，视频以正常速度 (1.0 倍) 播放\n        alpha: 全局透明度 [0, 1][可选]，默认值为 1.0\n        scale_x: X 轴缩放比例 [可选]，默认值为 1.0\n        scale_y: Y 轴缩放比例 [可选]，默认值为 1.0\n        transform_x: X 轴位置偏移 (像素)[可选]，默认值为 0\n        transform_y: Y 轴位置偏移 (像素)[可选]，默认值为 0\n    \n    Returns:\n        \"draft_url\": \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=...\",\n        \"track_id\": \"video-track-uuid\",\n        \"video_ids\": [\"video1-uuid\", \"video2-uuid\", \"video3-uuid\"],\n        \"segment_ids\": [\"segment1-uuid\", \"segment2-uuid\", \"segment3-uuid\"],\n        \"segment_infos\": 片段信息列表，包含每个片段的ID、开始时间和结束时间\n\n    Raises:\n        CustomException: 视频批量添加失败\n    \"\"\"\n    # 调用内部处理函数（不获取锁，由外层控制）\n    return _add_videos_internal(\n        draft_url=draft_url,\n        video_infos=video_infos,\n        scene_timelines=scene_timelines,\n        alpha=alpha,\n        scale_x=scale_x,\n        scale_y=scale_y,\n        transform_x=transform_x,\n        transform_y=transform_y,\n        prepared_videos=None,\n    )\n\n\ndef _prepare_videos_local_files(draft_url: str, video_infos: str) -> List[Dict[str, Any]]:\n    \"\"\"\n    校验草稿、解析 video_infos、规范化时间字段并下载素材到草稿目录。\n    不含对 ScriptFile 的修改，可在草稿写锁外调用。\n    \"\"\"\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if (not draft_id) or (draft_id not in DRAFT_CACHE):\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    draft_dir = os.path.join(config.DRAFT_DIR, draft_id)\n    draft_video_dir = os.path.join(draft_dir, \"assets\", \"videos\")\n    os.makedirs(name=draft_video_dir, exist_ok=True)\n\n    videos = parse_video_data(json_str=video_infos)\n    if len(videos) == 0:\n        logger.info(f\"No video info, draft_id: {draft_id}\")\n        raise CustomException(CustomError.INVALID_VIDEO_INFO)\n\n    for video in videos:\n        video[\"original_start\"] = video[\"start\"]\n        video[\"original_end\"] = video[\"end\"]\n        video[\"local_video_path\"] = download(url=video[\"video_url\"], save_dir=draft_video_dir)\n\n    return videos\n\n\nasync def add_videos_async(\n    draft_url: str, \n    video_infos: str,\n    scene_timelines: Optional[List[Dict[str, int]]] = None,\n    alpha: float = 1.0, \n    scale_x: float = 1.0, \n    scale_y: float = 1.0, \n    transform_x: int = 0, \n    transform_y: int = 0,\n    lock_timeout: float = 30.0\n) -> Tuple[str, str, List[str], List[str], List[SegmentInfo]]:\n    \"\"\"\n    添加视频到剪映草稿的异步版本（带并发锁保护）\n    \n    功能：\n    1. 使用 DraftLockManager 防止同一草稿的并发写操作\n    2. 支持超时控制，避免无限等待\n    3. 自动释放锁，即使发生异常\n    4. 视频下载在获取锁之前完成，持锁阶段仅修改草稿与写盘\n    \n    Args:\n        draft_url: 草稿 URL，格式：\".../get_draft?draft_id=xxx\"\n        video_infos: JSON 字符串，包含视频信息列表，详见 add_videos 函数\n        scene_timelines: 场景时间线列表，用于视频变速，与 video_infos 一一对应\n        alpha: 全局透明度 [0, 1]，默认 1.0\n        scale_x: X 轴缩放比例，默认 1.0\n        scale_y: Y 轴缩放比例，默认 1.0\n        transform_x: X 轴位置偏移（像素），默认 0\n        transform_y: Y 轴位置偏移（像素），默认 0\n        lock_timeout: 获取锁的超时时间（秒），默认 30 秒\n    \n    Returns:\n        tuple: (draft_url, track_id, video_ids, segment_ids, segment_infos)\n    \n    Raises:\n        CustomException: 视频添加失败，或 `DRAFT_LOCK_TIMEOUT`（获取写锁超时）\n    \n    Example:\n        >>> result = await add_videos_async(\n        ...     draft_url=\"http://.../draft_id=123\",\n        ...     video_infos='[{\"video_url\":\"...\", \"start\":0, \"end\":5000000}]'\n        ... )\n    \"\"\"\n    # 提取草稿 ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if not draft_id:\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    logger.info(f\"[flow:add_videos] prep_start, draft_id: {draft_id}\")\n    # 解析、规范化与下载在锁外完成，缩短持锁时间\n    # 下载与预处理放到线程池，避免阻塞事件循环导致锁超时漂移\n    prep_started_at = time.monotonic()\n    prepared_videos = await asyncio.to_thread(\n        _prepare_videos_local_files,\n        draft_url,\n        video_infos,\n    )\n    logger.info(\n        f\"[flow:add_videos] prep_done, draft_id: {draft_id}, \"\n        f\"count: {len(prepared_videos)}, elapsed: {time.monotonic() - prep_started_at:.3f}s\"\n    )\n\n    lock_manager = get_draft_lock_manager()\n\n    logger.info(f\"[flow:add_videos] lock_wait_start, draft_id: {draft_id}, timeout: {lock_timeout}s\")\n    try:\n        await lock_manager.acquire_lock(draft_id, timeout=lock_timeout)\n        logger.info(f\"[flow:add_videos] lock_acquired, draft_id: {draft_id}\")\n    except asyncio.TimeoutError:\n        logger.error(f\"Timeout waiting for lock on draft_id: {draft_id}\")\n        raise CustomException(\n            CustomError.DRAFT_LOCK_TIMEOUT,\n            f\"Failed to acquire lock for draft {draft_id} after {lock_timeout}s\",\n        )\n\n    try:\n        return _add_videos_internal(\n            draft_url=draft_url,\n            video_infos=video_infos,\n            scene_timelines=scene_timelines,\n            alpha=alpha,\n            scale_x=scale_x,\n            scale_y=scale_y,\n            transform_x=transform_x,\n            transform_y=transform_y,\n            prepared_videos=prepared_videos,\n        )\n    finally:\n        await lock_manager.release_lock(draft_id)\n        logger.info(f\"[flow:add_videos] lock_released, draft_id: {draft_id}\")\n\n\ndef _add_videos_internal(\n    draft_url: str,\n    video_infos: str,\n    scene_timelines: Optional[List[Dict[str, int]]] = None,\n    alpha: float = 1.0,\n    scale_x: float = 1.0,\n    scale_y: float = 1.0,\n    transform_x: int = 0,\n    transform_y: int = 0,\n    prepared_videos: Optional[List[Dict[str, Any]]] = None,\n) -> Tuple[str, str, List[str], List[str], List[SegmentInfo]]:\n    \"\"\"\n    添加视频的内部处理函数（无锁，需外层控制并发）\n    \n    此函数不包含锁机制，必须在已获取锁的情况下调用\n    \n    Args:\n        draft_url: 草稿 URL\n        video_infos: 视频信息 JSON 字符串（当 prepared_videos 为 None 时参与解析）\n        scene_timelines: 场景时间线列表\n        alpha: 全局透明度\n        scale_x: X 轴缩放比例\n        scale_y: Y 轴缩放比例\n        transform_x: X 轴位置偏移\n        transform_y: Y 轴位置偏移\n        prepared_videos: 若已在外部完成解析与下载（含 local_video_path），则直接使用，跳过下载\n    \n    Returns:\n        tuple: (draft_url, track_id, video_ids, segment_ids, segment_infos)\n    \"\"\"\n    logger.info(f\"_add_videos_internal, draft_url: {draft_url}\")\n\n    # 1. 提取草稿 ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if (not draft_id) or (draft_id not in DRAFT_CACHE):\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    # 2. 创建保存视频资源的目录\n    draft_dir = os.path.join(config.DRAFT_DIR, draft_id)\n    draft_video_dir = os.path.join(draft_dir, \"assets\", \"videos\")\n    os.makedirs(name=draft_video_dir, exist_ok=True)\n\n    if prepared_videos is not None:\n        videos = prepared_videos\n    else:\n        videos = parse_video_data(json_str=video_infos)\n        if len(videos) == 0:\n            logger.info(f\"No video info, draft_id: {draft_id}\")\n            raise CustomException(CustomError.INVALID_VIDEO_INFO)\n        for video in videos:\n            video[\"original_start\"] = video[\"start\"]\n            video[\"original_end\"] = video[\"end\"]\n\n    logger.info(f\"Parsed {len(videos)} videos, scene_timelines: {scene_timelines}\")\n\n    # 4. 从缓存中获取草稿\n    script: ScriptFile = DRAFT_CACHE[draft_id]\n\n    # 5. 添加视频轨道（非主轨；叠层与 add_images / add_captions / add_filters 等一致，按全局调用顺序递增 render_index）\n    track_name = f\"video_track_{helper.gen_unique_id()}\"\n    script.add_track_ordered(track_type=draft.TrackType.video, track_name=track_name)\n\n    # 6. 遍历视频信息，添加视频到草稿中的指定轨道，收集片段 ID 与片段信息\n    segment_ids = []\n    segment_infos = []\n    current_track_end = 0  # 跟踪当前轨道上的实际结束位置（用于处理变速后的连续性）\n    should_keep_continuity = _has_valid_scene_timelines(scene_timelines, len(videos))\n    logger.info(\n        f\"Timeline placement mode, should_keep_continuity={should_keep_continuity}, \"\n        f\"scene_timelines_count={len(scene_timelines) if scene_timelines else 0}\"\n    )\n    for i, video in enumerate(videos):\n        # 获取对应的场景时间线（如果有）\n        scene_timeline = scene_timelines[i] if scene_timelines and i < len(scene_timelines) else None\n        \n        # 仅在 scene_timelines 有效时，沿用历史行为：自动连续拼接（处理变速后的间隙问题）\n        # 否则严格使用 video_infos 里传入的 start/end。\n        if should_keep_continuity and i > 0 and current_track_end > 0:\n            # 使用原始时长计算新的 end\n            original_duration = video['original_end'] - video['original_start']\n            video['start'] = current_track_end\n            video['end'] = video['start'] + original_duration\n            logger.info(f\"Adjusted video {i} start time to {video['start']} for continuity, original_duration: {original_duration}\")\n        \n        segment_id, segment_info, actual_duration = add_video_to_draft(\n\t\t                              script, track_name, draft_video_dir=draft_video_dir, video=video,\n                                      scene_timeline=scene_timeline,\n                                      alpha=alpha, scale_x=scale_x, scale_y=scale_y, \n                                      transform_x=transform_x, transform_y=transform_y)\n        segment_ids.append(segment_id)\n        segment_infos.append(segment_info)\n        # 更新当前轨道结束位置（使用实际播放时长，而非原始时间轴时长）\n        current_track_end = video['start'] + actual_duration\n        logger.info(f\"Video {i} added, track end position: {current_track_end}, actual_duration: {actual_duration}\")\n    logger.info(f\"segment_ids: {segment_ids}\")\n\n    # 7. 保存草稿\n    script.save()\n\n    # 8. 获取当前视频轨道 id\n    track_id = \"\"\n    for key in script.tracks.keys():\n        if script.tracks[key].name == track_name:\n            track_id = script.tracks[key].track_id\n            break\n    logger.info(f\"draft_id: {draft_id}, track_id: {track_id}\")\n\n    # 9. 获取当前所有视频资源 ID（全局唯一 ID）\n    video_ids = [video.material_id for video in script.materials.videos]\n    logger.info(f\"draft_id: {draft_id}, video_ids: {video_ids}\")\n\n    # TODO: 这里还是有点小问题，为什么得到的 video_ids 与 segment_ids 的结果一样\n    return draft_url, track_id, video_ids, segment_ids, segment_infos\n\n\ndef _is_valid_scene_timeline(scene_timeline: Any) -> bool:\n    \"\"\"\n    判断单个 scene_timeline 是否为有效值。\n    有效条件：必须是字典，且包含 start/end，且 end > start。\n    \"\"\"\n    if not isinstance(scene_timeline, dict):\n        return False\n    if \"start\" not in scene_timeline or \"end\" not in scene_timeline:\n        return False\n    return scene_timeline[\"end\"] > scene_timeline[\"start\"]\n\n\ndef _has_valid_scene_timelines(\n    scene_timelines: Optional[List[Dict[str, int]]],\n    video_count: int,\n) -> bool:\n    \"\"\"\n    判断 scene_timelines 是否“指定了有效值”。\n    当且仅当每个视频都存在对应且有效的 scene_timeline 时，返回 True。\n    \"\"\"\n    if not scene_timelines:\n        return False\n    if len(scene_timelines) < video_count:\n        return False\n    return all(_is_valid_scene_timeline(scene_timelines[i]) for i in range(video_count))\n\ndef add_video_to_draft(\n    script: ScriptFile,\n    track_name: str,\n    draft_video_dir: str,\n    video: dict, \n    scene_timeline: Optional[Dict[str, int]] = None,\n    alpha: float = 1.0, \n    scale_x: float = 1.0, \n    scale_y: float = 1.0, \n    transform_x: int = 0, \n    transform_y: int = 0\n    ) -> Tuple[str, SegmentInfo, int]:\n    \"\"\"\n    向剪映草稿中添加视频\n    \n    Args:\n        script: 草稿文件对象\n        track_name: 视频轨道名称\n        draft_video_dir: 视频资源目录\n        video: 视频信息字典，包含以下字段：\n            video_url: 视频URL\n            width: 视频宽度(像素)\n            height: 视频高度(像素)\n            start: 视频在时间轴上的开始时间(微秒)\n            end: 视频在时间轴上的结束时间(微秒)\n            duration: 视频总时长(微秒)，可选，默认为end-start\n            mask: 遮罩类型(可选)\n            transition: 转场效果(可选)\n            transition_duration: 转场持续时间(可选)\n            volume: 音量大小(可选)\n        scene_timeline: 场景时间线字典，包含以下字段：\n            start: 场景开始时间(微秒)\n            end: 场景结束时间(微秒)\n            用于计算视频变速：speed = (video.end - video.start) / (scene_timeline.end - scene_timeline.start)\n        alpha: 视频透明度\n        scale_x: 横向缩放\n        scale_y: 纵向缩放\n        transform_x: X轴位置偏移(像素)\n        transform_y: Y轴位置偏移(像素)       \n    \n    Returns:\n        segment_id: 片段ID\n        segment_info: 片段信息，包含 id、start、end（与 add_images 一致，使用放置后的时间轴起止）\n        actual_duration: 视频在轨道上的实际播放时长(微秒)，考虑变速后的时长\n    \"\"\"\n    try:\n        video_path = video.get(\"local_video_path\")\n        if video_path:\n            if not os.path.isfile(video_path):\n                raise CustomException(CustomError.VIDEO_ADD_FAILED, f\"Missing local file: {video_path}\")\n        else:\n            video_path = download(url=video[\"video_url\"], save_dir=draft_video_dir)\n\n        # 1. 创建视频素材\n        video_material = draft.VideoMaterial(video_path)\n        \n        # 2. 获取视频播放时长（target duration）\n        target_duration = video.get('duration', video['end'] - video['start'])\n        \n        # 获取草稿的宽高用于transform坐标转换\n        draft_width = script.width\n        draft_height = script.height\n        logger.info(f\"draft size: {draft_width}x{draft_height}, transform_x: {transform_x}, transform_y: {transform_y}\")\n\n        # 4. 创建图像调节设置\n        clip_settings = draft.ClipSettings(\n            alpha=alpha,\n            scale_x=scale_x,\n            scale_y=scale_y,\n            transform_x=transform_x / draft_width,  #半画布宽单位\n            transform_y=transform_y / draft_height  #为半画布高单位\n        )\n        \n        # 5. 计算在时间轴上的显示时长（source duration）\n        display_duration = video['end'] - video['start']\n        \n        # 5.5 计算变速（如果提供了场景时间线）\n        speed = 1.0\n        actual_duration = display_duration  # 默认实际时长等于显示时长\n        if scene_timeline:\n            scene_duration = scene_timeline['end'] - scene_timeline['start']\n            if scene_duration > 0:\n                # speed = 时间轴时长 / 场景时长\n                # 例如：时间轴2秒，场景1秒，则speed=2（2倍速）\n                speed = display_duration / scene_duration\n                actual_duration = scene_duration  # 实际播放时长为场景时长\n                logger.info(f\"Video speed calculated: {speed}x (display_duration={display_duration}, scene_duration={scene_duration})\")\n        \n        # 6. 创建视频片段\n        # 用户传入 volume 范围为 [0, 10]，剪映内部范围为 [0, 10]\n        raw_volume = video.get('volume', 1.0)\n        video_segment = draft.VideoSegment(\n            material=video_material, \n            target_timerange=trange(start=video['start'], duration=display_duration),\n            source_timerange=trange(start=0, duration=min(video_material.duration, display_duration)),\n            speed=speed,  # 使用计算出的速度\n            volume=raw_volume,\n            clip_settings=clip_settings\n        )\n        logger.info(f\"video_path: {video_path}, start: {video['start']}, target_duration: {target_duration}, display_duration: {display_duration}, speed: {speed}, raw_volume: {raw_volume}\")\n\n        # 6. 添加转场效果（如果指定了）\n        transition_name = video.get('transition')\n        if transition_name:\n            transition_type = find_transition_type_by_name(transition_name)\n            if transition_type:\n                transition_duration = video.get('transition_duration', 500000)  # 默认500ms\n                try:\n                    video_segment.add_transition(transition_type, duration=transition_duration)\n                    logger.info(f\"Added transition '{transition_name}' with duration {transition_duration}us\")\n                except Exception as e:\n                    logger.warning(f\"Failed to add transition '{transition_name}': {str(e)}\")\n            else:\n                logger.warning(f\"Transition type not found for name: {transition_name}\")\n\n        # 7. 向指定轨道添加片段\n        script.add_segment(video_segment, track_name)\n\n        segment_info = SegmentInfo(\n            id=video_segment.segment_id,\n            start=video['start'],\n            end=video['end'],\n        )\n\n        return video_segment.segment_id, segment_info, actual_duration\n    except CustomException:\n        logger.info(f\"Add video to draft failed, draft_video_dir: {draft_video_dir}, video: {video}\")\n        raise\n    except Exception as e:\n        logger.error(f\"Add video to draft failed, error: {str(e)}\")\n        raise CustomException(err=CustomError.VIDEO_ADD_FAILED)\n\n\ndef find_transition_type_by_name(transition_name: str) -> Optional[draft.TransitionType]:\n    \"\"\"\n    根据转场名称查找对应的转场类型\n    \n    Args:\n        transition_name: 转场名称\n    \n    Returns:\n        对应的转场类型枚举，如果未找到则返回None\n    \"\"\"\n    if not transition_name:\n        return None\n        \n    try:\n        return draft.TransitionType.from_name(transition_name)\n    except ValueError:\n        logger.warning(f\"Transition type not found for name: {transition_name}\")\n        return None\n\n\ndef parse_video_data(json_str: str) -> List[Dict[str, Any]]:\n    \"\"\"\n    解析视频数据的JSON字符串，处理可选字段的默认值\n    \n    Args:\n        json_str: 包含视频数据的JSON字符串，格式如下：\n        [ \n            {\n                \"video_url\": \"https://example.com/video1.mp4\", // [必选] 视频文件的URL地址\n                \"width\": 1920, // [可选] 视频宽度，不传则自动获取视频文件尺寸\n                \"height\": 1080, // [可选] 视频高度，不传则自动获取视频文件尺寸\n                \"start\": 0.0, // [必选] 视频在时间轴上的开始时间 \n                \"end\": 12000000.0, // [必选] 视频在时间轴上的结束时间 \n                \"duration\": 12000000.0, // [可选] 视频总时长(微秒)，如果不传则默认为end-start\n                \"mask\": \"\", // 遮罩类型[可选]，默认值为None\n                \"transition\": \"\", // 转场效果名称[可选]，默认值为None\n                \"transition_duration\": 500000.0, // 转场持续时间(微秒)[可选]，默认值为500000\n                \"volume\": 1.0, // 音量大小[0, 10][可选]，默认值为1.0，10为最大音量\n            } \n        ]\n        \n    Returns:\n        包含视频对象的数组，每个对象都处理了默认值\n        \n    Raises:\n        json.JSONDecodeError: 当JSON格式错误时抛出\n        KeyError: 当缺少必选字段时抛出\n    \"\"\"\n    try:\n        # 解析JSON字符串\n        data = json.loads(json_str)\n    except json.JSONDecodeError as e:\n        raise CustomException(CustomError.INVALID_VIDEO_INFO, f\"JSON parse error: {e.msg}\")\n    \n    # 确保输入是列表\n    if not isinstance(data, list):\n        raise CustomException(CustomError.INVALID_VIDEO_INFO, \"video_infos should be a list\")\n    \n    result = []\n    \n    for i, item in enumerate(data):\n        if not isinstance(item, dict):\n            raise CustomException(CustomError.INVALID_VIDEO_INFO, f\"the {i}th item should be a dict\")\n        \n        # 检查必选字段（移除width和height，因为它们现在是可选的）\n        required_fields = [\"video_url\", \"start\", \"end\"]\n        missing_fields = [field for field in required_fields if field not in item]\n        \n        if missing_fields:\n            raise CustomException(CustomError.INVALID_VIDEO_INFO, f\"the {i}th item is missing required fields: {', '.join(missing_fields)}\")\n        \n        # 如果没有提供duration，则计算为end-start\n        duration = item.get(\"duration\", item[\"end\"] - item[\"start\"])\n        \n        # 创建处理后的对象，设置默认值\n        processed_item = {\n            \"video_url\": item[\"video_url\"],\n            \"width\": item.get(\"width\"),  # 可选参数\n            \"height\": item.get(\"height\"),  # 可选参数\n            \"start\": item[\"start\"],\n            \"end\": item[\"end\"],\n            \"duration\": duration,\n            \"mask\": item.get(\"mask\", None),  # 默认值 None\n            \"transition\": item.get(\"transition\", None),  # 默认值 None\n            \"transition_duration\": item.get(\"transition_duration\", 500000),  # 默认值 500000\n            \"volume\": item.get(\"volume\", 1.0)  # 默认值 1.0\n        }\n        \n        # 验证数值范围：用户传入范围 [0, 10]，超范围时给默认值\n        if processed_item[\"volume\"] < 0 or processed_item[\"volume\"] > 10:\n            logger.warning(f\"Volume {processed_item['volume']} out of range [0, 10], using default 1.0\")\n            processed_item[\"volume\"] = 1.0\n        \n        if processed_item[\"transition_duration\"] < 0:\n            # 转场持续时间必须为非负数，给默认值\n            processed_item[\"transition_duration\"] = 500000\n        \n        result.append(processed_item)\n    \n    return result\n"
  },
  {
    "path": "src/service/audio_infos.py",
    "content": "from src.utils.logger import logger\nimport json\nfrom typing import List, Optional, Dict, Any\n\n\ndef audio_infos(\n    mp3_urls: List[str],\n    timelines: List[Dict[str, int]],\n    audio_effect: Optional[str] = None,\n    volume: Optional[float] = None\n) -> str:\n    \"\"\"\n    根据音频URL和时间线生成音频信息JSON字符串\n    \n    Args:\n        mp3_urls: 音频文件URL数组\n        timelines: 时间线数组\n        audio_effect: 音频效果（可选）\n        volume: 音量（可选）\n        \n    Returns:\n        str: JSON字符串格式的音频信息\n        \n    Raises:\n        无异常抛出，长度不匹配时以最短的为准\n    \"\"\"\n    logger.info(f\"audio_infos called with {len(mp3_urls)} audio files and {len(timelines)} timelines\")\n    \n    # 长度不相等时以最短的为准\n    if len(mp3_urls) != len(timelines):\n        min_len = min(len(mp3_urls), len(timelines))\n        logger.warning(f\"mp3_urls length ({len(mp3_urls)}) does not match timelines length ({len(timelines)}), using shorter length: {min_len}\")\n        mp3_urls = mp3_urls[:min_len]\n        timelines = timelines[:min_len]\n    \n    # 构建音频信息列表\n    infos = []\n    for i, (audio_url, timeline) in enumerate(zip(mp3_urls, timelines)):\n        info = {\n            \"audio_url\": audio_url,\n            \"start\": timeline[\"start\"],\n            \"end\": timeline[\"end\"]\n        }\n        \n        # 添加可选参数\n        if audio_effect is not None:\n            info[\"audio_effect\"] = audio_effect\n            \n        if volume is not None:\n            info[\"volume\"] = volume\n            \n        infos.append(info)\n        logger.info(f\"Processed audio info {i+1}: {info}\")\n    \n    # 转换为JSON字符串\n    infos_json = json.dumps(infos, ensure_ascii=False)\n    logger.info(f\"Generated audio infos JSON with {len(infos)} items\")\n    \n    return infos_json"
  },
  {
    "path": "src/service/audio_timelines.py",
    "content": "from src.utils.logger import logger\nfrom src.utils.download import download\nfrom src.utils.media import get_media_duration\nfrom exceptions import CustomException, CustomError\nimport config\nimport os\nfrom typing import List, Tuple, Optional\n\n\ndef audio_timelines(links: List[str]) -> Tuple[List[dict], List[dict]]:\n    \"\"\"\n    根据音频文件时长计算时间线分割点\n    \n    Args:\n        links: 音频文件URL数组\n        \n    Returns:\n        tuple: (timelines, all_timelines)\n        \n    Raises:\n        CustomException: 处理过程中出现错误\n    \"\"\"\n    logger.info(f\"audio_timelines called with {len(links)} audio files\")\n    \n    if not links:\n        logger.warning(\"No audio links provided\")\n        return [], [{\"start\": 0, \"end\": 0}]\n    \n    temp_files = []\n    durations = []\n    \n    try:\n        # 1. 下载所有音频文件并获取时长\n        for i, link in enumerate(links):\n            logger.info(f\"Processing audio file {i+1}/{len(links)}: {link}\")\n            temp_file_path = None\n            try:\n                # 下载音频文件\n                temp_file_path = download(link, config.TEMP_DIR)\n                temp_files.append(temp_file_path)\n                \n                # 获取音频时长\n                duration_microseconds = get_media_duration(temp_file_path)\n                if duration_microseconds is None:\n                    raise CustomException(CustomError.AUDIO_DURATION_GET_FAILED, f\"Failed to get duration for audio: {link}\")\n                \n                durations.append(duration_microseconds)\n                logger.info(f\"Audio {i+1} duration: {duration_microseconds} microseconds\")\n                \n            except CustomException:\n                raise\n            except Exception as e:\n                logger.error(f\"Error processing audio file {link}: {str(e)}\")\n                raise CustomException(CustomError.AUDIO_DURATION_GET_FAILED, f\"Error processing audio file {link}: {str(e)}\")\n        \n        # 2. 计算时间线\n        timelines, all_timelines = _calculate_timelines(durations)\n        \n        logger.info(f\"Calculated timelines for {len(links)} audio files\")\n        return timelines, all_timelines\n        \n    finally:\n        # 3. 清理临时文件\n        _cleanup_temp_files(temp_files)\n\n\ndef _calculate_timelines(durations: List[int]) -> Tuple[List[dict], List[dict]]:\n    \"\"\"\n    根据音频时长计算时间线\n    \n    Args:\n        durations: 音频时长列表（微秒）\n        \n    Returns:\n        tuple: (timelines, all_timelines)\n    \"\"\"\n    if not durations:\n        return [], [{\"start\": 0, \"end\": 0}]\n    \n    # 计算累积时长\n    cumulative_durations = []\n    cumulative = 0\n    for duration in durations:\n        cumulative_durations.append({\n            \"start\": cumulative,\n            \"end\": cumulative + duration\n        })\n        cumulative += duration\n    \n    # 返回结果\n    return cumulative_durations, [{\"start\": 0, \"end\": cumulative}]\n\n\ndef _cleanup_temp_files(temp_files: List[str]) -> None:\n    \"\"\"\n    清理临时文件\n    \n    Args:\n        temp_files: 临时文件路径列表\n    \"\"\"\n    for temp_file_path in temp_files:\n        if temp_file_path and os.path.exists(temp_file_path):\n            try:\n                os.remove(temp_file_path)\n                logger.info(f\"Temporary file removed: {temp_file_path}\")\n            except Exception as cleanup_error:\n                logger.warning(f\"Failed to cleanup temporary file {temp_file_path}: {cleanup_error}\")"
  },
  {
    "path": "src/service/caption_infos.py",
    "content": "from src.utils.logger import logger\nimport json\nfrom typing import List, Optional, Dict, Any\n\n\ndef caption_infos(\n    texts: List[str],\n    timelines: List[Dict[str, int]],\n    font_size: Optional[int] = None,\n    keyword_color: Optional[str] = None,\n    keyword_border_color: Optional[str] = None,\n    keyword_font_size: Optional[int] = None,\n    keywords: Optional[List[str]] = None,\n    in_animation: Optional[str] = None,\n    in_animation_duration: Optional[int] = None,\n    loop_animation: Optional[str] = None,\n    loop_animation_duration: Optional[int] = None,\n    out_animation: Optional[str] = None,\n    out_animation_duration: Optional[int] = None,\n    transition: Optional[str] = None,\n    transition_duration: Optional[int] = None\n) -> str:\n    \"\"\"\n    根据文本和时间线生成字幕信息JSON字符串\n    \n    Args:\n        texts: 文本列表\n        timelines: 时间线数组\n        font_size: 字体大小（可选）\n        keyword_color: 关键词颜色（可选）\n        keyword_border_color: 关键词边框颜色（可选）\n        keyword_font_size: 关键词字体大小（可选）\n        keywords: 文本里面的重点词列表（可选）\n        in_animation: 入场动画名称（可选）\n        in_animation_duration: 入场动画时长（可选）\n        loop_animation: 组合动画名称（可选）\n        loop_animation_duration: 循环动画单次循环时长，微秒（可选）\n        out_animation: 出场动画名称（可选）\n        out_animation_duration: 出场动画时长（可选）\n        transition: 转场名称（可选）\n        transition_duration: 转场时长（可选）\n        \n    Returns:\n        str: JSON字符串格式的字幕信息\n        \n    Raises:\n        无异常抛出，长度不匹配时以最短的为准\n    \"\"\"\n    logger.info(f\"caption_infos called with {len(texts)} texts and {len(timelines)} timelines\")\n    \n    # 长度不相等时以最短的为准\n    if len(texts) != len(timelines):\n        min_len = min(len(texts), len(timelines))\n        logger.warning(f\"texts length ({len(texts)}) does not match timelines length ({len(timelines)}), using shorter length: {min_len}\")\n        texts = texts[:min_len]\n        timelines = timelines[:min_len]\n    \n    # 构建字幕信息列表\n    infos = []\n    for i, (text, timeline) in enumerate(zip(texts, timelines)):\n        info = _build_caption_info(text, timeline, i, keywords, \n                                font_size, keyword_color, keyword_border_color, keyword_font_size,\n                                in_animation, in_animation_duration,\n                                loop_animation, loop_animation_duration,\n                                out_animation, out_animation_duration,\n                                transition, transition_duration)\n        infos.append(info)\n        logger.info(f\"Processed caption info {i+1}: {info}\")\n    \n    # 转换为JSON字符串\n    infos_json = json.dumps(infos, ensure_ascii=False)\n    logger.info(f\"Generated caption infos JSON with {len(infos)} items\")\n    \n    return infos_json\n\n\ndef _build_caption_info(text, timeline, index, keywords,\n                       font_size, keyword_color, keyword_border_color, keyword_font_size,\n                       in_animation, in_animation_duration,\n                       loop_animation, loop_animation_duration,\n                       out_animation, out_animation_duration,\n                       transition, transition_duration):\n    \"\"\"构建单个字幕信息字典\"\"\"\n    info = {\n        \"start\": timeline[\"start\"],\n        \"end\": timeline[\"end\"],\n        \"text\": text\n    }\n    \n    # 添加关键词信息，如果keywords存在且有足够的关键词，则按索引分配\n    # 如果keywords数量少于文本数量，只有前几个文本有关键词，其余为空字符串\n    if keywords is not None and len(keywords) > 0:\n        if index < len(keywords):\n            info[\"keyword\"] = keywords[index]\n        else:\n            info[\"keyword\"] = \"\"  # 当关键词不够时，后续文本关键词设为空字符串\n    \n    # 添加可选参数\n    if keyword_color is not None:\n        info[\"keyword_color\"] = keyword_color\n    \n    if keyword_border_color is not None:\n        info[\"keyword_border_color\"] = keyword_border_color\n    \n    if keyword_font_size is not None:\n        info[\"keyword_font_size\"] = keyword_font_size\n    \n    if font_size is not None:\n        info[\"font_size\"] = font_size\n    \n    # 添加动画参数\n    if in_animation is not None:\n        info[\"in_animation\"] = in_animation\n    \n    if in_animation_duration is not None:\n        info[\"in_animation_duration\"] = in_animation_duration\n    \n    if loop_animation is not None:\n        info[\"loop_animation\"] = loop_animation\n    \n    if loop_animation_duration is not None:\n        info[\"loop_animation_duration\"] = loop_animation_duration\n    \n    if out_animation is not None:\n        info[\"out_animation\"] = out_animation\n    \n    if out_animation_duration is not None:\n        info[\"out_animation_duration\"] = out_animation_duration\n    \n    if transition is not None:\n        info[\"transition\"] = transition\n    \n    if transition_duration is not None:\n        info[\"transition_duration\"] = transition_duration\n    \n    return info\n"
  },
  {
    "path": "src/service/create_draft.py",
    "content": "from src.utils.logger import logger\nimport config\nimport src.pyJianYingDraft as draft\nfrom src.utils.draft_cache import update_cache\nfrom exceptions import CustomException, CustomError\nimport datetime\nimport uuid\nimport os\nimport shutil\n\n\ndef create_draft(width: int, height: int) -> str:\n    \"\"\"\n    基于模板创建剪映草稿的业务逻辑\n    \n    Args:\n        width: 草稿宽度\n        height: 草稿高度\n    \n    Returns:\n        draft_url: 草稿URL\n\n    Raises:\n        CustomException: 草稿创建失败\n    \"\"\"\n    # 生成一个草稿ID\n    timestamp = datetime.datetime.now().strftime(\"%Y%m%d%H%M%S\")\n    unique_id = uuid.uuid4().hex[:8]\n    draft_id = f\"{timestamp}{unique_id}\"\n    logger.info(f\"draft_id: {draft_id}, width: {width}, height: {height}\")\n\n    # 使用模板创建草稿\n    try:\n        # 复制模板到新草稿目录\n        template_path = os.path.join(config.TEMPLATE_DIR, \"default2\")\n        draft_path = os.path.join(config.DRAFT_DIR, draft_id)\n        if os.path.exists(draft_path): shutil.rmtree(draft_path)\n        shutil.copytree(template_path, draft_path)\n        \n        # 在创建草稿时，确保两个文件都存在且内容相同\n        draft_info_path = os.path.join(draft_path, \"draft_info.json\")\n        draft_content_path = os.path.join(draft_path, \"draft_content.json\")\n        \n        # 加载模板草稿，然后修改配置\n        script = draft.ScriptFile.load_template(draft_info_path)\n        # 启用双文件兼容模式，这样保存时会自动同步两个文件\n        script.dual_file_compatibility = True\n        script.width, script.height = width, height\n        script.content[\"canvas_config\"][\"width\"], script.content[\"canvas_config\"][\"height\"] = width, height\n        \n        # 保存修改后的草稿（会自动同步到两个文件）\n        script.save_path = draft_content_path\n        script.save()\n        \n        # 添加空的主轨道（仅当没有主轨道时添加）\n        main_track_name = \"main_track\"\n        script.add_track(track_type=draft.TrackType.video, track_name=main_track_name, relative_index=0)\n        logger.info(f\"Added empty main track: {main_track_name}\")\n        \n        script.save()\n        \n    except Exception as e:\n        logger.error(f\"create draft failed: {e}\")\n        raise CustomException(CustomError.DRAFT_CREATE_FAILED)\n\n    # 缓存草稿并返回URL\n    update_cache(draft_id, script)\n    logger.info(f\"create draft success: {draft_id}\")\n    return config.DRAFT_URL + \"?draft_id=\" + draft_id"
  },
  {
    "path": "src/service/easy_create_material.py",
    "content": "import json\nimport os\nfrom typing import Optional\nfrom urllib.parse import urlparse\nimport asyncio\n\nfrom src.utils.logger import logger\nfrom src.pyJianYingDraft import ScriptFile, TrackType, trange, TextSegment, TextStyle, ClipSettings\nimport src.pyJianYingDraft as draft\nfrom src.utils.draft_cache import DRAFT_CACHE\nfrom exceptions import CustomException, CustomError\nfrom src.utils import helper\nimport config\nfrom src.utils.draft_lock_manager import DraftLockManager\n\n\ndef easy_create_material(\n    draft_url: str,\n    audio_url: str,\n    text: Optional[str] = None,\n    img_url: Optional[str] = None,\n    video_url: Optional[str] = None,\n    text_color: str = \"#ffffff\",\n    font_size: int = 15,\n    text_transform_y: int = 0\n) -> str:\n    \"\"\"\n    在现有草稿中添加多种类型的素材内容，包括音频、视频、图片和文字\n    \n    Args:\n        draft_url: 目标草稿的完整URL，必选参数\n        audio_url: 音频文件URL，必选参数，不能为空或\"null\"\n        text: 要添加的文字内容，可选参数，默认为None\n        img_url: 图片文件URL，可选参数，默认为None\n        video_url: 视频文件URL，可选参数，默认为None\n        text_color: 文字颜色（十六进制格式），默认值：\"#ffffff\"\n        font_size: 字体大小，默认值：15\n        text_transform_y: 文字Y轴位置偏移，默认值：0\n    \n    Returns:\n        draft_url: 草稿URL\n    \n    Raises:\n        CustomException: 素材创建失败\n    \"\"\"\n    logger.info(f\"easy_create_material started, draft_url: {draft_url}, audio_url: {audio_url}\")\n    logger.info(f\"Materials to add - text: {text is not None}, img_url: {img_url is not None}, video_url: {video_url is not None}\")\n\n    # 1. 提取草稿ID并验证\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if (not draft_id) or (draft_id not in DRAFT_CACHE):\n        logger.error(f\"Invalid draft_url or draft not found in cache: {draft_url}\")\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    # 2. 验证音频URL（必选参数）\n    if not audio_url or audio_url.lower() == \"null\" or audio_url.strip() == \"\":\n        logger.error(\"Audio URL is required and cannot be empty or null\")\n        raise CustomException(CustomError.MATERIAL_CREATE_FAILED)\n\n    # 3. 从缓存中获取草稿\n    script: ScriptFile = DRAFT_CACHE[draft_id]\n    logger.info(f\"Retrieved script from cache, draft_id: {draft_id}\")\n\n    try:\n        # 4. 添加音频（必须的）\n        audio_added = add_audio_material(script, draft_id, audio_url)\n        logger.info(f\"Audio material added: {audio_added}\")\n\n        # 5. 添加视频（如果提供）\n        if video_url and video_url.strip() and video_url.lower() != \"null\":\n            video_added = add_video_material(script, draft_id, video_url)\n            logger.info(f\"Video material added: {video_added}\")\n\n        # 6. 添加图片（如果提供）\n        if img_url and img_url.strip() and img_url.lower() != \"null\":\n            image_added = add_image_material(script, draft_id, img_url)\n            logger.info(f\"Image material added: {image_added}\")\n\n        # 7. 添加文字（如果提供）\n        if text and text.strip():\n            text_added = add_text_material(script, text, text_color, font_size, text_transform_y)\n            logger.info(f\"Text material added: {text_added}\")\n\n        # 8. 保存草稿\n        script.save()\n        logger.info(f\"Draft saved successfully\")\n\n        logger.info(f\"easy_create_material completed successfully - draft_id: {draft_id}\")\n        return draft_url\n        \n    except Exception as e:\n        logger.error(f\"Failed to create materials: {str(e)}\")\n        raise CustomException(CustomError.MATERIAL_CREATE_FAILED)\n\n\nasync def easy_create_material_async(\n    draft_url: str,\n    audio_url: str,\n    text: Optional[str] = None,\n    img_url: Optional[str] = None,\n    video_url: Optional[str] = None,\n    text_color: str = \"#ffffff\",\n    font_size: int = 15,\n    text_transform_y: int = 0,\n    lock_timeout: float = 30.0\n) -> str:\n    \"\"\"\n    在现有草稿中添加多种类型的素材内容的异步版本（带并发锁保护）\n    \n    功能：\n    1. 使用 DraftLockManager 防止同一草稿的并发写操作\n    2. 支持超时控制，避免无限等待\n    3. 自动释放锁，即使发生异常\n    \n    Args:\n        draft_url: 目标草稿的完整 URL，必选参数\n        audio_url: 音频文件 URL，必选参数，不能为空或\"null\"\n        text: 要添加的文字内容，可选参数，默认为 None\n        img_url: 图片文件 URL，可选参数，默认为 None\n        video_url: 视频文件 URL，可选参数，默认为 None\n        text_color: 文字颜色（十六进制格式），默认值：\"#ffffff\"\n        font_size: 字体大小，默认值：15\n        text_transform_y: 文字 Y 轴位置偏移，默认值：0\n        lock_timeout: 获取锁的超时时间（秒），默认 30 秒\n    \n    Returns:\n        draft_url: 草稿 URL\n    \n    Raises:\n        CustomException: 素材创建失败或获取锁超时\n        asyncio.TimeoutError: 等待锁超时时抛出\n    \n    Example:\n        >>> result = await easy_create_material_async(\n        ...     draft_url=\"http://.../draft_id=123\",\n        ...     audio_url=\"https://.../audio.mp3\",\n        ...     text=\"Hello\"\n        ... )\n    \"\"\"\n    # 提取草稿 ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if not draft_id:\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n    \n    # 获取锁管理器\n    lock_manager = DraftLockManager()\n    \n    # 尝试获取锁\n    try:\n        await lock_manager.acquire_lock(draft_id, timeout=lock_timeout)\n        logger.info(f\"Lock acquired for draft_id: {draft_id}\")\n    except asyncio.TimeoutError:\n        logger.error(f\"Timeout waiting for lock on draft_id: {draft_id}\")\n        raise CustomException(\n            CustomError.DRAFT_LOCK_TIMEOUT,\n            f\"Failed to acquire lock for draft {draft_id} within {lock_timeout}s\"\n        )\n    \n    try:\n        # 调用内部处理函数（不获取锁，由外层控制）\n        return easy_create_material(\n            draft_url=draft_url,\n            audio_url=audio_url,\n            text=text,\n            img_url=img_url,\n            video_url=video_url,\n            text_color=text_color,\n            font_size=font_size,\n            text_transform_y=text_transform_y\n        )\n    finally:\n        # 释放锁\n        await lock_manager.release_lock(draft_id)\n        logger.info(f\"Lock released for draft_id: {draft_id}\")\n\n\ndef add_video_material(script: ScriptFile, draft_id: str, video_url: str) -> bool:\n    \"\"\"\n    添加视频素材到草稿（固定5秒时长）\n    \n    与add_videos接口保持一致的处理方式：\n    1. 创建规范的视频资源目录\n    2. 使用parse_video_data解析视频信息\n    3. 调用add_video_to_draft添加视频\n    \n    Args:\n        script: 草稿文件对象\n        draft_id: 草稿ID\n        video_url: 视频文件URL\n    \n    Returns:\n        是否成功添加\n    \"\"\"\n    try:\n        logger.info(f\"Adding video material: {video_url}\")\n        \n        # 1. 创建视频资源目录（与add_videos保持一致）\n        draft_dir = os.path.join(config.DRAFT_DIR, draft_id)\n        draft_video_dir = os.path.join(draft_dir, \"assets\", \"videos\")\n        os.makedirs(name=draft_video_dir, exist_ok=True)\n        logger.info(f\"Created video directory: {draft_video_dir}\")\n        \n        # 2. 构造视频信息JSON（固定5秒时长）\n        video_infos = json.dumps([{\n            \"video_url\": video_url,\n            \"width\": 1920,\n            \"height\": 1080,\n            \"start\": 0,\n            \"end\": 5000000,  # 5秒（5 * 1000000微秒）\n            \"duration\": 5000000,\n            \"volume\": 1.0\n        }])\n        \n        # 3. 解析视频信息\n        from src.service.add_videos import parse_video_data, add_video_to_draft\n        video_items = parse_video_data(video_infos)\n        if not video_items:\n            logger.error(\"No video items parsed\")\n            return False\n        \n        # 4. 添加视频轨道（与 add_videos 一致：add_track_ordered 按全局调用顺序叠层）\n        track_name = f\"video_track_{helper.gen_unique_id()}\"\n        script.add_track_ordered(track_type=TrackType.video, track_name=track_name)\n        logger.info(f\"Added video track: {track_name}\")\n        \n        # 5. 添加视频到轨道（传递正确的视频资源目录）\n        add_video_to_draft(script, track_name, draft_video_dir, video_items[0])\n        \n        return True\n    except Exception as e:\n        logger.error(f\"Failed to add video material: {str(e)}\")\n        return False\n\n\ndef add_image_material(script: ScriptFile, draft_id: str, img_url: str) -> bool:\n    \"\"\"\n    添加图片素材到草稿\n    \n    与add_images接口保持一致的处理方式：\n    1. 创建规范的图片资源目录\n    2. 使用parse_image_data解析图片信息\n    3. 调用add_image_to_draft添加图片\n    \n    Args:\n        script: 草稿文件对象\n        draft_id: 草稿ID\n        img_url: 图片文件URL\n    \n    Returns:\n        是否成功添加\n    \"\"\"\n    try:\n        logger.info(f\"Adding image material: {img_url}\")\n        \n        # 1. 创建图片资源目录（与add_images保持一致）\n        draft_dir = os.path.join(config.DRAFT_DIR, draft_id)\n        draft_image_dir = os.path.join(draft_dir, \"assets\", \"images\")\n        os.makedirs(name=draft_image_dir, exist_ok=True)\n        logger.info(f\"Created image directory: {draft_image_dir}\")\n        \n        # 2. 构造图片信息JSON（默认尺寸和3秒显示时长）\n        image_infos = json.dumps([{\n            \"image_url\": img_url,\n            \"width\": 1024,\n            \"height\": 1024,\n            \"start\": 0,\n            \"end\": 3000000,  # 3秒（3 * 1000000微秒）\n        }])\n        \n        # 3. 解析图片信息\n        from src.service.add_images import parse_image_data, add_image_to_draft\n        image_items = parse_image_data(image_infos)\n        if not image_items:\n            logger.error(\"No image items parsed\")\n            return False\n        \n        # 4. 添加图片轨道（与 add_images 一致：add_track_ordered 按全局调用顺序叠层）\n        track_name = f\"image_track_{helper.gen_unique_id()}\"\n        script.add_track_ordered(track_type=TrackType.video, track_name=track_name)\n        logger.info(f\"Added image track: {track_name}\")\n        \n        # 5. 添加图片到轨道（传递正确的图片资源目录）\n        add_image_to_draft(script, track_name, draft_image_dir, image_items[0])\n        \n        return True\n    except Exception as e:\n        logger.error(f\"Failed to add image material: {str(e)}\")\n        return False\n\n\ndef add_audio_material(script: ScriptFile, draft_id: str, audio_url: str) -> bool:\n    \"\"\"\n    添加音频素材到草稿（固定5秒时长）\n    \n    与add_audios接口保持一致的处理方式：\n    1. 创建规范的音频资源目录\n    2. 使用parse_audio_data解析音频信息\n    3. 调用add_audio_to_draft添加音频\n    \n    Args:\n        script: 草稿文件对象\n        draft_id: 草稿ID\n        audio_url: 音频文件URL\n    \n    Returns:\n        是否成功添加\n    \"\"\"\n    try:\n        logger.info(f\"Adding audio material: {audio_url}\")\n        \n        # 1. 创建音频资源目录（与add_audios保持一致）\n        draft_dir = os.path.join(config.DRAFT_DIR, draft_id)\n        draft_audio_dir = os.path.join(draft_dir, \"assets\", \"audios\")\n        os.makedirs(name=draft_audio_dir, exist_ok=True)\n        logger.info(f\"Created audio directory: {draft_audio_dir}\")\n        \n        # 2. 构造音频信息JSON（固定5秒时长）\n        audio_infos = json.dumps([{\n            \"audio_url\": audio_url,\n            \"start\": 0,\n            \"end\": 5000000,  # 5秒（5 * 1000000微秒）\n            \"volume\": 1.0\n        }])\n        \n        # 3. 解析音频信息\n        from src.service.add_audios import parse_audio_data, add_audio_to_draft\n        audio_items = parse_audio_data(audio_infos)\n        if not audio_items:\n            logger.error(\"No audio items parsed\")\n            return False\n        \n        # 4. 添加音频轨道\n        track_name = f\"audio_track_{helper.gen_unique_id()}\"\n        script.add_track(track_type=TrackType.audio, track_name=track_name, relative_index=10)\n        logger.info(f\"Added audio track: {track_name}\")\n        \n        # 5. 添加音频到轨道（传递正确的音频资源目录）\n        add_audio_to_draft(script, track_name, draft_audio_dir, audio_items[0])\n        \n        return True\n    except Exception as e:\n        logger.error(f\"Failed to add audio material: {str(e)}\")\n        return False\n\n\ndef add_text_material(\n    script: ScriptFile, \n    text: str, \n    text_color: str = \"#ffffff\", \n    font_size: int = 15, \n    text_transform_y: int = 0\n) -> bool:\n    \"\"\"\n    添加文字素材到草稿\n    \n    Args:\n        script: 草稿文件对象\n        text: 文字内容\n        text_color: 文字颜色\n        font_size: 字体大小\n        text_transform_y: Y轴位置偏移\n    \n    Returns:\n        是否成功添加\n    \"\"\"\n    try:\n        logger.info(f\"Adding text material: {text[:20]}...\")\n        \n        # 创建文字轨道（与 add_captions 等一致：按调用顺序叠在当前最上层之上）\n        track_name = f\"text_track_{helper.gen_unique_id()}\"\n        script.add_track_ordered(track_type=TrackType.text, track_name=track_name)\n        \n        # 创建图像调节设置\n        # 获取草稿的高用于transform坐标转换\n        draft_height = script.height\n        logger.info(f\"draft height: {draft_height}, text_transform_y: {text_transform_y}\")\n        \n        clip_settings = ClipSettings(\n            transform_y=text_transform_y / draft_height  # 转换为半画布高单位\n        )\n        \n        # 创建文本样式\n        rgb_color = hex_to_rgb(text_color)\n        text_style = TextStyle(\n            align=1,  # 1为居中对齐\n            color=(rgb_color[0], rgb_color[1], rgb_color[2]),\n            size=font_size\n        )\n        \n        # 创建文本片段（默认5秒显示时长）\n        text_segment = TextSegment(\n            text=text,\n            timerange=trange(start=0, duration=5000000),  # 5秒\n            style=text_style,\n            clip_settings=clip_settings\n        )\n        \n        # 向轨道添加文本片段\n        script.add_segment(text_segment, track_name)\n        \n        logger.info(f\"Text segment created and added, text: {text}\")\n        return True\n        \n    except Exception as e:\n        logger.error(f\"Failed to add text material: {str(e)}\")\n        return False\n\n\ndef hex_to_rgb(hex_color: str) -> list:\n    \"\"\"\n    将十六进制颜色转换为RGB数组\n    \n    Args:\n        hex_color: 十六进制颜色，如 \"#ffffff\"\n    \n    Returns:\n        RGB数组，值范围为0-1\n    \"\"\"\n    # 移除 # 前缀\n    hex_color = hex_color.lstrip('#')\n    \n    # 确保是6位十六进制\n    if len(hex_color) != 6:\n        logger.warning(f\"Invalid hex color: {hex_color}, using default white\")\n        hex_color = \"ffffff\"  # 默认白色\n    \n    try:\n        # 转换为RGB\n        r = int(hex_color[0:2], 16) / 255.0\n        g = int(hex_color[2:4], 16) / 255.0\n        b = int(hex_color[4:6], 16) / 255.0\n        \n        return [r, g, b]\n    except ValueError:\n        logger.warning(f\"Failed to parse hex color: {hex_color}, using default white\")\n        return [1.0, 1.0, 1.0]  # 默认白色\n\n\ndef validate_url(url: str) -> bool:\n    \"\"\"\n    验证URL格式是否正确\n    \n    Args:\n        url: 待验证的URL\n    \n    Returns:\n        URL是否有效\n    \"\"\"\n    try:\n        result = urlparse(url)\n        return all([result.scheme, result.netloc])\n    except Exception:\n        return False"
  },
  {
    "path": "src/service/effect_infos.py",
    "content": "from src.utils.logger import logger\nimport json\nfrom typing import List, Dict\n\n\ndef effect_infos(\n    effects: List[str],\n    timelines: List[Dict[str, int]]\n) -> str:\n    \"\"\"\n    根据特效名称和时间线生成特效信息JSON字符串\n    \n    Args:\n        effects: 特效名称列表\n        timelines: 时间线数组\n        \n    Returns:\n        str: JSON字符串格式的特效信息\n        \n    Raises:\n        无异常抛出，长度不匹配时以最短的为准\n    \"\"\"\n    logger.info(f\"effect_infos called with {len(effects)} effects and {len(timelines)} timelines\")\n    \n    # 长度不相等时以最短的为准\n    if len(effects) != len(timelines):\n        min_len = min(len(effects), len(timelines))\n        logger.warning(f\"effects length ({len(effects)}) does not match timelines length ({len(timelines)}), using shorter length: {min_len}\")\n        effects = effects[:min_len]\n        timelines = timelines[:min_len]\n    \n    # 构建特效信息列表\n    infos = []\n    for i, (effect, timeline) in enumerate(zip(effects, timelines)):\n        info = {\n            \"effect_title\": effect,\n            \"start\": timeline[\"start\"],\n            \"end\": timeline[\"end\"]\n        }\n        \n        infos.append(info)\n        logger.info(f\"Processed effect info {i+1}: {info}\")\n    \n    # 转换为JSON字符串\n    infos_json = json.dumps(infos, ensure_ascii=False)\n    logger.info(f\"Generated effect infos JSON with {len(infos)} items\")\n    \n    return infos_json"
  },
  {
    "path": "src/service/filter_infos.py",
    "content": "from src.utils.logger import logger\nimport json\nfrom typing import List, Dict, Optional\n\n\ndef filter_infos(\n    filters: List[str],\n    timelines: List[Dict[str, int]],\n    intensities: Optional[List[float]] = None\n) -> str:\n    \"\"\"\n    根据滤镜名称、时间线和强度生成滤镜信息JSON字符串\n    \n    Args:\n        filters: 滤镜名称列表\n        timelines: 时间线数组\n        intensities: 滤镜强度列表(0-100)，可选，默认为100\n        \n    Returns:\n        str: JSON字符串格式的滤镜信息\n        \n    Raises:\n        无异常抛出，长度不匹配时以最短的为准\n    \"\"\"\n    logger.info(f\"filter_infos called with {len(filters)} filters, {len(timelines)} timelines, intensities: {intensities}\")\n    \n    # 确定最终处理长度（以最短的为准）\n    min_len = min(len(filters), len(timelines))\n    if intensities is not None:\n        min_len = min(min_len, len(intensities))\n    \n    if len(filters) != len(timelines) or (intensities is not None and len(intensities) != len(filters)):\n        logger.warning(f\"Length mismatch - filters: {len(filters)}, timelines: {len(timelines)}, intensities: {intensities}, using shorter length: {min_len}\")\n        filters = filters[:min_len]\n        timelines = timelines[:min_len]\n        if intensities is not None:\n            intensities = intensities[:min_len]\n    \n    # 构建滤镜信息列表\n    infos = []\n    for i, (filter_name, timeline) in enumerate(zip(filters, timelines)):\n        info = {\n            \"filter_title\": filter_name,\n            \"start\": timeline[\"start\"],\n            \"end\": timeline[\"end\"],\n            \"intensity\": intensities[i] if intensities else 100.0\n        }\n        \n        infos.append(info)\n        logger.info(f\"Processed filter info {i+1}: {info}\")\n    \n    # 转换为JSON字符串\n    infos_json = json.dumps(infos, ensure_ascii=False)\n    logger.info(f\"Generated filter infos JSON with {len(infos)} items\")\n    \n    return infos_json\n"
  },
  {
    "path": "src/service/gen_video.py",
    "content": "from src.utils.logger import logger\nfrom src.utils.video_task_manager import task_manager\nfrom src.utils.points import get_user_points\nfrom exceptions import CustomException, CustomError\nimport config\n\n\ndef gen_video(draft_url: str, apiKey: str = None) -> str:\n    \"\"\"\n    提交视频生成任务（异步处理）。\n\n    多任务可并行下载；剪映导出全局串行；上传在后台进行且不阻塞其它任务的下载与导出；\n    每个 draft_url 对应独立的 VideoGenTask，保证草稿地址与成片一一对应。\n\n    Args:\n        draft_url: 草稿URL\n        apiKey: 可选的API密钥，必须是合法的UUID格式，可以为空\n\n    Returns:\n        message: 响应消息\n    \"\"\"\n    logger.info(f\"gen_video called with draft_url: {draft_url}, apiKey provided: {apiKey is not None}\")\n    \n    try:\n        if config.ENABLE_APIKEY:\n            if apiKey == \"\": # 开启API密钥验证\n                raise CustomException(CustomError.INVALID_APIKEY)\n\n            # 查询用户积分\n            user_points = get_user_points(apiKey)\n        \n            # 检查积分是否足够（需要大于1）\n            if user_points <= 1:\n                logger.error(f\"Insufficient account balance: {user_points} for API key: {apiKey[:8]}***\")\n                raise CustomException(CustomError.INSUFFICIENT_ACCOUNT_BALANCE)\n        \n        # 验证草稿URL格式\n        validate_draft_url(draft_url)\n        \n        # 提交任务到队列，传递API密钥用于计费\n        task_manager.submit_task(draft_url, apiKey)\n        \n        logger.info(f\"Video generation task submitted for draft_url: {draft_url}\")\n        return \"视频生成任务已提交，请使用draft_url查询进度\"\n        \n    except CustomException as e:\n        # 如果是自定义异常，直接抛出\n        raise e\n    except ValueError as e:\n        logger.error(f\"Invalid draft_url: {draft_url}, error: {e}\")\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n    except Exception as e:\n        logger.error(f\"Submit video generation task failed: {e}\")\n        # 如果get_user_points失败，也抛出系统内部错误\n        raise CustomException(CustomError.INTERNAL_SERVER_ERROR)\n\n\ndef validate_draft_url(draft_url: str) -> None:\n    \"\"\"\n    验证草稿URL格式是否有效\n    \n    Args:\n        draft_url: 草稿URL\n    \n    Raises:\n        ValueError: 当URL格式无效时\n    \"\"\"\n    if not draft_url or not isinstance(draft_url, str):\n        raise ValueError(\"草稿URL不能为空\")\n    \n    draft_id = extract_draft_id_from_url(draft_url)\n    if not draft_id:\n        raise ValueError(\"无法从URL中提取draft_id\")\n\n\ndef extract_draft_id_from_url(draft_url: str) -> str:\n    \"\"\"\n    从草稿URL中提取draft_id\n    \n    Args:\n        draft_url: 草稿URL\n        \n    Returns:\n        draft_id: 草稿ID\n    \"\"\"\n    from src.utils import helper\n    return helper.get_url_param(draft_url, \"draft_id\")\n\n\ndef gen_video_status(draft_url: str) -> dict:\n    \"\"\"\n    查询视频生成任务状态\n    \n    Args:\n        draft_url: 草稿URL\n    \n    Returns:\n        任务状态信息\n    \"\"\"\n    logger.debug(f\"gen_video_status called with draft_url: {draft_url}\")\n    \n    try:\n        # 查询任务状态\n        status_info = get_task_status_info(draft_url)\n        \n        logger.debug(f\"Task status retrieved for draft_url: {draft_url}, status={status_info['status']}\")\n        return status_info\n        \n    except CustomException:\n        raise\n    except Exception as e:\n        logger.error(f\"Get video generation status failed: {e}\")\n        raise CustomException(CustomError.VIDEO_STATUS_QUERY_FAILED)\n\n\ndef get_task_status_info(draft_url: str) -> dict:\n    \"\"\"\n    获取任务状态信息\n    \n    Args:\n        draft_url: 草稿URL\n        \n    Returns:\n        任务状态信息\n        \n    Raises:\n        CustomException: 当任务不存在时\n    \"\"\"\n    status_info = task_manager.get_task_status(draft_url)\n    \n    if status_info is None:\n        logger.warning(f\"No task found for draft_url: {draft_url}\")\n        raise CustomException(CustomError.VIDEO_TASK_NOT_FOUND)\n    \n    return status_info\n\n\ndef get_gen_video_active_count() -> int:\n    \"\"\"返回当前排队中 + 渲染中的云渲染草稿数量（不含已完成/失败）。\"\"\"\n    return task_manager.get_active_render_count()\n"
  },
  {
    "path": "src/service/get_audio_duration.py",
    "content": "from src.utils.logger import logger\nfrom src.utils.download import download\nfrom src.utils.media import get_media_duration\nfrom exceptions import CustomException, CustomError\nimport config\nimport os\nfrom typing import Optional\n\n\ndef get_audio_duration(mp3_url: str) -> int:\n    \"\"\"\n    获取音频文件的时长\n    \n    Args:\n        mp3_url: 音频文件URL，支持mp3等常见音频格式\n    \n    Returns:\n        duration: 音频时长，单位：微秒\n    \n    Raises:\n        CustomException: 获取音频时长失败\n    \"\"\"\n    logger.info(f\"get_audio_duration called with mp3_url: {mp3_url}\")\n    \n    temp_file_path = None\n    try:\n        # 1. 下载音频文件到临时目录\n        logger.info(f\"Starting to download audio file from URL: {mp3_url}\")\n        temp_file_path = download(mp3_url, config.TEMP_DIR)\n        \n        # 2. 使用我们新创建的工具函数获取媒体时长\n        duration_microseconds = get_media_duration(temp_file_path)\n        \n        if duration_microseconds is None:\n            logger.error(\"Failed to get audio duration\")\n            raise CustomException(CustomError.AUDIO_DURATION_GET_FAILED, \"Failed to get audio duration\")\n        \n        logger.info(f\"Audio duration extracted successfully: {duration_microseconds/1_000_000:.6f}s ({duration_microseconds} microseconds)\")\n        return duration_microseconds\n        \n    except CustomException:\n        # CustomException 直接重新抛出，保持原有的错误信息\n        raise\n    except Exception as e:\n        logger.error(f\"Get audio duration failed with unexpected error: {str(e)}\")\n        raise CustomException(CustomError.AUDIO_DURATION_GET_FAILED, f\"Unexpected error: {str(e)}\")\n    finally:\n        # 3. 清理临时文件\n        _cleanup_temp_file(temp_file_path)\n\n\n\n\ndef _cleanup_temp_file(temp_file_path: Optional[str]) -> None:\n    \"\"\"\n    清理临时文件\n    \n    Args:\n        temp_file_path: 临时文件路径，可能为None\n    \"\"\"\n    if temp_file_path and os.path.exists(temp_file_path):\n        try:\n            os.remove(temp_file_path)\n            logger.info(f\"Temporary file removed: {temp_file_path}\")\n        except Exception as cleanup_error:\n            logger.warning(f\"Failed to cleanup temporary file {temp_file_path}: {cleanup_error}\")\n\n"
  },
  {
    "path": "src/service/get_draft.py",
    "content": "from exceptions import CustomException, CustomError\nfrom src.utils.logger import logger\nfrom src.utils import helper\nfrom typing import List\nimport config\nimport os\n\ndef gen_download_url(file_path: str) -> str:\n    \"\"\"\n    生成下载URL，将文件路径中的/app/替换成DOWNLOAD_URL\n    \n    Args:\n        file_path: 文件路径\n    \n    Returns:\n        download_url: 下载URL\n    \"\"\"\n    try:\n        relative_path = os.path.relpath(file_path, config.PROJECT_ROOT)\n    except ValueError:\n        # 如果路径不在同一驱动器等情况\n        relative_path = file_path\n\n    # 将系统路径分隔符转换为URL的正斜杠\n    relative_path = relative_path.replace(os.sep, \"/\")\n    \n    # 拼接URL\n    base_url = config.DOWNLOAD_URL.rstrip(\"/\")\n    download_url = f\"{base_url}/{relative_path}\"\n    return download_url\n\ndef batch_gen_download_url(file_paths: List[str]) -> List[str]:\n    \"\"\"\n    批量生成下载URL\n    \n    Args:\n        file_paths: 文件路径列表\n    \n    Returns:\n        download_urls: 下载URL列表\n    \"\"\"\n    download_urls = []\n    for file_path in file_paths:\n        download_url = gen_download_url(file_path)\n        download_urls.append(download_url)\n    return download_urls\n\ndef get_draft(draft_id: str) -> List[str]:\n    \"\"\"\n    获取剪映草稿的业务逻辑\n    \n    Args:\n        draft_url: 草稿URL\n    \n    Returns:\n        files: 文件列表\n\n    Raises:\n        CustomException: 自定义异常\n    \"\"\"\n\n    # 1. 从URL中提取草稿ID\n    if not draft_id:\n        logger.info(\"draft_id is empty\")\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    draft_dir = os.path.join(config.DRAFT_DIR, draft_id)\n    if not os.path.exists(draft_dir):\n        logger.info(f\"draft_dir not exists: {draft_dir}\")\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n    \n    # 2. 从草稿目录中获取文件列表\n    files = helper.get_all_files(draft_dir)\n\n    # 3. 批量生成下载URL\n    download_urls = batch_gen_download_url(files)\n\n    logger.info(f\"get draft success: {draft_id}, download urls: {download_urls}\")\n    return download_urls\n\n"
  },
  {
    "path": "src/service/get_effects.py",
    "content": "\"\"\"\n获取特效列表的业务逻辑处理模块\n\"\"\"\nimport json\nfrom typing import List, Dict, Any\nfrom src.utils.logger import logger\nfrom exceptions import CustomException, CustomError\n\n\ndef get_effects(mode: int = 0) -> List[Dict[str, Any]]:\n    \"\"\"\n    获取特效列表\n    \n    Args:\n        mode: 特效模式，0=所有，1=VIP，2=免费，默认值为 0\n    \n    Returns:\n        effects: 特效对象数组\n        \n    Raises:\n        CustomException: 获取特效列表失败\n    \"\"\"\n    logger.info(f\"get_effects called with mode: {mode}\")\n    \n    try:\n        # 1. 参数验证\n        if mode not in [0, 1, 2]:\n            logger.error(f\"Invalid mode: {mode}\")\n            raise CustomException(CustomError.EFFECT_GET_FAILED)\n        \n        # 2. 根据模式获取特效数据\n        effects = _get_effects_by_mode(mode=mode)\n        logger.info(f\"Found {len(effects)} effects for mode: {mode}\")\n        \n        # 3. 直接返回对象数组\n        logger.info(f\"Successfully returned effects array with {len(effects)} items\")\n        \n        return effects\n        \n    except CustomException:\n        logger.error(f\"Get effects failed for mode: {mode}\")\n        raise\n    except Exception as e:\n        logger.error(f\"Unexpected error in get_effects: {str(e)}\")\n        raise CustomException(CustomError.EFFECT_GET_FAILED)\n\n\ndef _get_effects_by_mode(mode: int) -> List[Dict[str, Any]]:\n    \"\"\"\n    根据模式获取对应的特效数据\n    \n    Args:\n        mode: 特效模式（0=所有，1=VIP，2=免费）\n    \n    Returns:\n        包含特效信息的列表\n    \"\"\"\n    logger.info(f\"Getting effects for mode: {mode}\")\n    \n    # 从 VideoSceneEffectType 枚举中获取所有特效\n    from src.pyJianYingDraft.metadata.video_scene_effect import VideoSceneEffectType\n    \n    all_effects = []\n    for effect_type in VideoSceneEffectType:\n        effect_info = {\n            \"name\": effect_type.value.name,\n            \"is_vip\": effect_type.value.is_vip,\n            \"resource_id\": effect_type.value.resource_id,\n            \"effect_id\": effect_type.value.effect_id,\n            \"icon_url\": \"\",  # 特效元数据中没有 icon_url\n            \"has_params\": len(effect_type.value.params) > 0\n        }\n        all_effects.append(effect_info)\n    \n    logger.info(f\"Total effects loaded: {len(all_effects)}\")\n    \n    # 根据模式过滤\n    if mode == 0:  # 所有\n        result = all_effects\n    elif mode == 1:  # VIP\n        result = [e for e in all_effects if e.get(\"is_vip\", False)]\n    elif mode == 2:  # 免费\n        result = [e for e in all_effects if not e.get(\"is_vip\", False)]\n    else:\n        result = []\n    \n    logger.info(f\"Final filtered result: {len(result)} effects\")\n    return result\n"
  },
  {
    "path": "src/service/get_filters.py",
    "content": "\"\"\"\n获取滤镜列表的业务逻辑处理模块\n\"\"\"\nimport json\nfrom typing import List, Dict, Any\nfrom src.utils.logger import logger\nfrom exceptions import CustomException, CustomError\n\n\ndef get_filters(mode: int = 0) -> List[Dict[str, Any]]:\n    \"\"\"\n    获取滤镜列表\n    \n    Args:\n        mode: 滤镜模式，0=所有，1=VIP，2=免费，默认值为 0\n    \n    Returns:\n        filters: 滤镜对象数组\n        \n    Raises:\n        CustomException: 获取滤镜列表失败\n    \"\"\"\n    logger.info(f\"get_filters called with mode: {mode}\")\n    \n    try:\n        # 1. 参数验证\n        if mode not in [0, 1, 2]:\n            logger.error(f\"Invalid mode: {mode}\")\n            raise CustomException(CustomError.FILTER_GET_FAILED)\n        \n        # 2. 根据模式获取滤镜数据\n        filters = _get_filters_by_mode(mode=mode)\n        logger.info(f\"Found {len(filters)} filters for mode: {mode}\")\n        \n        # 3. 直接返回对象数组\n        logger.info(f\"Successfully returned filters array with {len(filters)} items\")\n        \n        return filters\n        \n    except CustomException:\n        logger.error(f\"Get filters failed for mode: {mode}\")\n        raise\n    except Exception as e:\n        logger.error(f\"Unexpected error in get_filters: {str(e)}\")\n        raise CustomException(CustomError.FILTER_GET_FAILED)\n\n\ndef _get_filters_by_mode(mode: int) -> List[Dict[str, Any]]:\n    \"\"\"\n    根据模式获取对应的滤镜数据\n    \n    Args:\n        mode: 滤镜模式（0=所有，1=VIP，2=免费）\n    \n    Returns:\n        包含滤镜信息的列表\n    \"\"\"\n    logger.info(f\"Getting filters for mode: {mode}\")\n    \n    # 从 FilterType 枚举中获取所有滤镜\n    from src.pyJianYingDraft.metadata.filter_meta import FilterType\n    \n    all_filters = []\n    for filter_type in FilterType:\n        filter_info = {\n            \"name\": filter_type.value.name,\n            \"is_vip\": filter_type.value.is_vip,\n            \"resource_id\": filter_type.value.resource_id,\n            \"effect_id\": filter_type.value.effect_id,\n            \"has_params\": len(filter_type.value.params) > 0\n        }\n        all_filters.append(filter_info)\n    \n    logger.info(f\"Total filters loaded: {len(all_filters)}\")\n    \n    # 根据模式过滤\n    if mode == 0:  # 所有\n        result = all_filters\n    elif mode == 1:  # VIP\n        result = [f for f in all_filters if f.get(\"is_vip\", False)]\n    elif mode == 2:  # 免费\n        result = [f for f in all_filters if not f.get(\"is_vip\", False)]\n    else:\n        result = []\n    \n    logger.info(f\"Final filtered result: {len(result)} filters\")\n    return result\n"
  },
  {
    "path": "src/service/get_image_animations.py",
    "content": "\"\"\"\n获取图片出入场动画的业务逻辑处理模块\n\"\"\"\nimport json\nfrom typing import List, Dict, Any\nfrom src.utils.logger import logger\nfrom exceptions import CustomException, CustomError\n\n\ndef get_image_animations(mode: int = 0, type: str = \"in\") -> List[Dict[str, Any]]:\n    \"\"\"\n    获取图片出入场动画列表\n    \n    Args:\n        mode: 动画模式，0=所有，1=VIP，2=免费，默认值为0\n        type: 动画类型，in=入场，out=出场，loop=循环，默认值为\"in\"\n    \n    Returns:\n        effects: 图片出入场动画对象数组\n        \n    Raises:\n        CustomException: 获取图片动画失败\n    \"\"\"\n    logger.info(f\"get_image_animations called with mode: {mode}, type: {type}\")\n    \n    try:\n        # 1. 参数验证\n        if type not in [\"in\", \"out\", \"loop\"]:\n            logger.error(f\"Invalid animation type: {type}\")\n            raise CustomException(CustomError.IMAGE_ANIMATION_GET_FAILED)\n        \n        if mode not in [0, 1, 2]:\n            logger.error(f\"Invalid mode: {mode}\")\n            raise CustomException(CustomError.IMAGE_ANIMATION_GET_FAILED)\n        \n        # 2. 根据类型和模式获取动画数据\n        animations = _get_animations_by_type_and_mode(type=type, mode=mode)\n        logger.info(f\"Found {len(animations)} image animations for type: {type}, mode: {mode}\")\n        \n        # 3. 直接返回对象数组（不再转换为JSON字符串）\n        logger.info(f\"Successfully returned image animations array with {len(animations)} items\")\n        \n        return animations\n        \n    except CustomException:\n        logger.error(f\"Get image animations failed for type: {type}, mode: {mode}\")\n        raise\n    except Exception as e:\n        logger.error(f\"Unexpected error in get_image_animations: {str(e)}\")\n        raise CustomException(CustomError.IMAGE_ANIMATION_GET_FAILED)\n\n\ndef _get_animations_by_type_and_mode(type: str, mode: int) -> List[Dict[str, Any]]:\n    \"\"\"\n    根据动画类型和模式获取对应的图片动画数据\n    \n    Args:\n        type: 动画类型（in/out/loop）\n        mode: 动画模式（0=所有，1=VIP，2=免费）\n    \n    Returns:\n        包含图片动画信息的列表\n    \"\"\"\n    logger.info(f\"Getting image animations for type: {type}, mode: {mode}\")\n    \n    # 模拟图片动画数据库（实际项目中应该从数据库或API获取）\n    all_animations = _get_mock_image_animation_data()\n    \n    # 1. 根据类型过滤\n    filtered_by_type = [anim for anim in all_animations if anim[\"type\"] == type]\n    logger.info(f\"Filtered by type '{type}': {len(filtered_by_type)} image animations\")\n    \n    # 2. 根据模式过滤\n    if mode == 0:  # 所有\n        result = filtered_by_type\n    elif mode == 1:  # VIP\n        result = [anim for anim in filtered_by_type if anim.get(\"is_vip\", False)]\n    elif mode == 2:  # 免费\n        result = [anim for anim in filtered_by_type if not anim.get(\"is_vip\", False)]\n    else:\n        result = []\n    \n    logger.info(f\"Final filtered image animation result: {len(result)} animations\")\n    return result\n\n\ndef _get_mock_image_animation_data() -> List[Dict[str, Any]]:\n    \"\"\"\n    获取模拟的图片动画数据（实际项目中应该从真实数据源获取）\n    \n    Returns:\n        包含所有图片动画数据的列表\n    \"\"\"\n    return [\n        # 入场动画\n        {\n            \"resource_id\": \"7314291622525538844\",\n            \"type\": \"in\",\n            \"category_id\": \"pic_ruchang\",\n            \"category_name\": \"图片入场\",\n            \"duration\": 600000,\n            \"id\": \"35395179\",\n            \"name\": \"渐显出现\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/fade_in_pic_icon\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": False\n        },\n        {\n            \"resource_id\": \"7397306443147252234\",\n            \"type\": \"in\",\n            \"category_id\": \"pic_ruchang\", \n            \"category_name\": \"图片入场\",\n            \"duration\": 800000,\n            \"id\": \"77035160\",\n            \"name\": \"缩放入场\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/scale_in_pic_icon\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": True\n        },\n        {\n            \"resource_id\": \"7298765432109876544\",\n            \"type\": \"in\",\n            \"category_id\": \"pic_ruchang\",\n            \"category_name\": \"图片入场\", \n            \"duration\": 700000,\n            \"id\": \"12345679\",\n            \"name\": \"飞入效果\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/fly_in_pic_icon\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": False\n        },\n        {\n            \"resource_id\": \"7456789012345678901\",\n            \"type\": \"in\",\n            \"category_id\": \"pic_ruchang\",\n            \"category_name\": \"图片入场\",\n            \"duration\": 900000,\n            \"id\": \"98765432\",\n            \"name\": \"光影浮现\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/light_emerge_pic_icon\",\n            \"material_type\": \"sticker\", \n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": True\n        },\n        # 出场动画\n        {\n            \"resource_id\": \"7314291622525538845\",\n            \"type\": \"out\",\n            \"category_id\": \"pic_chuchang\",\n            \"category_name\": \"图片出场\",\n            \"duration\": 650000,\n            \"id\": \"35395180\",\n            \"name\": \"渐隐消失\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/fade_out_pic_icon\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": False\n        },\n        {\n            \"resource_id\": \"7397306443147252235\",\n            \"type\": \"out\",\n            \"category_id\": \"pic_chuchang\",\n            \"category_name\": \"图片出场\",\n            \"duration\": 750000,\n            \"id\": \"77035161\",\n            \"name\": \"翻转消失\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/flip_out_pic_icon\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": True\n        },\n        {\n            \"resource_id\": \"7123456789012345678\",\n            \"type\": \"out\",\n            \"category_id\": \"pic_chuchang\",\n            \"category_name\": \"图片出场\",\n            \"duration\": 550000,\n            \"id\": \"11223344\",\n            \"name\": \"碎片散落\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/shatter_out_pic_icon\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": False\n        },\n        # 循环动画\n        {\n            \"resource_id\": \"7314291622525538846\",\n            \"type\": \"loop\",\n            \"category_id\": \"pic_xunhuan\", \n            \"category_name\": \"图片循环\",\n            \"duration\": 1200000,\n            \"id\": \"35395181\",\n            \"name\": \"轻微摆动\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/sway_pic_icon\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": False\n        },\n        {\n            \"resource_id\": \"7397306443147252236\",\n            \"type\": \"loop\",\n            \"category_id\": \"pic_xunhuan\",\n            \"category_name\": \"图片循环\",\n            \"duration\": 1500000,\n            \"id\": \"77035162\",\n            \"name\": \"呼吸缩放\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/breath_scale_pic_icon\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": True\n        },\n        {\n            \"resource_id\": \"7987654321098765432\",\n            \"type\": \"loop\",\n            \"category_id\": \"pic_xunhuan\",\n            \"category_name\": \"图片循环\",\n            \"duration\": 1000000,\n            \"id\": \"55667788\",\n            \"name\": \"光晕流转\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/halo_flow_pic_icon\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": False\n        }\n    ]"
  },
  {
    "path": "src/service/get_text_animations.py",
    "content": "\"\"\"\n获取文字出入场动画的业务逻辑处理模块\n\"\"\"\nimport json\nfrom typing import List, Dict, Any\nfrom src.utils.logger import logger\nfrom exceptions import CustomException, CustomError\n\n\ndef get_text_animations(mode: int = 0, type: str = \"in\") -> List[Dict[str, Any]]:\n    \"\"\"\n    获取文字出入场动画列表\n    \n    Args:\n        mode: 动画模式，0=所有，1=VIP，2=免费，默认值为0\n        type: 动画类型，in=入场，out=出场，loop=循环，默认值为\"in\"\n    \n    Returns:\n        effects: 文字出入场动画对象数组\n        \n    Raises:\n        CustomException: 获取文字动画失败\n    \"\"\"\n    logger.info(f\"get_text_animations called with mode: {mode}, type: {type}\")\n    \n    try:\n        # 1. 参数验证\n        if type not in [\"in\", \"out\", \"loop\"]:\n            logger.error(f\"Invalid animation type: {type}\")\n            raise CustomException(CustomError.TEXT_ANIMATION_GET_FAILED)\n        \n        if mode not in [0, 1, 2]:\n            logger.error(f\"Invalid mode: {mode}\")\n            raise CustomException(CustomError.TEXT_ANIMATION_GET_FAILED)\n        \n        # 2. 根据类型和模式获取动画数据\n        animations = _get_animations_by_type_and_mode(type=type, mode=mode)\n        logger.info(f\"Found {len(animations)} animations for type: {type}, mode: {mode}\")\n        \n        # 3. 直接返回对象数组（不再转换为JSON字符串）\n        logger.info(f\"Successfully returned animations array with {len(animations)} items\")\n        \n        return animations\n        \n    except CustomException:\n        logger.error(f\"Get text animations failed for type: {type}, mode: {mode}\")\n        raise\n    except Exception as e:\n        logger.error(f\"Unexpected error in get_text_animations: {str(e)}\")\n        raise CustomException(CustomError.TEXT_ANIMATION_GET_FAILED)\n\n\ndef _get_animations_by_type_and_mode(type: str, mode: int) -> List[Dict[str, Any]]:\n    \"\"\"\n    根据动画类型和模式获取对应的动画数据\n    \n    Args:\n        type: 动画类型（in/out/loop）\n        mode: 动画模式（0=所有，1=VIP，2=免费）\n    \n    Returns:\n        包含动画信息的列表\n    \"\"\"\n    logger.info(f\"Getting animations for type: {type}, mode: {mode}\")\n    \n    # 模拟动画数据库（实际项目中应该从数据库或API获取）\n    all_animations = _get_mock_animation_data()\n    \n    # 1. 根据类型过滤\n    filtered_by_type = [anim for anim in all_animations if anim[\"type\"] == type]\n    logger.info(f\"Filtered by type '{type}': {len(filtered_by_type)} animations\")\n    \n    # 2. 根据模式过滤\n    if mode == 0:  # 所有\n        result = filtered_by_type\n    elif mode == 1:  # VIP\n        result = [anim for anim in filtered_by_type if anim.get(\"is_vip\", False)]\n    elif mode == 2:  # 免费\n        result = [anim for anim in filtered_by_type if not anim.get(\"is_vip\", False)]\n    else:\n        result = []\n    \n    logger.info(f\"Final filtered result: {len(result)} animations\")\n    return result\n\n\ndef _get_mock_animation_data() -> List[Dict[str, Any]]:\n    \"\"\"\n    获取模拟的动画数据（实际项目中应该从真实数据源获取）\n    \n    Returns:\n        包含所有动画数据的列表\n    \"\"\"\n    return [\n        # 入场动画\n        {\n            \"resource_id\": \"7314291622525538843\",\n            \"type\": \"in\",\n            \"category_id\": \"ruchang\",\n            \"category_name\": \"入场\",\n            \"duration\": 500000,\n            \"id\": \"35395178\",\n            \"name\": \"冰雪飘动\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/459c196951cadbd024456a63db89481f\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": False\n        },\n        {\n            \"resource_id\": \"7397306443147252233\",\n            \"type\": \"in\",\n            \"category_id\": \"ruchang\",\n            \"category_name\": \"入场\",\n            \"duration\": 500000,\n            \"id\": \"77035159\",\n            \"name\": \"变色输入\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/c15f5c313f8170c558043abf300a0692\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": True\n        },\n        {\n            \"resource_id\": \"7298765432109876543\",\n            \"type\": \"in\",\n            \"category_id\": \"ruchang\",\n            \"category_name\": \"入场\",\n            \"duration\": 750000,\n            \"id\": \"12345678\",\n            \"name\": \"渐显入场\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/fade_in_icon\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": False\n        },\n        # 出场动画\n        {\n            \"resource_id\": \"7314291622525538844\",\n            \"type\": \"out\",\n            \"category_id\": \"chuchang\",\n            \"category_name\": \"出场\",\n            \"duration\": 600000,\n            \"id\": \"35395179\",\n            \"name\": \"渐隐出场\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/fade_out_icon\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": False\n        },\n        {\n            \"resource_id\": \"7397306443147252234\",\n            \"type\": \"out\",\n            \"category_id\": \"chuchang\",\n            \"category_name\": \"出场\",\n            \"duration\": 800000,\n            \"id\": \"77035160\",\n            \"name\": \"旋转消失\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/rotate_out_icon\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": True\n        },\n        # 循环动画\n        {\n            \"resource_id\": \"7314291622525538845\",\n            \"type\": \"loop\",\n            \"category_id\": \"xunhuan\",\n            \"category_name\": \"循环\",\n            \"duration\": 1000000,\n            \"id\": \"35395180\",\n            \"name\": \"心跳跳动\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/heartbeat_icon\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": False\n        },\n        {\n            \"resource_id\": \"7397306443147252235\",\n            \"type\": \"loop\",\n            \"category_id\": \"xunhuan\",\n            \"category_name\": \"循环\",\n            \"duration\": 1200000,\n            \"id\": \"77035161\",\n            \"name\": \"闪烁效果\",\n            \"request_id\": \"\",\n            \"start\": 0,\n            \"icon_url\": \"https://lf5-hl-hw-effectcdn-tos.byteeffecttos.com/obj/ies.fe.effect/blink_icon\",\n            \"material_type\": \"sticker\",\n            \"panel\": \"\",\n            \"path\": \"\",\n            \"platform\": \"all\",\n            \"is_vip\": True\n        }\n    ]"
  },
  {
    "path": "src/service/get_text_effects.py",
    "content": "\"\"\"\n获取花字效果列表和解析花字效果标识符的业务逻辑处理模块\n\"\"\"\nimport json\nfrom typing import List, Dict, Any, Optional\nfrom src.utils.logger import logger\nfrom exceptions import CustomException, CustomError\nfrom config import HUAZI_CONFIG_PATH\n\n\n# 进程启动时加载花字数据到内存\n_HUAZI_DATA: List[Dict[str, Any]] = []\n_HUAZI_MAP_BY_NAME: Dict[str, Dict[str, Any]] = {}\n_HUAZI_MAP_BY_ID: Dict[str, Dict[str, Any]] = {}\n\n\ndef _load_huazi_data() -> None:\n    \"\"\"在进程启动时加载花字数据到内存\"\"\"\n    global _HUAZI_DATA, _HUAZI_MAP_BY_NAME, _HUAZI_MAP_BY_ID\n    \n    try:\n        with open(HUAZI_CONFIG_PATH, \"r\", encoding=\"utf-8\") as f:\n            _HUAZI_DATA = json.load(f)\n        \n        # 构建映射表以便快速查找\n        for item in _HUAZI_DATA:\n            title = item.get(\"title\", \"\")\n            resource_id = item.get(\"id\", \"\")\n            \n            # 标准化花字数据格式（匹配接口返回格式）\n            effect_data = {\n                \"id\": resource_id,\n                \"title\": title,\n                \"is_vip\": item.get(\"is_vip\", False)\n            }\n            \n            if title:\n                _HUAZI_MAP_BY_NAME[title] = effect_data\n            if resource_id:\n                _HUAZI_MAP_BY_ID[resource_id] = effect_data\n        \n        logger.info(f\"成功加载 {len(_HUAZI_DATA)} 个花字效果到内存\")\n        \n    except Exception as e:\n        logger.error(f\"加载花字数据失败: {str(e)}\")\n        _HUAZI_DATA = []\n        _HUAZI_MAP_BY_NAME = {}\n        _HUAZI_MAP_BY_ID = {}\n\n\n# 模块导入时自动加载数据\n_load_huazi_data()\n\n\ndef resolve_text_effect(effect_identifier: str) -> Optional[Dict[str, Any]]:\n    \"\"\"\n    解析花字效果标识符，返回对应的效果信息\n    \n    Args:\n        effect_identifier: 可以是 effect_id（数字字符串）或效果名称（中文名称）\n    \n    Returns:\n        花字效果信息字典，包含 effect_id 和 resource_id，如果未找到则返回 None\n    \"\"\"\n    logger.debug(f\"Resolving text effect: {effect_identifier}\")\n    \n    # 1. 尝试作为 effect_id 查找\n    if effect_identifier in _HUAZI_MAP_BY_ID:\n        effect_data = _HUAZI_MAP_BY_ID[effect_identifier]\n        return {\n            \"resource_id\": effect_data[\"id\"],\n            \"effect_id\": effect_data[\"id\"]\n        }\n    \n    # 2. 尝试作为中文名称查找\n    if effect_identifier in _HUAZI_MAP_BY_NAME:\n        effect_data = _HUAZI_MAP_BY_NAME[effect_identifier]\n        return {\n            \"resource_id\": effect_data[\"id\"],\n            \"effect_id\": effect_data[\"id\"]\n        }\n    \n    # 3. 如果是纯数字但不在映射表中，直接使用（可能是新的 effect_id）\n    if effect_identifier.isdigit():\n        return {\n            \"resource_id\": effect_identifier,\n            \"effect_id\": effect_identifier\n        }\n    \n    # 4. 未找到\n    logger.warning(f\"Text effect not found: {effect_identifier}\")\n    return None\n\n\ndef get_text_effects(mode: int = 0) -> List[Dict[str, Any]]:\n    \"\"\"\n    获取花字效果列表\n    \n    Args:\n        mode: 花字效果模式，0=所有，1=VIP，2=免费，默认值为 0\n    \n    Returns:\n        text_effects: 花字效果对象数组\n        \n    Raises:\n        CustomException: 获取花字效果列表失败\n    \"\"\"\n    logger.info(f\"get_text_effects called with mode: {mode}\")\n    \n    try:\n        # 1. 参数验证\n        if mode not in [0, 1, 2]:\n            logger.error(f\"Invalid mode: {mode}\")\n            raise CustomException(CustomError.FILTER_GET_FAILED)\n        \n        # 2. 根据模式获取花字效果数据\n        text_effects = _get_text_effects_by_mode(mode=mode)\n        logger.info(f\"Found {len(text_effects)} text effects for mode: {mode}\")\n        \n        # 3. 直接返回对象数组\n        logger.info(f\"Successfully returned text effects array with {len(text_effects)} items\")\n        \n        return text_effects\n        \n    except CustomException:\n        logger.error(f\"Get text effects failed for mode: {mode}\")\n        raise\n    except Exception as e:\n        logger.error(f\"Unexpected error in get_text_effects: {str(e)}\")\n        raise CustomException(CustomError.FILTER_GET_FAILED)\n\n\ndef _get_text_effects_by_mode(mode: int) -> List[Dict[str, Any]]:\n    \"\"\"\n    根据模式获取对应的花字效果数据\n    \n    Args:\n        mode: 花字效果模式（0=所有，1=VIP，2=免费）\n    \n    Returns:\n        包含花字效果信息的列表\n    \"\"\"\n    logger.info(f\"Getting text effects for mode: {mode}\")\n    \n    # 从内存中直接获取所有花字效果\n    all_text_effects = list(_HUAZI_MAP_BY_NAME.values())\n    \n    logger.info(f\"Total text effects loaded from memory: {len(all_text_effects)}\")\n    \n    # 根据模式过滤\n    if mode == 0:  # 所有\n        result = all_text_effects\n    elif mode == 1:  # VIP\n        result = [f for f in all_text_effects if f.get(\"is_vip\", False)]\n    elif mode == 2:  # 免费\n        result = [f for f in all_text_effects if not f.get(\"is_vip\", False)]\n    else:\n        result = []\n    \n    logger.info(f\"Final filtered result: {len(result)} text effects\")\n    return result\n"
  },
  {
    "path": "src/service/get_url.py",
    "content": "from src.utils.logger import logger\nfrom exceptions import CustomException, CustomError\nimport re\n\n\ndef get_url(output: str) -> str:\n    \"\"\"\n    提取链接的业务逻辑\n    \n    Args:\n        output: 提取内容\n        \n    Returns:\n        str: 提取结果\n        \n    Raises:\n        CustomException: 提取失败\n    \"\"\"\n    logger.info(f\"get_url starting, output: {output}\")\n    \n    try:\n        # 直接返回输入的内容，不做任何处理\n        # 根据需求描述，这个接口的作用是\"用于多值返回变成单值返回\"\n        # 在实际应用中，这里可能会有一些处理逻辑\n        result = output\n        \n        logger.info(f\"get_url completed successfully, result: {result}\")\n        return result\n    except Exception as e:\n        logger.error(f\"get_url failed: {str(e)}\")\n        raise CustomException(CustomError.UNKNOWN_ERROR)"
  },
  {
    "path": "src/service/imgs_infos.py",
    "content": "from src.utils.logger import logger\nimport json\nfrom typing import List, Optional, Dict, Any\n\n\ndef imgs_infos(\n    imgs: List[str],\n    timelines: List[Dict[str, int]],\n    height: Optional[int] = None,\n    width: Optional[int] = None,\n    in_animation: Optional[str] = None,\n    in_animation_duration: Optional[int] = None,\n    loop_animation: Optional[str] = None,\n    loop_animation_duration: Optional[int] = None,\n    out_animation: Optional[str] = None,\n    out_animation_duration: Optional[int] = None,\n    transition: Optional[str] = None,\n    transition_duration: Optional[int] = None\n) -> str:\n    \"\"\"\n    根据图片URL和时间线生成图片信息JSON字符串\n    \n    Args:\n        imgs: 图片URL列表\n        timelines: 时间线数组\n        height: 视频高度（可选）\n        width: 视频宽度（可选）\n        in_animation: 入场动画名称（可选），支持多个动画用|分隔\n        in_animation_duration: 入场动画时长（可选）\n        loop_animation: 组合动画名称（可选），支持多个动画用|分隔\n        loop_animation_duration: 组合动画时长（可选）\n        out_animation: 出场动画名称（可选），支持多个动画用|分隔\n        out_animation_duration: 出场动画时长（可选）\n        transition: 转场名称（可选）\n        transition_duration: 转场时长（可选）\n        \n    Returns:\n        str: JSON字符串格式的图片信息\n        \n    Raises:\n        无异常抛出，长度不匹配时以最短的为准\n    \"\"\"\n    logger.info(f\"imgs_infos called with {len(imgs)} images and {len(timelines)} timelines\")\n    \n    # 长度不相等时以最短的为准\n    if len(imgs) != len(timelines):\n        min_len = min(len(imgs), len(timelines))\n        logger.warning(f\"imgs length ({len(imgs)}) does not match timelines length ({len(timelines)}), using shorter length: {min_len}\")\n        imgs = imgs[:min_len]\n        timelines = timelines[:min_len]\n    \n    # 解析动画参数\n    parsed_animations = _parse_animation_params(in_animation, out_animation, loop_animation, transition)\n    in_animations, out_animations, loop_animations, transition_animations = parsed_animations\n    \n    # 构建图片信息列表\n    infos = []\n    for i, (img_url, timeline) in enumerate(zip(imgs, timelines)):\n        info = _build_image_info(img_url, timeline, height, width, i, \n                                in_animations, out_animations, loop_animations, transition_animations,\n                                in_animation_duration, out_animation_duration, \n                                loop_animation_duration, transition_duration)\n        infos.append(info)\n        logger.info(f\"Processed image info {i+1}: {info}\")\n    \n    # 转换为JSON字符串\n    infos_json = json.dumps(infos, ensure_ascii=False)\n    logger.info(f\"Generated image infos JSON with {len(infos)} items\")\n    \n    return infos_json\n\n\ndef _parse_animation_params(in_animation, out_animation, loop_animation, transition):\n    \"\"\"解析动画参数，将用|分隔的字符串转换为列表，并处理扩展逻辑\"\"\"\n    def parse_single_param(param):\n        if param is not None and isinstance(param, str):\n            return [anim.strip() for anim in param.split('|') if anim.strip()]\n        return []\n    \n    in_animations = parse_single_param(in_animation)\n    out_animations = parse_single_param(out_animation)\n    loop_animations = parse_single_param(loop_animation)\n    transition_animations = parse_single_param(transition)\n    \n    return in_animations, out_animations, loop_animations, transition_animations\n\n\ndef _build_image_info(img_url, timeline, height, width, i,\n                      in_animations, out_animations, loop_animations, transition_animations,\n                      in_animation_duration, out_animation_duration,\n                      loop_animation_duration, transition_duration):\n    \"\"\"构建单个图片信息字典\"\"\"\n    info = {\n        \"image_url\": img_url,\n        \"start\": timeline[\"start\"],\n        \"end\": timeline[\"end\"]\n    }\n    \n    # 添加尺寸参数\n    if height is not None:\n        info[\"height\"] = height\n    if width is not None:\n        info[\"width\"] = width\n    \n    # 添加动画参数，支持多动画分配逻辑\n    _add_animation_with_extension_logic(info, \"in_animation\", in_animations, i, in_animation_duration)\n    _add_animation_with_extension_logic(info, \"out_animation\", out_animations, i, out_animation_duration)\n    _add_animation_with_extension_logic(info, \"loop_animation\", loop_animations, i, loop_animation_duration)\n    _add_animation_with_extension_logic(info, \"transition\", transition_animations, i, transition_duration)\n    \n    return info\n\n\ndef _add_animation_with_extension_logic(info, animation_key, animations, index, duration):\n    \"\"\"添加动画参数，支持扩展逻辑：动画不足时使用最后一个，动画过多时忽略多余\"\"\"\n    if animations:\n        # 如果索引超出动画列表长度，使用最后一个动画\n        if index < len(animations):\n            selected_animation = animations[index]\n        else:\n            selected_animation = animations[-1]  # 使用最后一个动画\n            logger.info(f\"Index {index} exceeds animation list length {len(animations)}, using last animation: {selected_animation}\")\n        \n        info[animation_key] = selected_animation\n        \n        # 只有当动画存在时才添加对应的duration\n        if duration is not None:\n            duration_key = animation_key + \"_duration\"\n            info[duration_key] = duration"
  },
  {
    "path": "src/service/keyframes_infos.py",
    "content": "from src.utils.logger import logger\nfrom src.utils.keyframe_value import normalize_keyframe_value\nimport json\nfrom typing import List, Dict, Any\n\n\ndef calculate_relative_time_offset(offset_percent: int, duration: int) -> int:\n    \"\"\"\n    根据百分比和持续时间计算相对时间偏移\n    \n    Args:\n        offset_percent: 时间百分比 (0-100)\n        duration: 片段持续时间（微秒）\n        \n    Returns:\n        int: 相对时间偏移（微秒）\n    \"\"\"\n    return int((offset_percent / 100.0) * duration)\n\n\ndef keyframes_infos(\n    ctype: str,\n    offsets: str,\n    values: str,\n    segment_infos: List[Dict[str, Any]],\n    height: int = None,\n    width: int = None\n) -> str:\n    \"\"\"\n    根据关键帧类型、位置比例和值生成关键帧信息JSON字符串\n    \n    Args:\n        ctype: 关键帧类型\n        offsets: 需要放置关键帧的位置比例\n        values: 对应offsets的值\n        segment_infos: 轨道数据数组\n        height: 视频高，可选参数\n        width: 视频宽，可选参数\n        \n    Returns:\n        str: JSON字符串格式的关键帧信息\n        \n    Raises:\n        ValueError: 当offsets和values长度不匹配时，或其他参数验证失败时\n    \"\"\"\n    logger.info(f\"keyframes_infos called with ctype={ctype}, offsets={offsets}, values={values}\")\n    \n    # 解析offsets和values\n    offset_list = [int(x) for x in offsets.split(\"|\")]\n    value_list = [float(x) for x in values.split(\"|\")]\n    \n    # 检查offsets和values长度是否匹配\n    if len(offset_list) != len(value_list):\n        raise ValueError(f\"offsets length ({len(offset_list)}) does not match values length ({len(value_list)})\")\n    \n    # 构建关键帧信息列表\n    keyframes = []\n    \n    # 处理每个片段信息\n    for segment_info in segment_infos:\n        segment_id = segment_info[\"id\"]\n        start = segment_info[\"start\"]\n        end = segment_info[\"end\"]\n        duration = end - start\n        \n        # 为每个offset创建关键帧\n        for offset_percent, value in zip(offset_list, value_list):\n            # 计算片段内的相对时间偏移（微秒）\n            relative_time_offset = calculate_relative_time_offset(offset_percent, duration)\n            \n            # 根据关键帧类型处理值的归一化\n            normalized_value = normalize_keyframe_value(\n                ctype, value, width, height, assume_pixel=True\n            )\n            \n            keyframe = {\n                \"offset\": relative_time_offset,  # 使用片段相对时间而不是轨道绝对时间\n                \"property\": ctype,\n                \"segment_id\": segment_id,\n                \"value\": normalized_value\n            }\n            \n            keyframes.append(keyframe)\n            logger.info(f\"Processed keyframe: {keyframe}\")\n    \n    # 转换为JSON字符串\n    keyframes_json = json.dumps(keyframes, ensure_ascii=False)\n    logger.info(f\"Generated keyframes infos JSON with {len(keyframes)} items\")\n    \n    return keyframes_json"
  },
  {
    "path": "src/service/objs_to_str_list.py",
    "content": "from src.utils.logger import logger\nfrom exceptions import CustomException, CustomError\nfrom typing import List, Dict, Any\n\n\ndef objs_to_str_list(outputs: List[Dict[str, Any]]) -> List[str]:\n    \"\"\"\n    对象列表转化成字符串列表的业务逻辑\n    \n    Args:\n        outputs: 数据对象列表\n        \n    Returns:\n        List[str]: 字符串列表\n        \n    Raises:\n        CustomException: 转换失败\n    \"\"\"\n    logger.info(f\"objs_to_str_list starting, outputs count: {len(outputs)}\")\n    \n    try:\n        # 将对象列表中的output字段提取出来组成字符串列表\n        result = []\n        for obj in outputs:\n            result.append(obj.get(\"output\", \"\"))\n        \n        logger.info(f\"objs_to_str_list completed successfully, result count: {len(result)}\")\n        return result\n    except Exception as e:\n        logger.error(f\"objs_to_str_list failed: {str(e)}\")\n        raise CustomException(CustomError.UNKNOWN_ERROR)"
  },
  {
    "path": "src/service/save_draft.py",
    "content": "from src.utils.logger import logger\nimport src.pyJianYingDraft as draft\nfrom src.utils.draft_cache import DRAFT_CACHE\nfrom src.utils import helper\nfrom exceptions import CustomException, CustomError\nimport config\nimport os\nimport asyncio\nfrom src.utils.draft_lock_manager import DraftLockManager\n\n\ndef save_draft(draft_url: str) -> str:\n    \"\"\"\n    保存剪映草稿的业务逻辑\n    \n    Args:\n        draft_url: 草稿URL\n    \n    Returns:\n        draft_url: 草稿URL\n        message: 响应消息，如果成功就返回\"草稿保存成功\"，失败就返回具体错误信息\n    \"\"\"\n\n    # 从URL中提取草稿ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if (not draft_id) or (draft_id not in DRAFT_CACHE):\n        logger.info(\"invalid draft url: %s\", draft_url)\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n\n    # 从缓存中获取草稿\n    script = DRAFT_CACHE[draft_id]\n\n    # 保存草稿\n    script.save()\n\n    logger.info(f\"save draft success: %s\", os.path.join(config.DRAFT_DIR, draft_id))\n    return draft_url\n\n\nasync def save_draft_async(draft_url: str, lock_timeout: float = 30.0) -> str:\n    \"\"\"\n    保存剪映草稿的异步版本（带并发锁保护）\n    \n    功能：\n    1. 使用 DraftLockManager 防止同一草稿的并发写操作\n    2. 支持超时控制，避免无限等待\n    3. 自动释放锁，即使发生异常\n    \n    Args:\n        draft_url: 草稿 URL，格式：\".../get_draft?draft_id=xxx\"\n        lock_timeout: 获取锁的超时时间（秒），默认 30 秒\n    \n    Returns:\n        draft_url: 草稿 URL\n    \n    Raises:\n        CustomException: 草稿保存失败或获取锁超时\n        asyncio.TimeoutError: 等待锁超时时抛出\n    \n    Example:\n        >>> result = await save_draft_async(draft_url=\"http://.../draft_id=123\")\n    \"\"\"\n    # 提取草稿 ID\n    draft_id = helper.get_url_param(draft_url, \"draft_id\")\n    if not draft_id:\n        raise CustomException(CustomError.INVALID_DRAFT_URL)\n    \n    # 获取锁管理器\n    lock_manager = DraftLockManager()\n    \n    # 尝试获取锁\n    try:\n        await lock_manager.acquire_lock(draft_id, timeout=lock_timeout)\n        logger.info(f\"Lock acquired for draft_id: {draft_id}\")\n    except asyncio.TimeoutError:\n        logger.error(f\"Timeout waiting for lock on draft_id: {draft_id}\")\n        raise CustomException(\n            CustomError.DRAFT_LOCK_TIMEOUT,\n            f\"Failed to acquire lock for draft {draft_id} within {lock_timeout}s\"\n        )\n    \n    try:\n        # 调用内部处理函数（不获取锁，由外层控制）\n        return save_draft(draft_url=draft_url)\n    finally:\n        # 释放锁\n        await lock_manager.release_lock(draft_id)\n        logger.info(f\"Lock released for draft_id: {draft_id}\")\n"
  },
  {
    "path": "src/service/search_sticker.py",
    "content": "from src.utils.logger import logger\nfrom typing import List, Dict, Any\nfrom src.schemas.search_sticker import StickerItem, StickerInfo, StickerPackage, LargeImage\nimport json\nimport config\nimport random\n\n\ndef search_sticker(keyword: str) -> List[Dict[str, Any]]:\n    \"\"\"\n    搜索贴纸的业务逻辑\n    \n    Args:\n        keyword: 搜索关键词\n        \n    Returns:\n        List[Dict[str, Any]]: 贴纸数据列表，最多返回50条记录\n    \"\"\"\n    logger.info(f\"Searching stickers with keyword: {keyword}\")\n    \n    # 从配置文件中读取贴纸数据\n    try:\n        with open(config.STICKER_CONFIG_PATH, 'r', encoding='utf-8') as f:\n            sticker_data = json.load(f)\n    except FileNotFoundError:\n        logger.error(f\"Sticker config file not found: {config.STICKER_CONFIG_PATH}\")\n        return []\n    except json.JSONDecodeError as e:\n        logger.error(f\"Failed to parse sticker config file: {e}\")\n        return []\n    except Exception as e:\n        logger.error(f\"Failed to read sticker config file: {e}\")\n        return []\n    \n    # 根据关键词过滤数据（简单匹配标题）\n    filtered_data = []\n    for item in sticker_data:\n        if keyword in item[\"title\"]:\n            filtered_data.append(item)\n    \n    logger.info(f\"Found {len(filtered_data)} stickers matching keyword: {keyword}\")\n    \n    # 如果没有找到匹配的贴纸，随机返回50条记录\n    if not filtered_data:\n        logger.info(\"No matching stickers found, returning 50 random stickers\")\n        # 确保不会超出总数据量\n        sample_size = min(50, len(sticker_data))\n        filtered_data = random.sample(sticker_data, sample_size)\n    \n    # 如果找到的贴纸超过50条，只返回前50条\n    if len(filtered_data) > 50:\n        logger.info(f\"Too many matching stickers ({len(filtered_data)}), returning only 50\")\n        filtered_data = filtered_data[:50]\n    \n    return filtered_data"
  },
  {
    "path": "src/service/str_list_to_objs.py",
    "content": "from src.utils.logger import logger\nfrom exceptions import CustomException, CustomError\nfrom typing import List, Dict, Any\n\n\ndef str_list_to_objs(infos: List[str]) -> List[Dict[str, Any]]:\n    \"\"\"\n    字符串列表转化成对象列表的业务逻辑\n    \n    Args:\n        infos: 字符串列表\n        \n    Returns:\n        List[Dict[str, Any]]: 对象列表\n        \n    Raises:\n        CustomException: 转换失败\n    \"\"\"\n    logger.info(f\"str_list_to_objs starting, infos: {infos}\")\n    \n    try:\n        # 将字符串列表转换为对象列表\n        result = []\n        for info in infos:\n            result.append({\"output\": info})\n        \n        logger.info(f\"str_list_to_objs completed successfully, result count: {len(result)}\")\n        return result\n    except Exception as e:\n        logger.error(f\"str_list_to_objs failed: {str(e)}\")\n        raise CustomException(CustomError.UNKNOWN_ERROR)"
  },
  {
    "path": "src/service/str_to_list.py",
    "content": "from src.utils.logger import logger\nfrom exceptions import CustomException, CustomError\nfrom typing import List\nimport json\n\n\ndef str_to_list(obj: str) -> List[str]:\n    \"\"\"\n    字符转列表的业务逻辑\n    \n    Args:\n        obj: 对象内容（JSON字符串）\n        \n    Returns:\n        List[str]: 字符串列表\n        \n    Raises:\n        CustomException: 转换失败\n    \"\"\"\n    logger.info(f\"str_to_list starting, obj: {obj}\")\n    \n    try:\n        # 将输入的字符串作为单个元素返回到列表中\n        # 根据需求描述，这里是将整个输入字符串作为一个元素返回\n        result = [obj]\n        \n        logger.info(f\"str_to_list completed successfully, result count: {len(result)}\")\n        return result\n    except Exception as e:\n        logger.error(f\"str_to_list failed: {str(e)}\")\n        raise CustomException(CustomError.UNKNOWN_ERROR)"
  },
  {
    "path": "src/service/text_effect_map_generated.py",
    "content": "TEXT_EFFECT_MAP = {\n    \"红黄火焰综艺花字\": {\n        \"resource_id\": \"7539407429763796249\",\n        \"effect_id\": \"7539407429763796249\",\n        \"name\": \"红黄火焰综艺花字\",\n        \"is_vip\": True\n    },\n    \"综艺-黑暗斑驳红色\": {\n        \"resource_id\": \"7351316503771368713\",\n        \"effect_id\": \"7351316503771368713\",\n        \"name\": \"综艺-黑暗斑驳红色\",\n        \"is_vip\": True\n    },\n    \"蓝白色立体综艺描边花字\": {\n        \"resource_id\": \"7403923146862087424\",\n        \"effect_id\": \"7403923146862087424\",\n        \"name\": \"蓝白色立体综艺描边花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7527336771223407934\",\n        \"effect_id\": \"7527336771223407934\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"黄字橙光花字\": {\n        \"resource_id\": \"7506878563723840783\",\n        \"effect_id\": \"7506878563723840783\",\n        \"name\": \"黄字橙光花字\",\n        \"is_vip\": True\n    },\n    \"综艺-我看看 太夸张了吧!!\": {\n        \"resource_id\": \"7351314020114124068\",\n        \"effect_id\": \"7351314020114124068\",\n        \"name\": \"综艺-我看看 太夸张了吧!!\",\n        \"is_vip\": True\n    },\n    \"黑色描边花字\": {\n        \"resource_id\": \"7404884940837473590\",\n        \"effect_id\": \"7404884940837473590\",\n        \"name\": \"黑色描边花字\",\n        \"is_vip\": True\n    },\n    \"音乐节-超粗描边\": {\n        \"resource_id\": \"7272728092529986827\",\n        \"effect_id\": \"7272728092529986827\",\n        \"name\": \"音乐节-超粗描边\",\n        \"is_vip\": True\n    },\n    \"潮酷橙底黄色渐变立体花字\": {\n        \"resource_id\": \"7160594825933262087\",\n        \"effect_id\": \"7160594825933262087\",\n        \"name\": \"潮酷橙底黄色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"美食-肉\": {\n        \"resource_id\": \"7212892794778668345\",\n        \"effect_id\": \"7212892794778668345\",\n        \"name\": \"美食-肉\",\n        \"is_vip\": True\n    },\n    \"蓝白渐变立体花字\": {\n        \"resource_id\": \"7405155739943079178\",\n        \"effect_id\": \"7405155739943079178\",\n        \"name\": \"蓝白渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"橙黄色描边立体花字\": {\n        \"resource_id\": \"7477040473454939454\",\n        \"effect_id\": \"7477040473454939454\",\n        \"name\": \"橙黄色描边立体花字\",\n        \"is_vip\": True\n    },\n    \"动感黄色发光故障风花字\": {\n        \"resource_id\": \"7406159958045232435\",\n        \"effect_id\": \"7406159958045232435\",\n        \"name\": \"动感黄色发光故障风花字\",\n        \"is_vip\": True\n    },\n    \"渐变黄红色发光字\": {\n        \"resource_id\": \"7404758577623289123\",\n        \"effect_id\": \"7404758577623289123\",\n        \"name\": \"渐变黄红色发光字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变红描边发光字\": {\n        \"resource_id\": \"7403930784630967604\",\n        \"effect_id\": \"7403930784630967604\",\n        \"name\": \"黄色渐变红描边发光字\",\n        \"is_vip\": True\n    },\n    \"火焰燃烧花字\": {\n        \"resource_id\": \"7371391474404986150\",\n        \"effect_id\": \"7371391474404986150\",\n        \"name\": \"火焰燃烧花字\",\n        \"is_vip\": True\n    },\n    \"618立体\": {\n        \"resource_id\": \"7508541988401368345\",\n        \"effect_id\": \"7508541988401368345\",\n        \"name\": \"618立体\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7545767280450227481\",\n        \"effect_id\": \"7545767280450227481\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"渐变黄色立体描边花字\": {\n        \"resource_id\": \"7404010442118515994\",\n        \"effect_id\": \"7404010442118515994\",\n        \"name\": \"渐变黄色立体描边花字\",\n        \"is_vip\": True\n    },\n    \"金箔纹理字\": {\n        \"resource_id\": \"7546806821701504281\",\n        \"effect_id\": \"7546806821701504281\",\n        \"name\": \"金箔纹理字\",\n        \"is_vip\": True\n    },\n    \"蓝色质感渐变立体\": {\n        \"resource_id\": \"7406646972330953994\",\n        \"effect_id\": \"7406646972330953994\",\n        \"name\": \"蓝色质感渐变立体\",\n        \"is_vip\": True\n    },\n    \"蓝字黄背景字\": {\n        \"resource_id\": \"7431415454515612963\",\n        \"effect_id\": \"7431415454515612963\",\n        \"name\": \"蓝字黄背景字\",\n        \"is_vip\": True\n    },\n    \"白色蓝边立体花字\": {\n        \"resource_id\": \"7403728277036125449\",\n        \"effect_id\": \"7403728277036125449\",\n        \"name\": \"白色蓝边立体花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变描边花字\": {\n        \"resource_id\": \"7404668885196131603\",\n        \"effect_id\": \"7404668885196131603\",\n        \"name\": \"黄色渐变描边花字\",\n        \"is_vip\": True\n    },\n    \"黄色花字\": {\n        \"resource_id\": \"7508204538659310872\",\n        \"effect_id\": \"7508204538659310872\",\n        \"name\": \"黄色花字\",\n        \"is_vip\": True\n    },\n    \"白色纹理花字\": {\n        \"resource_id\": \"7405520166701813018\",\n        \"effect_id\": \"7405520166701813018\",\n        \"name\": \"白色纹理花字\",\n        \"is_vip\": True\n    },\n    \"蓝色冰块立体花字\": {\n        \"resource_id\": \"7371423297289866505\",\n        \"effect_id\": \"7371423297289866505\",\n        \"name\": \"蓝色冰块立体花字\",\n        \"is_vip\": True\n    },\n    \"黄红色渐变立体花字\": {\n        \"resource_id\": \"7477792820707757336\",\n        \"effect_id\": \"7477792820707757336\",\n        \"name\": \"黄红色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"黄橙渐变立体秋日花字\": {\n        \"resource_id\": \"7533685266033347902\",\n        \"effect_id\": \"7533685266033347902\",\n        \"name\": \"黄橙渐变立体秋日花字\",\n        \"is_vip\": True\n    },\n    \"红金立体发光花字\": {\n        \"resource_id\": \"7548286146946616600\",\n        \"effect_id\": \"7548286146946616600\",\n        \"name\": \"红金立体发光花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7430745422412549385\",\n        \"effect_id\": \"7430745422412549385\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变花光字\": {\n        \"resource_id\": \"7406860981114015014\",\n        \"effect_id\": \"7406860981114015014\",\n        \"name\": \"蓝色渐变花光字\",\n        \"is_vip\": True\n    },\n    \"黄色立体字（秋天）\": {\n        \"resource_id\": \"7405788077832080659\",\n        \"effect_id\": \"7405788077832080659\",\n        \"name\": \"黄色立体字（秋天）\",\n        \"is_vip\": True\n    },\n    \"裂缝纹理投影\": {\n        \"resource_id\": \"7450158325188070668\",\n        \"effect_id\": \"7450158325188070668\",\n        \"name\": \"裂缝纹理投影\",\n        \"is_vip\": True\n    },\n    \"元旦新年氛围金色闪粉发光花字\": {\n        \"resource_id\": \"7441868112556739849\",\n        \"effect_id\": \"7441868112556739849\",\n        \"name\": \"元旦新年氛围金色闪粉发光花字\",\n        \"is_vip\": True\n    },\n    \"红黄描边立体\": {\n        \"resource_id\": \"7479056232117062937\",\n        \"effect_id\": \"7479056232117062937\",\n        \"name\": \"红黄描边立体\",\n        \"is_vip\": True\n    },\n    \"金色发光镂空花字\": {\n        \"resource_id\": \"7406015916380605733\",\n        \"effect_id\": \"7406015916380605733\",\n        \"name\": \"金色发光镂空花字\",\n        \"is_vip\": True\n    },\n    \"运动教程-花字\": {\n        \"resource_id\": \"7311259207590776075\",\n        \"effect_id\": \"7311259207590776075\",\n        \"name\": \"运动教程-花字\",\n        \"is_vip\": True\n    },\n    \"综艺风红色渐变纹理立体花字\": {\n        \"resource_id\": \"7478970969026022680\",\n        \"effect_id\": \"7478970969026022680\",\n        \"name\": \"综艺风红色渐变纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝色立体描边文字\": {\n        \"resource_id\": \"7406221865171111208\",\n        \"effect_id\": \"7406221865171111208\",\n        \"name\": \"蓝色立体描边文字\",\n        \"is_vip\": True\n    },\n    \"25元旦-晕染红描边\": {\n        \"resource_id\": \"7447932873845247286\",\n        \"effect_id\": \"7447932873845247286\",\n        \"name\": \"25元旦-晕染红描边\",\n        \"is_vip\": True\n    },\n    \"蓝色蜡笔纹理立体花字\": {\n        \"resource_id\": \"7404700591949204799\",\n        \"effect_id\": \"7404700591949204799\",\n        \"name\": \"蓝色蜡笔纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"粉笔拼贴花字（教师节）\": {\n        \"resource_id\": \"7403915995569474870\",\n        \"effect_id\": \"7403915995569474870\",\n        \"name\": \"粉笔拼贴花字（教师节）\",\n        \"is_vip\": True\n    },\n    \"黄色渐变粉蓝描边立体花字\": {\n        \"resource_id\": \"7523881114054970648\",\n        \"effect_id\": \"7523881114054970648\",\n        \"name\": \"黄色渐变粉蓝描边立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝色花字\": {\n        \"resource_id\": \"7480494571168795966\",\n        \"effect_id\": \"7480494571168795966\",\n        \"name\": \"蓝色花字\",\n        \"is_vip\": True\n    },\n    \"轻复古\": {\n        \"resource_id\": \"7350889130865265970\",\n        \"effect_id\": \"7350889130865265970\",\n        \"name\": \"轻复古\",\n        \"is_vip\": True\n    },\n    \"综艺 红色渐变\": {\n        \"resource_id\": \"7127681027346058503\",\n        \"effect_id\": \"7127681027346058503\",\n        \"name\": \"综艺 红色渐变\",\n        \"is_vip\": True\n    },\n    \"蓝白霓虹灯镂空效果发光花字\": {\n        \"resource_id\": \"7404140347892305202\",\n        \"effect_id\": \"7404140347892305202\",\n        \"name\": \"蓝白霓虹灯镂空效果发光花字\",\n        \"is_vip\": True\n    },\n    \"黄色立体描边多彩花字\": {\n        \"resource_id\": \"7404837954532789523\",\n        \"effect_id\": \"7404837954532789523\",\n        \"name\": \"黄色立体描边多彩花字\",\n        \"is_vip\": True\n    },\n    \"黄字彩色多层投影文字\": {\n        \"resource_id\": \"7406655431940033792\",\n        \"effect_id\": \"7406655431940033792\",\n        \"name\": \"黄字彩色多层投影文字\",\n        \"is_vip\": True\n    },\n    \"红色紫色渐变立体描边花字\": {\n        \"resource_id\": \"7506824081531243801\",\n        \"effect_id\": \"7506824081531243801\",\n        \"name\": \"红色紫色渐变立体描边花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变立体花字\": {\n        \"resource_id\": \"7347907413363789094\",\n        \"effect_id\": \"7347907413363789094\",\n        \"name\": \"黄色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"美食-发光白\": {\n        \"resource_id\": \"7212896770370571557\",\n        \"effect_id\": \"7212896770370571557\",\n        \"name\": \"美食-发光白\",\n        \"is_vip\": True\n    },\n    \"复古橙黄渐变醒目\": {\n        \"resource_id\": \"7400711954731371786\",\n        \"effect_id\": \"7400711954731371786\",\n        \"name\": \"复古橙黄渐变醒目\",\n        \"is_vip\": True\n    },\n    \"冬至立体\": {\n        \"resource_id\": \"7430861390933413130\",\n        \"effect_id\": \"7430861390933413130\",\n        \"name\": \"冬至立体\",\n        \"is_vip\": True\n    },\n    \"黑底白色立体花字\": {\n        \"resource_id\": \"7278242937488690493\",\n        \"effect_id\": \"7278242937488690493\",\n        \"name\": \"黑底白色立体花字\",\n        \"is_vip\": True\n    },\n    \"金边浮雕文字\": {\n        \"resource_id\": \"7405521516131093795\",\n        \"effect_id\": \"7405521516131093795\",\n        \"name\": \"金边浮雕文字\",\n        \"is_vip\": True\n    },\n    \"橘黄色渐变温柔发光花字\": {\n        \"resource_id\": \"7467426470714051902\",\n        \"effect_id\": \"7467426470714051902\",\n        \"name\": \"橘黄色渐变温柔发光花字\",\n        \"is_vip\": True\n    },\n    \"蓝色闪粉星光闪闪发光划走\": {\n        \"resource_id\": \"7496504150797274393\",\n        \"effect_id\": \"7496504150797274393\",\n        \"name\": \"蓝色闪粉星光闪闪发光划走\",\n        \"is_vip\": True\n    },\n    \"上下错落发光花字\": {\n        \"resource_id\": \"7368866329337580851\",\n        \"effect_id\": \"7368866329337580851\",\n        \"name\": \"上下错落发光花字\",\n        \"is_vip\": True\n    },\n    \"蓝色立体\": {\n        \"resource_id\": \"7362931435809901859\",\n        \"effect_id\": \"7362931435809901859\",\n        \"name\": \"蓝色立体\",\n        \"is_vip\": True\n    },\n    \"蓝字白边蓝光花字\": {\n        \"resource_id\": \"7231501825311116577\",\n        \"effect_id\": \"7231501825311116577\",\n        \"name\": \"蓝字白边蓝光花字\",\n        \"is_vip\": True\n    },\n    \"岩石花字\": {\n        \"resource_id\": \"7477883005953051928\",\n        \"effect_id\": \"7477883005953051928\",\n        \"name\": \"岩石花字\",\n        \"is_vip\": True\n    },\n    \"618-红紫渐变\": {\n        \"resource_id\": \"7375227839542480191\",\n        \"effect_id\": \"7375227839542480191\",\n        \"name\": \"618-红紫渐变\",\n        \"is_vip\": True\n    },\n    \"简约黄蓝方块综艺花字\": {\n        \"resource_id\": \"7494576393569733913\",\n        \"effect_id\": \"7494576393569733913\",\n        \"name\": \"简约黄蓝方块综艺花字\",\n        \"is_vip\": True\n    },\n    \"红色\": {\n        \"resource_id\": \"7511243674546867518\",\n        \"effect_id\": \"7511243674546867518\",\n        \"name\": \"红色\",\n        \"is_vip\": True\n    },\n    \"运动教程-花字\": {\n        \"resource_id\": \"7311259516392197439\",\n        \"effect_id\": \"7311259516392197439\",\n        \"name\": \"运动教程-花字\",\n        \"is_vip\": True\n    },\n    \"3D蓝字黄边立体综艺花字\": {\n        \"resource_id\": \"7404134454844788018\",\n        \"effect_id\": \"7404134454844788018\",\n        \"name\": \"3D蓝字黄边立体综艺花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变纹理粉蓝立体花字\": {\n        \"resource_id\": \"7485579082764225817\",\n        \"effect_id\": \"7485579082764225817\",\n        \"name\": \"黄色渐变纹理粉蓝立体花字\",\n        \"is_vip\": True\n    },\n    \"JP冬日-结霜字\": {\n        \"resource_id\": \"7303813440127126836\",\n        \"effect_id\": \"7303813440127126836\",\n        \"name\": \"JP冬日-结霜字\",\n        \"is_vip\": True\n    },\n    \"红粉渐变花字\": {\n        \"resource_id\": \"7405872381320842515\",\n        \"effect_id\": \"7405872381320842515\",\n        \"name\": \"红粉渐变花字\",\n        \"is_vip\": True\n    },\n    \"紫色阴森情绪发光花字\": {\n        \"resource_id\": \"7406170424935058726\",\n        \"effect_id\": \"7406170424935058726\",\n        \"name\": \"紫色阴森情绪发光花字\",\n        \"is_vip\": True\n    },\n    \"黄底字\": {\n        \"resource_id\": \"7343614179732966691\",\n        \"effect_id\": \"7343614179732966691\",\n        \"name\": \"黄底字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变立体花字\": {\n        \"resource_id\": \"7298566943722851594\",\n        \"effect_id\": \"7298566943722851594\",\n        \"name\": \"黄色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"红黄渐变背景花字\": {\n        \"resource_id\": \"7404440675225292083\",\n        \"effect_id\": \"7404440675225292083\",\n        \"name\": \"红黄渐变背景花字\",\n        \"is_vip\": True\n    },\n    \"渐变黄字红边星光立体花字\": {\n        \"resource_id\": \"7404352881861659931\",\n        \"effect_id\": \"7404352881861659931\",\n        \"name\": \"渐变黄字红边星光立体花字\",\n        \"is_vip\": True\n    },\n    \"黄紫撞色复古立体字\": {\n        \"resource_id\": \"7405221368561700148\",\n        \"effect_id\": \"7405221368561700148\",\n        \"name\": \"黄紫撞色复古立体字\",\n        \"is_vip\": True\n    },\n    \"霓虹灯花字\": {\n        \"resource_id\": \"7404008412607958323\",\n        \"effect_id\": \"7404008412607958323\",\n        \"name\": \"霓虹灯花字\",\n        \"is_vip\": True\n    },\n    \"红色渐变白霜立体花字\": {\n        \"resource_id\": \"7308367002253544741\",\n        \"effect_id\": \"7308367002253544741\",\n        \"name\": \"红色渐变白霜立体花字\",\n        \"is_vip\": True\n    },\n    \"红色复古投影字\": {\n        \"resource_id\": \"7405906746461424930\",\n        \"effect_id\": \"7405906746461424930\",\n        \"name\": \"红色复古投影字\",\n        \"is_vip\": True\n    },\n    \"像素化花字\": {\n        \"resource_id\": \"7488151895048211736\",\n        \"effect_id\": \"7488151895048211736\",\n        \"name\": \"像素化花字\",\n        \"is_vip\": True\n    },\n    \"蓝橙色立体花字\": {\n        \"resource_id\": \"7492933140210666776\",\n        \"effect_id\": \"7492933140210666776\",\n        \"name\": \"蓝橙色立体花字\",\n        \"is_vip\": True\n    },\n    \"拼贴多色\": {\n        \"resource_id\": \"7360526293596671273\",\n        \"effect_id\": \"7360526293596671273\",\n        \"name\": \"拼贴多色\",\n        \"is_vip\": True\n    },\n    \"黄蓝紫渐变立体花字\": {\n        \"resource_id\": \"7546405848860511513\",\n        \"effect_id\": \"7546405848860511513\",\n        \"name\": \"黄蓝紫渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"复古红色发光立体花字\": {\n        \"resource_id\": \"7160599091750161671\",\n        \"effect_id\": \"7160599091750161671\",\n        \"name\": \"复古红色发光立体花字\",\n        \"is_vip\": True\n    },\n    \"综艺红黄立体\": {\n        \"resource_id\": \"7434585603439742218\",\n        \"effect_id\": \"7434585603439742218\",\n        \"name\": \"综艺红黄立体\",\n        \"is_vip\": True\n    },\n    \"综艺-巅峰 厉害!!真是太火爆了!!!2\": {\n        \"resource_id\": \"7351319129124506930\",\n        \"effect_id\": \"7351319129124506930\",\n        \"name\": \"综艺-巅峰 厉害!!真是太火爆了!!!2\",\n        \"is_vip\": True\n    },\n    \"黄红蓝边立体花字\": {\n        \"resource_id\": \"7525867881331215640\",\n        \"effect_id\": \"7525867881331215640\",\n        \"name\": \"黄红蓝边立体花字\",\n        \"is_vip\": True\n    },\n    \"复古黄色立体\": {\n        \"resource_id\": \"7406970077368618274\",\n        \"effect_id\": \"7406970077368618274\",\n        \"name\": \"复古黄色立体\",\n        \"is_vip\": True\n    },\n    \"黄蓝立体字\": {\n        \"resource_id\": \"7431490038736702760\",\n        \"effect_id\": \"7431490038736702760\",\n        \"name\": \"黄蓝立体字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7533790251915955518\",\n        \"effect_id\": \"7533790251915955518\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"黄色霓虹灯发光花字\": {\n        \"resource_id\": \"7408956728529751333\",\n        \"effect_id\": \"7408956728529751333\",\n        \"name\": \"黄色霓虹灯发光花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7532883085390548286\",\n        \"effect_id\": \"7532883085390548286\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"黄色马卡龙\": {\n        \"resource_id\": \"7509743284898794777\",\n        \"effect_id\": \"7509743284898794777\",\n        \"name\": \"黄色马卡龙\",\n        \"is_vip\": True\n    },\n    \"撞色描边立体字\": {\n        \"resource_id\": \"7406334288930557218\",\n        \"effect_id\": \"7406334288930557218\",\n        \"name\": \"撞色描边立体字\",\n        \"is_vip\": True\n    },\n    \"游戏像素文字效果花字\": {\n        \"resource_id\": \"7405871504769961254\",\n        \"effect_id\": \"7405871504769961254\",\n        \"name\": \"游戏像素文字效果花字\",\n        \"is_vip\": True\n    },\n    \"粉色立体字\": {\n        \"resource_id\": \"7475271686095506712\",\n        \"effect_id\": \"7475271686095506712\",\n        \"name\": \"粉色立体字\",\n        \"is_vip\": True\n    },\n    \"霓虹灯花字\": {\n        \"resource_id\": \"7330423055900069155\",\n        \"effect_id\": \"7330423055900069155\",\n        \"name\": \"霓虹灯花字\",\n        \"is_vip\": True\n    },\n    \"黄色红色\": {\n        \"resource_id\": \"7389147072064179506\",\n        \"effect_id\": \"7389147072064179506\",\n        \"name\": \"黄色红色\",\n        \"is_vip\": True\n    },\n    \"红樱桃\": {\n        \"resource_id\": \"7539187400808123672\",\n        \"effect_id\": \"7539187400808123672\",\n        \"name\": \"红樱桃\",\n        \"is_vip\": True\n    },\n    \"粉紫描边立体\": {\n        \"resource_id\": \"7474511004676803902\",\n        \"effect_id\": \"7474511004676803902\",\n        \"name\": \"粉紫描边立体\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7495665652816956697\",\n        \"effect_id\": \"7495665652816956697\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"渐变黄色中秋圆底花字\": {\n        \"resource_id\": \"7405070516706381092\",\n        \"effect_id\": \"7405070516706381092\",\n        \"name\": \"渐变黄色中秋圆底花字\",\n        \"is_vip\": True\n    },\n    \"复古背景字\": {\n        \"resource_id\": \"7430809868333780259\",\n        \"effect_id\": \"7430809868333780259\",\n        \"name\": \"复古背景字\",\n        \"is_vip\": True\n    },\n    \"蓝紫色粗体描边花字\": {\n        \"resource_id\": \"7259922491185958203\",\n        \"effect_id\": \"7259922491185958203\",\n        \"name\": \"蓝紫色粗体描边花字\",\n        \"is_vip\": True\n    },\n    \"黄绿发光字\": {\n        \"resource_id\": \"7403962881252805903\",\n        \"effect_id\": \"7403962881252805903\",\n        \"name\": \"黄绿发光字\",\n        \"is_vip\": True\n    },\n    \"粉蓝色渐变立体发光花字\": {\n        \"resource_id\": \"7366086107366182153\",\n        \"effect_id\": \"7366086107366182153\",\n        \"name\": \"粉蓝色渐变立体发光花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7525463353603640601\",\n        \"effect_id\": \"7525463353603640601\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"粉色描边白色字\": {\n        \"resource_id\": \"7474605929825193240\",\n        \"effect_id\": \"7474605929825193240\",\n        \"name\": \"粉色描边白色字\",\n        \"is_vip\": True\n    },\n    \"穿搭立体\": {\n        \"resource_id\": \"7536671491740634392\",\n        \"effect_id\": \"7536671491740634392\",\n        \"name\": \"穿搭立体\",\n        \"is_vip\": True\n    },\n    \"好物美妆-黄白跳色\": {\n        \"resource_id\": \"7264547410817387795\",\n        \"effect_id\": \"7264547410817387795\",\n        \"name\": \"好物美妆-黄白跳色\",\n        \"is_vip\": True\n    },\n    \"绿色东南亚\": {\n        \"resource_id\": \"7411032759457631515\",\n        \"effect_id\": \"7411032759457631515\",\n        \"name\": \"绿色东南亚\",\n        \"is_vip\": True\n    },\n    \"蓝色纸纹纹理花字\": {\n        \"resource_id\": \"7520663448003415358\",\n        \"effect_id\": \"7520663448003415358\",\n        \"name\": \"蓝色纸纹纹理花字\",\n        \"is_vip\": True\n    },\n    \"红黄渐变发光字\": {\n        \"resource_id\": \"7406976068789210403\",\n        \"effect_id\": \"7406976068789210403\",\n        \"name\": \"红黄渐变发光字\",\n        \"is_vip\": True\n    },\n    \"粉色星空花字\": {\n        \"resource_id\": \"7396798321739730226\",\n        \"effect_id\": \"7396798321739730226\",\n        \"name\": \"粉色星空花字\",\n        \"is_vip\": True\n    },\n    \"粉色立体字\": {\n        \"resource_id\": \"7404321887817452800\",\n        \"effect_id\": \"7404321887817452800\",\n        \"name\": \"粉色立体字\",\n        \"is_vip\": True\n    },\n    \"金属划痕暗黑立体字\": {\n        \"resource_id\": \"7405501393248881960\",\n        \"effect_id\": \"7405501393248881960\",\n        \"name\": \"金属划痕暗黑立体字\",\n        \"is_vip\": True\n    },\n    \"粉色\": {\n        \"resource_id\": \"7507145578984361241\",\n        \"effect_id\": \"7507145578984361241\",\n        \"name\": \"粉色\",\n        \"is_vip\": True\n    },\n    \"橘黄色立体字\": {\n        \"resource_id\": \"7407078807309503744\",\n        \"effect_id\": \"7407078807309503744\",\n        \"name\": \"橘黄色立体字\",\n        \"is_vip\": True\n    },\n    \"双色爱心花字\": {\n        \"resource_id\": \"7362054905256758591\",\n        \"effect_id\": \"7362054905256758591\",\n        \"name\": \"双色爱心花字\",\n        \"is_vip\": True\n    },\n    \"三花猫配色\": {\n        \"resource_id\": \"7532428202199797016\",\n        \"effect_id\": \"7532428202199797016\",\n        \"name\": \"三花猫配色\",\n        \"is_vip\": True\n    },\n    \"绿色立体花字\": {\n        \"resource_id\": \"7477511783801163032\",\n        \"effect_id\": \"7477511783801163032\",\n        \"name\": \"绿色立体花字\",\n        \"is_vip\": True\n    },\n    \"高级幻彩花紫字\": {\n        \"resource_id\": \"7293329973694172435\",\n        \"effect_id\": \"7293329973694172435\",\n        \"name\": \"高级幻彩花紫字\",\n        \"is_vip\": True\n    },\n    \"红绿撞色发光字\": {\n        \"resource_id\": \"7406650793631223075\",\n        \"effect_id\": \"7406650793631223075\",\n        \"name\": \"红绿撞色发光字\",\n        \"is_vip\": True\n    },\n    \"绿色发光花字\": {\n        \"resource_id\": \"7265723229216525620\",\n        \"effect_id\": \"7265723229216525620\",\n        \"name\": \"绿色发光花字\",\n        \"is_vip\": True\n    },\n    \"绿色渐变背景字\": {\n        \"resource_id\": \"7404290078723312931\",\n        \"effect_id\": \"7404290078723312931\",\n        \"name\": \"绿色渐变背景字\",\n        \"is_vip\": True\n    },\n    \"蓝绿纹理花字\": {\n        \"resource_id\": \"7527597707930799422\",\n        \"effect_id\": \"7527597707930799422\",\n        \"name\": \"蓝绿纹理花字\",\n        \"is_vip\": True\n    },\n    \"粉色立体渐变\": {\n        \"resource_id\": \"7376607395046231331\",\n        \"effect_id\": \"7376607395046231331\",\n        \"name\": \"粉色立体渐变\",\n        \"is_vip\": True\n    },\n    \"黄色立体花字\": {\n        \"resource_id\": \"7405087980685167922\",\n        \"effect_id\": \"7405087980685167922\",\n        \"name\": \"黄色立体花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7478268728992419096\",\n        \"effect_id\": \"7478268728992419096\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"#花字招募令 彩虹花字\": {\n        \"resource_id\": \"7398456039634406666\",\n        \"effect_id\": \"7398456039634406666\",\n        \"name\": \"#花字招募令 彩虹花字\",\n        \"is_vip\": True\n    },\n    \"少女粉星星花字\": {\n        \"resource_id\": \"7404459246961577257\",\n        \"effect_id\": \"7404459246961577257\",\n        \"name\": \"少女粉星星花字\",\n        \"is_vip\": True\n    },\n    \"未来科技感发光花字\": {\n        \"resource_id\": \"7404471553607421222\",\n        \"effect_id\": \"7404471553607421222\",\n        \"name\": \"未来科技感发光花字\",\n        \"is_vip\": True\n    },\n    \"潮流紫色荧光花字\": {\n        \"resource_id\": \"7241759007952735491\",\n        \"effect_id\": \"7241759007952735491\",\n        \"name\": \"潮流紫色荧光花字\",\n        \"is_vip\": True\n    },\n    \"橙色渐变花字\": {\n        \"resource_id\": \"7404263174230297882\",\n        \"effect_id\": \"7404263174230297882\",\n        \"name\": \"橙色渐变花字\",\n        \"is_vip\": True\n    },\n    \"可爱花字\": {\n        \"resource_id\": \"7430667459683831079\",\n        \"effect_id\": \"7430667459683831079\",\n        \"name\": \"可爱花字\",\n        \"is_vip\": True\n    },\n    \"渐变综艺发光花字\": {\n        \"resource_id\": \"7539752808367574297\",\n        \"effect_id\": \"7539752808367574297\",\n        \"name\": \"渐变综艺发光花字\",\n        \"is_vip\": True\n    },\n    \"橙色万圣花字\": {\n        \"resource_id\": \"7293140122332122368\",\n        \"effect_id\": \"7293140122332122368\",\n        \"name\": \"橙色万圣花字\",\n        \"is_vip\": True\n    },\n    \"棕色立体粗描边\": {\n        \"resource_id\": \"7406388990837886234\",\n        \"effect_id\": \"7406388990837886234\",\n        \"name\": \"棕色立体粗描边\",\n        \"is_vip\": True\n    },\n    \"立体字\": {\n        \"resource_id\": \"7260043007997562149\",\n        \"effect_id\": \"7260043007997562149\",\n        \"name\": \"立体字\",\n        \"is_vip\": True\n    },\n    \"酸性质感花字\": {\n        \"resource_id\": \"7481664682638560537\",\n        \"effect_id\": \"7481664682638560537\",\n        \"name\": \"酸性质感花字\",\n        \"is_vip\": True\n    },\n    \"绿色渐变立体花字\": {\n        \"resource_id\": \"7492430244570303806\",\n        \"effect_id\": \"7492430244570303806\",\n        \"name\": \"绿色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"赛博朋克风故障字\": {\n        \"resource_id\": \"7404304312135896360\",\n        \"effect_id\": \"7404304312135896360\",\n        \"name\": \"赛博朋克风故障字\",\n        \"is_vip\": True\n    },\n    \"粉色立体花字\": {\n        \"resource_id\": \"7404522256929459494\",\n        \"effect_id\": \"7404522256929459494\",\n        \"name\": \"粉色立体花字\",\n        \"is_vip\": True\n    },\n    \"粉橙立体花字\": {\n        \"resource_id\": \"7475398432807521561\",\n        \"effect_id\": \"7475398432807521561\",\n        \"name\": \"粉橙立体花字\",\n        \"is_vip\": True\n    },\n    \"复古牛皮纸花字\": {\n        \"resource_id\": \"7362833837627378944\",\n        \"effect_id\": \"7362833837627378944\",\n        \"name\": \"复古牛皮纸花字\",\n        \"is_vip\": True\n    },\n    \"黑色纹理立体花字\": {\n        \"resource_id\": \"7306894668795612442\",\n        \"effect_id\": \"7306894668795612442\",\n        \"name\": \"黑色纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"圆环花字\": {\n        \"resource_id\": \"7349078136480386345\",\n        \"effect_id\": \"7349078136480386345\",\n        \"name\": \"圆环花字\",\n        \"is_vip\": True\n    },\n    \"薰衣草\": {\n        \"resource_id\": \"7509044952912055614\",\n        \"effect_id\": \"7509044952912055614\",\n        \"name\": \"薰衣草\",\n        \"is_vip\": True\n    },\n    \"清新条纹投影纹理花字\": {\n        \"resource_id\": \"7404757226583362854\",\n        \"effect_id\": \"7404757226583362854\",\n        \"name\": \"清新条纹投影纹理花字\",\n        \"is_vip\": True\n    },\n    \"马卡龙色渐变文字\": {\n        \"resource_id\": \"7406238235141213440\",\n        \"effect_id\": \"7406238235141213440\",\n        \"name\": \"马卡龙色渐变文字\",\n        \"is_vip\": True\n    },\n    \"白字红光花字\": {\n        \"resource_id\": \"7351431205692181786\",\n        \"effect_id\": \"7351431205692181786\",\n        \"name\": \"白字红光花字\",\n        \"is_vip\": True\n    },\n    \"纹理花字\": {\n        \"resource_id\": \"7333249201419160868\",\n        \"effect_id\": \"7333249201419160868\",\n        \"name\": \"纹理花字\",\n        \"is_vip\": True\n    },\n    \"描边橙色黄色双色立体花字\": {\n        \"resource_id\": \"7405049138867424523\",\n        \"effect_id\": \"7405049138867424523\",\n        \"name\": \"描边橙色黄色双色立体花字\",\n        \"is_vip\": True\n    },\n    \"粉色渐变\": {\n        \"resource_id\": \"7491540791689530686\",\n        \"effect_id\": \"7491540791689530686\",\n        \"name\": \"粉色渐变\",\n        \"is_vip\": True\n    },\n    \"黄粉色立体渐变花字\": {\n        \"resource_id\": \"7371110382393494793\",\n        \"effect_id\": \"7371110382393494793\",\n        \"name\": \"黄粉色立体渐变花字\",\n        \"is_vip\": True\n    },\n    \"低饱和紫色渐变综艺花字\": {\n        \"resource_id\": \"7388017781117160745\",\n        \"effect_id\": \"7388017781117160745\",\n        \"name\": \"低饱和紫色渐变综艺花字\",\n        \"is_vip\": True\n    },\n    \"莫兰迪清新蓝色描边花字\": {\n        \"resource_id\": \"7404083693003853096\",\n        \"effect_id\": \"7404083693003853096\",\n        \"name\": \"莫兰迪清新蓝色描边花字\",\n        \"is_vip\": True\n    },\n    \"节日花字\": {\n        \"resource_id\": \"7405888865132711220\",\n        \"effect_id\": \"7405888865132711220\",\n        \"name\": \"节日花字\",\n        \"is_vip\": True\n    },\n    \"3D多层渐变红\": {\n        \"resource_id\": \"7174401031399312670\",\n        \"effect_id\": \"7174401031399312670\",\n        \"name\": \"3D多层渐变红\",\n        \"is_vip\": True\n    },\n    \"红色\": {\n        \"resource_id\": \"7389185223600114995\",\n        \"effect_id\": \"7389185223600114995\",\n        \"name\": \"红色\",\n        \"is_vip\": True\n    },\n    \"多色渐变花字\": {\n        \"resource_id\": \"7405856965332585764\",\n        \"effect_id\": \"7405856965332585764\",\n        \"name\": \"多色渐变花字\",\n        \"is_vip\": True\n    },\n    \"3D腮绿\": {\n        \"resource_id\": \"7173927171881323789\",\n        \"effect_id\": \"7173927171881323789\",\n        \"name\": \"3D腮绿\",\n        \"is_vip\": True\n    },\n    \"黄色渐变纹理花字\": {\n        \"resource_id\": \"7431429108791266611\",\n        \"effect_id\": \"7431429108791266611\",\n        \"name\": \"黄色渐变纹理花字\",\n        \"is_vip\": True\n    },\n    \"黄绿色立体纹理花字\": {\n        \"resource_id\": \"7404772432323546422\",\n        \"effect_id\": \"7404772432323546422\",\n        \"name\": \"黄绿色立体纹理花字\",\n        \"is_vip\": True\n    },\n    \"白字橘色描边立体花字\": {\n        \"resource_id\": \"7371117571757641011\",\n        \"effect_id\": \"7371117571757641011\",\n        \"name\": \"白字橘色描边立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝色纹理白描边花字\": {\n        \"resource_id\": \"7378313478852906280\",\n        \"effect_id\": \"7378313478852906280\",\n        \"name\": \"蓝色纹理白描边花字\",\n        \"is_vip\": True\n    },\n    \"桃红色渐变立体花字\": {\n        \"resource_id\": \"7388024664980770060\",\n        \"effect_id\": \"7388024664980770060\",\n        \"name\": \"桃红色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"潮酷粉黄撞色立体花字\": {\n        \"resource_id\": \"7404058441481866511\",\n        \"effect_id\": \"7404058441481866511\",\n        \"name\": \"潮酷粉黄撞色立体花字\",\n        \"is_vip\": True\n    },\n    \"复古镂空花字\": {\n        \"resource_id\": \"7345391635267603753\",\n        \"effect_id\": \"7345391635267603753\",\n        \"name\": \"复古镂空花字\",\n        \"is_vip\": True\n    },\n    \"粉黄渐变立体字\": {\n        \"resource_id\": \"7405944611430092066\",\n        \"effect_id\": \"7405944611430092066\",\n        \"name\": \"粉黄渐变立体字\",\n        \"is_vip\": True\n    },\n    \"绿橙花字\": {\n        \"resource_id\": \"7392196588426382629\",\n        \"effect_id\": \"7392196588426382629\",\n        \"name\": \"绿橙花字\",\n        \"is_vip\": True\n    },\n    \"中式背景框文字\": {\n        \"resource_id\": \"7406225575712443663\",\n        \"effect_id\": \"7406225575712443663\",\n        \"name\": \"中式背景框文字\",\n        \"is_vip\": True\n    },\n    \"彩色花边花字\": {\n        \"resource_id\": \"7366911458824752410\",\n        \"effect_id\": \"7366911458824752410\",\n        \"name\": \"彩色花边花字\",\n        \"is_vip\": True\n    },\n    \"节日粉色渐变立体描边花字\": {\n        \"resource_id\": \"7539491294188440857\",\n        \"effect_id\": \"7539491294188440857\",\n        \"name\": \"节日粉色渐变立体描边花字\",\n        \"is_vip\": True\n    },\n    \"黄绿综艺花字\": {\n        \"resource_id\": \"7476505479364201753\",\n        \"effect_id\": \"7476505479364201753\",\n        \"name\": \"黄绿综艺花字\",\n        \"is_vip\": True\n    },\n    \"抹茶绿多层描边立体花字\": {\n        \"resource_id\": \"7405039371037986089\",\n        \"effect_id\": \"7405039371037986089\",\n        \"name\": \"抹茶绿多层描边立体花字\",\n        \"is_vip\": True\n    },\n    \"粉紫色渐变立体发光花字\": {\n        \"resource_id\": \"7407013513979251978\",\n        \"effect_id\": \"7407013513979251978\",\n        \"name\": \"粉紫色渐变立体发光花字\",\n        \"is_vip\": True\n    },\n    \"红粉色渐变立体发光花字\": {\n        \"resource_id\": \"7475276656626863385\",\n        \"effect_id\": \"7475276656626863385\",\n        \"name\": \"红粉色渐变立体发光花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7543043727103675673\",\n        \"effect_id\": \"7543043727103675673\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"粉色亮晶晶花字\": {\n        \"resource_id\": \"7265614497119735040\",\n        \"effect_id\": \"7265614497119735040\",\n        \"name\": \"粉色亮晶晶花字\",\n        \"is_vip\": True\n    },\n    \"樱花粉 粉色花字\": {\n        \"resource_id\": \"7336859597287804169\",\n        \"effect_id\": \"7336859597287804169\",\n        \"name\": \"樱花粉 粉色花字\",\n        \"is_vip\": True\n    },\n    \"蓝绿立体花字\": {\n        \"resource_id\": \"7405924713400126747\",\n        \"effect_id\": \"7405924713400126747\",\n        \"name\": \"蓝绿立体花字\",\n        \"is_vip\": True\n    },\n    \"万圣紫色花字\": {\n        \"resource_id\": \"7293778917603822848\",\n        \"effect_id\": \"7293778917603822848\",\n        \"name\": \"万圣紫色花字\",\n        \"is_vip\": True\n    },\n    \"3D粉色立体花字\": {\n        \"resource_id\": \"7350157127207456037\",\n        \"effect_id\": \"7350157127207456037\",\n        \"name\": \"3D粉色立体花字\",\n        \"is_vip\": True\n    },\n    \"粉蓝色渐变爱心底花字\": {\n        \"resource_id\": \"7542084187285703998\",\n        \"effect_id\": \"7542084187285703998\",\n        \"name\": \"粉蓝色渐变爱心底花字\",\n        \"is_vip\": True\n    },\n    \"五一立体\": {\n        \"resource_id\": \"7359406447718862131\",\n        \"effect_id\": \"7359406447718862131\",\n        \"name\": \"五一立体\",\n        \"is_vip\": True\n    },\n    \"粉色紫边立体字\": {\n        \"resource_id\": \"7409954407321783586\",\n        \"effect_id\": \"7409954407321783586\",\n        \"name\": \"粉色紫边立体字\",\n        \"is_vip\": True\n    },\n    \"立体黄蓝纹理花字\": {\n        \"resource_id\": \"7537970908221394238\",\n        \"effect_id\": \"7537970908221394238\",\n        \"name\": \"立体黄蓝纹理花字\",\n        \"is_vip\": True\n    },\n    \"3D粉色渐变立体花字\": {\n        \"resource_id\": \"7403948957547760906\",\n        \"effect_id\": \"7403948957547760906\",\n        \"name\": \"3D粉色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"浅蓝黄渐变立体花字\": {\n        \"resource_id\": \"7312845270671232294\",\n        \"effect_id\": \"7312845270671232294\",\n        \"name\": \"浅蓝黄渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"复古红色立体花字\": {\n        \"resource_id\": \"7480506672746794264\",\n        \"effect_id\": \"7480506672746794264\",\n        \"name\": \"复古红色立体花字\",\n        \"is_vip\": True\n    },\n    \"绿色花字\": {\n        \"resource_id\": \"7431433243922107689\",\n        \"effect_id\": \"7431433243922107689\",\n        \"name\": \"绿色花字\",\n        \"is_vip\": True\n    },\n    \"美妆纹理\": {\n        \"resource_id\": \"7411406288350874917\",\n        \"effect_id\": \"7411406288350874917\",\n        \"name\": \"美妆纹理\",\n        \"is_vip\": True\n    },\n    \"黄绿花字\": {\n        \"resource_id\": \"7404294636656774451\",\n        \"effect_id\": \"7404294636656774451\",\n        \"name\": \"黄绿花字\",\n        \"is_vip\": True\n    },\n    \"糖果色彩色渐变描边花字\": {\n        \"resource_id\": \"7404705863442713910\",\n        \"effect_id\": \"7404705863442713910\",\n        \"name\": \"糖果色彩色渐变描边花字\",\n        \"is_vip\": True\n    },\n    \"粉色立体花字\": {\n        \"resource_id\": \"7298637894481169701\",\n        \"effect_id\": \"7298637894481169701\",\n        \"name\": \"粉色立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变花字\": {\n        \"resource_id\": \"7252284645998464288\",\n        \"effect_id\": \"7252284645998464288\",\n        \"name\": \"蓝色渐变花字\",\n        \"is_vip\": True\n    },\n    \"纹理花字\": {\n        \"resource_id\": \"7339054041458036006\",\n        \"effect_id\": \"7339054041458036006\",\n        \"name\": \"纹理花字\",\n        \"is_vip\": True\n    },\n    \"纹理复古深色字\": {\n        \"resource_id\": \"7404307108625206563\",\n        \"effect_id\": \"7404307108625206563\",\n        \"name\": \"纹理复古深色字\",\n        \"is_vip\": True\n    },\n    \"红色描边黄色花字\": {\n        \"resource_id\": \"7404774919315197195\",\n        \"effect_id\": \"7404774919315197195\",\n        \"name\": \"红色描边黄色花字\",\n        \"is_vip\": True\n    },\n    \"白字黑边裂痕综艺花字\": {\n        \"resource_id\": \"7404884426150235418\",\n        \"effect_id\": \"7404884426150235418\",\n        \"name\": \"白字黑边裂痕综艺花字\",\n        \"is_vip\": True\n    },\n    \"黄字红边立体粗描边花字\": {\n        \"resource_id\": \"7404394775664708901\",\n        \"effect_id\": \"7404394775664708901\",\n        \"name\": \"黄字红边立体粗描边花字\",\n        \"is_vip\": True\n    },\n    \"国风水墨\": {\n        \"resource_id\": \"7405990788053683482\",\n        \"effect_id\": \"7405990788053683482\",\n        \"name\": \"国风水墨\",\n        \"is_vip\": True\n    },\n    \"火焰立体\": {\n        \"resource_id\": \"7407352720815836443\",\n        \"effect_id\": \"7407352720815836443\",\n        \"name\": \"火焰立体\",\n        \"is_vip\": True\n    },\n    \"红色描边纹理立体字\": {\n        \"resource_id\": \"7405218557342059816\",\n        \"effect_id\": \"7405218557342059816\",\n        \"name\": \"红色描边纹理立体字\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变阴影立体花字\": {\n        \"resource_id\": \"7495216846946274584\",\n        \"effect_id\": \"7495216846946274584\",\n        \"name\": \"蓝色渐变阴影立体花字\",\n        \"is_vip\": True\n    },\n    \"红色立体纹理花字\": {\n        \"resource_id\": \"7405838293843070234\",\n        \"effect_id\": \"7405838293843070234\",\n        \"name\": \"红色立体纹理花字\",\n        \"is_vip\": True\n    },\n    \"渐变花字\": {\n        \"resource_id\": \"7368685720325655817\",\n        \"effect_id\": \"7368685720325655817\",\n        \"name\": \"渐变花字\",\n        \"is_vip\": True\n    },\n    \"纸质\": {\n        \"resource_id\": \"7360556929959087397\",\n        \"effect_id\": \"7360556929959087397\",\n        \"name\": \"纸质\",\n        \"is_vip\": True\n    },\n    \"蓝白色渐变立体花字\": {\n        \"resource_id\": \"7404520330502458674\",\n        \"effect_id\": \"7404520330502458674\",\n        \"name\": \"蓝白色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7547970729258519833\",\n        \"effect_id\": \"7547970729258519833\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"蓝色\": {\n        \"resource_id\": \"7507097456283274520\",\n        \"effect_id\": \"7507097456283274520\",\n        \"name\": \"蓝色\",\n        \"is_vip\": True\n    },\n    \"黑白线条花字\": {\n        \"resource_id\": \"7404819849140063551\",\n        \"effect_id\": \"7404819849140063551\",\n        \"name\": \"黑白线条花字\",\n        \"is_vip\": True\n    },\n    \"愚人节立体\": {\n        \"resource_id\": \"7482688482754694462\",\n        \"effect_id\": \"7482688482754694462\",\n        \"name\": \"愚人节立体\",\n        \"is_vip\": True\n    },\n    \"中秋桂花花字\": {\n        \"resource_id\": \"7406740764207713577\",\n        \"effect_id\": \"7406740764207713577\",\n        \"name\": \"中秋桂花花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7455608333563874585\",\n        \"effect_id\": \"7455608333563874585\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"双十一红黄立体\": {\n        \"resource_id\": \"7430822256806284594\",\n        \"effect_id\": \"7430822256806284594\",\n        \"name\": \"双十一红黄立体\",\n        \"is_vip\": True\n    },\n    \"金色渐变立体红边发光花字\": {\n        \"resource_id\": \"7459686003079630104\",\n        \"effect_id\": \"7459686003079630104\",\n        \"name\": \"金色渐变立体红边发光花字\",\n        \"is_vip\": True\n    },\n    \"银色渐变描边发光花字\": {\n        \"resource_id\": \"7405031205877419305\",\n        \"effect_id\": \"7405031205877419305\",\n        \"name\": \"银色渐变描边发光花字\",\n        \"is_vip\": True\n    },\n    \"白色立体花字\": {\n        \"resource_id\": \"7474543369054702910\",\n        \"effect_id\": \"7474543369054702910\",\n        \"name\": \"白色立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变镂空描边花字\": {\n        \"resource_id\": \"7405927551417306378\",\n        \"effect_id\": \"7405927551417306378\",\n        \"name\": \"蓝色渐变镂空描边花字\",\n        \"is_vip\": True\n    },\n    \"蓝白立体花字\": {\n        \"resource_id\": \"7405716848106310931\",\n        \"effect_id\": \"7405716848106310931\",\n        \"name\": \"蓝白立体花字\",\n        \"is_vip\": True\n    },\n    \"白色发光花字\": {\n        \"resource_id\": \"7371368226606943514\",\n        \"effect_id\": \"7371368226606943514\",\n        \"name\": \"白色发光花字\",\n        \"is_vip\": True\n    },\n    \"金红纸纹理发光字\": {\n        \"resource_id\": \"7404877070158908698\",\n        \"effect_id\": \"7404877070158908698\",\n        \"name\": \"金红纸纹理发光字\",\n        \"is_vip\": True\n    },\n    \"橙白渐变花字 黑白描边花字\": {\n        \"resource_id\": \"7241953374780804410\",\n        \"effect_id\": \"7241953374780804410\",\n        \"name\": \"橙白渐变花字 黑白描边花字\",\n        \"is_vip\": True\n    },\n    \"云纹金箔字\": {\n        \"resource_id\": \"7405518341814668544\",\n        \"effect_id\": \"7405518341814668544\",\n        \"name\": \"云纹金箔字\",\n        \"is_vip\": True\n    },\n    \"综艺风黄色渐变纹理立体花字\": {\n        \"resource_id\": \"7478934394141527358\",\n        \"effect_id\": \"7478934394141527358\",\n        \"name\": \"综艺风黄色渐变纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝红色立体综艺花字\": {\n        \"resource_id\": \"7371410942061546803\",\n        \"effect_id\": \"7371410942061546803\",\n        \"name\": \"蓝红色立体综艺花字\",\n        \"is_vip\": True\n    },\n    \"红金国风花字\": {\n        \"resource_id\": \"7507460201549843736\",\n        \"effect_id\": \"7507460201549843736\",\n        \"name\": \"红金国风花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变描边立体花字\": {\n        \"resource_id\": \"7404667171537767699\",\n        \"effect_id\": \"7404667171537767699\",\n        \"name\": \"黄色渐变描边立体花字\",\n        \"is_vip\": True\n    },\n    \"白纸纹理蓝阴影花字\": {\n        \"resource_id\": \"7509041829556522265\",\n        \"effect_id\": \"7509041829556522265\",\n        \"name\": \"白纸纹理蓝阴影花字\",\n        \"is_vip\": True\n    },\n    \"国风花字\": {\n        \"resource_id\": \"7406648659976260903\",\n        \"effect_id\": \"7406648659976260903\",\n        \"name\": \"国风花字\",\n        \"is_vip\": True\n    },\n    \"黑色拼贴方底花字\": {\n        \"resource_id\": \"7405933257776172314\",\n        \"effect_id\": \"7405933257776172314\",\n        \"name\": \"黑色拼贴方底花字\",\n        \"is_vip\": True\n    },\n    \"描边字\": {\n        \"resource_id\": \"7360986749046213928\",\n        \"effect_id\": \"7360986749046213928\",\n        \"name\": \"描边字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7465177921276136766\",\n        \"effect_id\": \"7465177921276136766\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"点金花字\": {\n        \"resource_id\": \"7406200724171787574\",\n        \"effect_id\": \"7406200724171787574\",\n        \"name\": \"点金花字\",\n        \"is_vip\": True\n    },\n    \"白字内发光蓝边字\": {\n        \"resource_id\": \"7406693646592003366\",\n        \"effect_id\": \"7406693646592003366\",\n        \"name\": \"白字内发光蓝边字\",\n        \"is_vip\": True\n    },\n    \"米白厚底立体花字\": {\n        \"resource_id\": \"7371351770045484338\",\n        \"effect_id\": \"7371351770045484338\",\n        \"name\": \"米白厚底立体花字\",\n        \"is_vip\": True\n    },\n    \"水墨红底白色花字\": {\n        \"resource_id\": \"7405529606859607347\",\n        \"effect_id\": \"7405529606859607347\",\n        \"name\": \"水墨红底白色花字\",\n        \"is_vip\": True\n    },\n    \"条纹纹理黄色立体花字\": {\n        \"resource_id\": \"7404709465209064745\",\n        \"effect_id\": \"7404709465209064745\",\n        \"name\": \"条纹纹理黄色立体花字\",\n        \"is_vip\": True\n    },\n    \"红色恐怖氛围纹理花字\": {\n        \"resource_id\": \"7404872280662166834\",\n        \"effect_id\": \"7404872280662166834\",\n        \"name\": \"红色恐怖氛围纹理花字\",\n        \"is_vip\": True\n    },\n    \"蓝色折纸\": {\n        \"resource_id\": \"7459675119116373272\",\n        \"effect_id\": \"7459675119116373272\",\n        \"name\": \"蓝色折纸\",\n        \"is_vip\": True\n    },\n    \"港风立体\": {\n        \"resource_id\": \"7434560086166490418\",\n        \"effect_id\": \"7434560086166490418\",\n        \"name\": \"港风立体\",\n        \"is_vip\": True\n    },\n    \"红色发光花字\": {\n        \"resource_id\": \"7431445423283244297\",\n        \"effect_id\": \"7431445423283244297\",\n        \"name\": \"红色发光花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变立体字\": {\n        \"resource_id\": \"7404696990510042402\",\n        \"effect_id\": \"7404696990510042402\",\n        \"name\": \"黄色渐变立体字\",\n        \"is_vip\": True\n    },\n    \"蓝莓奶酪\": {\n        \"resource_id\": \"7506829483878649150\",\n        \"effect_id\": \"7506829483878649150\",\n        \"name\": \"蓝莓奶酪\",\n        \"is_vip\": True\n    },\n    \"新年立体花字\": {\n        \"resource_id\": \"7451570972550991166\",\n        \"effect_id\": \"7451570972550991166\",\n        \"name\": \"新年立体花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7430745414313332006\",\n        \"effect_id\": \"7430745414313332006\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"25元旦-红花背景花字\": {\n        \"resource_id\": \"7447831886874938678\",\n        \"effect_id\": \"7447831886874938678\",\n        \"name\": \"25元旦-红花背景花字\",\n        \"is_vip\": True\n    },\n    \"黑色金箔描边立体花字\": {\n        \"resource_id\": \"7404523157400472869\",\n        \"effect_id\": \"7404523157400472869\",\n        \"name\": \"黑色金箔描边立体花字\",\n        \"is_vip\": True\n    },\n    \"灰白水墨国风花字\": {\n        \"resource_id\": \"7405537335850306853\",\n        \"effect_id\": \"7405537335850306853\",\n        \"name\": \"灰白水墨国风花字\",\n        \"is_vip\": True\n    },\n    \"科技感朋克发光立体标题花字\": {\n        \"resource_id\": \"7405801186286259466\",\n        \"effect_id\": \"7405801186286259466\",\n        \"name\": \"科技感朋克发光立体标题花字\",\n        \"is_vip\": True\n    },\n    \"田字格图案蜡笔纹理花字\": {\n        \"resource_id\": \"7405067510053211446\",\n        \"effect_id\": \"7405067510053211446\",\n        \"name\": \"田字格图案蜡笔纹理花字\",\n        \"is_vip\": True\n    },\n    \"黄红撞色立体\": {\n        \"resource_id\": \"7406637506977877299\",\n        \"effect_id\": \"7406637506977877299\",\n        \"name\": \"黄红撞色立体\",\n        \"is_vip\": True\n    },\n    \"中式背景文字\": {\n        \"resource_id\": \"7405203982286720256\",\n        \"effect_id\": \"7405203982286720256\",\n        \"name\": \"中式背景文字\",\n        \"is_vip\": True\n    },\n    \"日综蓝白方框字\": {\n        \"resource_id\": \"7472013339640614206\",\n        \"effect_id\": \"7472013339640614206\",\n        \"name\": \"日综蓝白方框字\",\n        \"is_vip\": True\n    },\n    \"综艺蓝黄立体\": {\n        \"resource_id\": \"7436409520848522546\",\n        \"effect_id\": \"7436409520848522546\",\n        \"name\": \"综艺蓝黄立体\",\n        \"is_vip\": True\n    },\n    \"水墨风白字黑边红墨点花字\": {\n        \"resource_id\": \"7405514240779357449\",\n        \"effect_id\": \"7405514240779357449\",\n        \"name\": \"水墨风白字黑边红墨点花字\",\n        \"is_vip\": True\n    },\n    \"创意立体黄色花字高级感主题文字封面标题字\": {\n        \"resource_id\": \"7507075178447359282\",\n        \"effect_id\": \"7507075178447359282\",\n        \"name\": \"创意立体黄色花字高级感主题文字封面标题字\",\n        \"is_vip\": True\n    },\n    \"白色\": {\n        \"resource_id\": \"7509055757908806937\",\n        \"effect_id\": \"7509055757908806937\",\n        \"name\": \"白色\",\n        \"is_vip\": True\n    },\n    \"黄字黑边\": {\n        \"resource_id\": \"7406683118108806437\",\n        \"effect_id\": \"7406683118108806437\",\n        \"name\": \"黄字黑边\",\n        \"is_vip\": True\n    },\n    \"大理石花纹字\": {\n        \"resource_id\": \"7411036229677878554\",\n        \"effect_id\": \"7411036229677878554\",\n        \"name\": \"大理石花纹字\",\n        \"is_vip\": True\n    },\n    \"中秋黄色字\": {\n        \"resource_id\": \"7404409329991879988\",\n        \"effect_id\": \"7404409329991879988\",\n        \"name\": \"中秋黄色字\",\n        \"is_vip\": True\n    },\n    \"综艺感黄色立体描边花字\": {\n        \"resource_id\": \"7481983816001834265\",\n        \"effect_id\": \"7481983816001834265\",\n        \"name\": \"综艺感黄色立体描边花字\",\n        \"is_vip\": True\n    },\n    \"月饼花字\": {\n        \"resource_id\": \"7548895672402185497\",\n        \"effect_id\": \"7548895672402185497\",\n        \"name\": \"月饼花字\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变微立体花字\": {\n        \"resource_id\": \"7406980293233560859\",\n        \"effect_id\": \"7406980293233560859\",\n        \"name\": \"蓝色渐变微立体花字\",\n        \"is_vip\": True\n    },\n    \"白字橘色发光花字\": {\n        \"resource_id\": \"7371372494336396570\",\n        \"effect_id\": \"7371372494336396570\",\n        \"name\": \"白字橘色发光花字\",\n        \"is_vip\": True\n    },\n    \"几何纹理黑色阴影花字\": {\n        \"resource_id\": \"7404700217553063209\",\n        \"effect_id\": \"7404700217553063209\",\n        \"name\": \"几何纹理黑色阴影花字\",\n        \"is_vip\": True\n    },\n    \"悬疑剧字幕\": {\n        \"resource_id\": \"7411046109285485861\",\n        \"effect_id\": \"7411046109285485861\",\n        \"name\": \"悬疑剧字幕\",\n        \"is_vip\": True\n    },\n    \"蓝色纹理花字\": {\n        \"resource_id\": \"7479073211918044441\",\n        \"effect_id\": \"7479073211918044441\",\n        \"name\": \"蓝色纹理花字\",\n        \"is_vip\": True\n    },\n    \"划重点花字\": {\n        \"resource_id\": \"7369127125569342731\",\n        \"effect_id\": \"7369127125569342731\",\n        \"name\": \"划重点花字\",\n        \"is_vip\": True\n    },\n    \"橙色底纹花字\": {\n        \"resource_id\": \"7533453859830713662\",\n        \"effect_id\": \"7533453859830713662\",\n        \"name\": \"橙色底纹花字\",\n        \"is_vip\": True\n    },\n    \"雪花图案渐变蓝色立体花字\": {\n        \"resource_id\": \"7405034038135655719\",\n        \"effect_id\": \"7405034038135655719\",\n        \"name\": \"雪花图案渐变蓝色立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变描边简约风格花字\": {\n        \"resource_id\": \"7455983000291937586\",\n        \"effect_id\": \"7455983000291937586\",\n        \"name\": \"蓝色渐变描边简约风格花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变橘色阴影立体花字\": {\n        \"resource_id\": \"7495033287438781758\",\n        \"effect_id\": \"7495033287438781758\",\n        \"name\": \"黄色渐变橘色阴影立体花字\",\n        \"is_vip\": True\n    },\n    \"双十一-立体紫色\": {\n        \"resource_id\": \"7296357486490144036\",\n        \"effect_id\": \"7296357486490144036\",\n        \"name\": \"双十一-立体紫色\",\n        \"is_vip\": True\n    },\n    \"黄色贴纸描边字效\": {\n        \"resource_id\": \"7533293069123390744\",\n        \"effect_id\": \"7533293069123390744\",\n        \"name\": \"黄色贴纸描边字效\",\n        \"is_vip\": True\n    },\n    \"渐变蓝色阴影\": {\n        \"resource_id\": \"7283715592316554555\",\n        \"effect_id\": \"7283715592316554555\",\n        \"name\": \"渐变蓝色阴影\",\n        \"is_vip\": True\n    },\n    \"黑白水墨花字\": {\n        \"resource_id\": \"7405536862133046565\",\n        \"effect_id\": \"7405536862133046565\",\n        \"name\": \"黑白水墨花字\",\n        \"is_vip\": True\n    },\n    \"复古黄沙水彩纹理花字\": {\n        \"resource_id\": \"7405517504128273676\",\n        \"effect_id\": \"7405517504128273676\",\n        \"name\": \"复古黄沙水彩纹理花字\",\n        \"is_vip\": True\n    },\n    \"红色渐变\": {\n        \"resource_id\": \"7461550488073538841\",\n        \"effect_id\": \"7461550488073538841\",\n        \"name\": \"红色渐变\",\n        \"is_vip\": True\n    },\n    \"潮酷背景字\": {\n        \"resource_id\": \"7431460080228257039\",\n        \"effect_id\": \"7431460080228257039\",\n        \"name\": \"潮酷背景字\",\n        \"is_vip\": True\n    },\n    \"撞色描边字\": {\n        \"resource_id\": \"7404391553164135715\",\n        \"effect_id\": \"7404391553164135715\",\n        \"name\": \"撞色描边字\",\n        \"is_vip\": True\n    },\n    \"紫色立体花字\": {\n        \"resource_id\": \"7406690026009972004\",\n        \"effect_id\": \"7406690026009972004\",\n        \"name\": \"紫色立体花字\",\n        \"is_vip\": True\n    },\n    \"冬季渐变蓝色立体花字\": {\n        \"resource_id\": \"7431012567369125161\",\n        \"effect_id\": \"7431012567369125161\",\n        \"name\": \"冬季渐变蓝色立体花字\",\n        \"is_vip\": True\n    },\n    \"红黄复古浮雕纹理字\": {\n        \"resource_id\": \"7405414031072169250\",\n        \"effect_id\": \"7405414031072169250\",\n        \"name\": \"红黄复古浮雕纹理字\",\n        \"is_vip\": True\n    },\n    \"3D渐变橘红色立体花字\": {\n        \"resource_id\": \"7404702615671508263\",\n        \"effect_id\": \"7404702615671508263\",\n        \"name\": \"3D渐变橘红色立体花字\",\n        \"is_vip\": True\n    },\n    \"粉蓝渐变花字\": {\n        \"resource_id\": \"7404522414941424923\",\n        \"effect_id\": \"7404522414941424923\",\n        \"name\": \"粉蓝渐变花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7511273485730237758\",\n        \"effect_id\": \"7511273485730237758\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7491617722359565630\",\n        \"effect_id\": \"7491617722359565630\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"黑紫星空花字\": {\n        \"resource_id\": \"7405795232748490025\",\n        \"effect_id\": \"7405795232748490025\",\n        \"name\": \"黑紫星空花字\",\n        \"is_vip\": True\n    },\n    \"冷色调简单花字\": {\n        \"resource_id\": \"7430642926293732658\",\n        \"effect_id\": \"7430642926293732658\",\n        \"name\": \"冷色调简单花字\",\n        \"is_vip\": True\n    },\n    \"金色渐变立体花字\": {\n        \"resource_id\": \"7371420451526020389\",\n        \"effect_id\": \"7371420451526020389\",\n        \"name\": \"金色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"红色金箔纹理立体花字\": {\n        \"resource_id\": \"7404507481205984539\",\n        \"effect_id\": \"7404507481205984539\",\n        \"name\": \"红色金箔纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"黄蓝撞色纹理立体花字\": {\n        \"resource_id\": \"7405570848041487666\",\n        \"effect_id\": \"7405570848041487666\",\n        \"name\": \"黄蓝撞色纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7365356770652376330\",\n        \"effect_id\": \"7365356770652376330\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"渐变圆底花字\": {\n        \"resource_id\": \"7406353145938382130\",\n        \"effect_id\": \"7406353145938382130\",\n        \"name\": \"渐变圆底花字\",\n        \"is_vip\": True\n    },\n    \"白字蓝粉相间底色花字\": {\n        \"resource_id\": \"7444510136296541465\",\n        \"effect_id\": \"7444510136296541465\",\n        \"name\": \"白字蓝粉相间底色花字\",\n        \"is_vip\": True\n    },\n    \"综艺风黄色立体描边花字\": {\n        \"resource_id\": \"7505458612001852697\",\n        \"effect_id\": \"7505458612001852697\",\n        \"name\": \"综艺风黄色立体描边花字\",\n        \"is_vip\": True\n    },\n    \"蓝色纸张质感立体花字\": {\n        \"resource_id\": \"7430855417703435529\",\n        \"effect_id\": \"7430855417703435529\",\n        \"name\": \"蓝色纸张质感立体花字\",\n        \"is_vip\": True\n    },\n    \"彩色带图案花字\": {\n        \"resource_id\": \"7407037141584203059\",\n        \"effect_id\": \"7407037141584203059\",\n        \"name\": \"彩色带图案花字\",\n        \"is_vip\": True\n    },\n    \"红蓝橙描边立体花字\": {\n        \"resource_id\": \"7481302843849329982\",\n        \"effect_id\": \"7481302843849329982\",\n        \"name\": \"红蓝橙描边立体花字\",\n        \"is_vip\": True\n    },\n    \"红色印章花字\": {\n        \"resource_id\": \"7407464175347272998\",\n        \"effect_id\": \"7407464175347272998\",\n        \"name\": \"红色印章花字\",\n        \"is_vip\": True\n    },\n    \"五一立体\": {\n        \"resource_id\": \"7493107948286250302\",\n        \"effect_id\": \"7493107948286250302\",\n        \"name\": \"五一立体\",\n        \"is_vip\": True\n    },\n    \"淡黄色渐变发光花字\": {\n        \"resource_id\": \"7371414308770647346\",\n        \"effect_id\": \"7371414308770647346\",\n        \"name\": \"淡黄色渐变发光花字\",\n        \"is_vip\": True\n    },\n    \"白色方底拼贴花字\": {\n        \"resource_id\": \"7405931282632412442\",\n        \"effect_id\": \"7405931282632412442\",\n        \"name\": \"白色方底拼贴花字\",\n        \"is_vip\": True\n    },\n    \"红金立体国风花字\": {\n        \"resource_id\": \"7548337425781935422\",\n        \"effect_id\": \"7548337425781935422\",\n        \"name\": \"红金立体国风花字\",\n        \"is_vip\": True\n    },\n    \"暗黑金泼墨风花字\": {\n        \"resource_id\": \"7405492993878281510\",\n        \"effect_id\": \"7405492993878281510\",\n        \"name\": \"暗黑金泼墨风花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7545366362924043582\",\n        \"effect_id\": \"7545366362924043582\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"红色描边花字\": {\n        \"resource_id\": \"7442261279013604644\",\n        \"effect_id\": \"7442261279013604644\",\n        \"name\": \"红色描边花字\",\n        \"is_vip\": True\n    },\n    \"金色渐变立体花字\": {\n        \"resource_id\": \"7506868020917226777\",\n        \"effect_id\": \"7506868020917226777\",\n        \"name\": \"金色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"橙色立体花字\": {\n        \"resource_id\": \"7405152529522101531\",\n        \"effect_id\": \"7405152529522101531\",\n        \"name\": \"橙色立体花字\",\n        \"is_vip\": True\n    },\n    \"红色锈迹文字\": {\n        \"resource_id\": \"7412523765768178944\",\n        \"effect_id\": \"7412523765768178944\",\n        \"name\": \"红色锈迹文字\",\n        \"is_vip\": True\n    },\n    \"紫色渐变\": {\n        \"resource_id\": \"7398455661513674035\",\n        \"effect_id\": \"7398455661513674035\",\n        \"name\": \"紫色渐变\",\n        \"is_vip\": True\n    },\n    \"黄色\": {\n        \"resource_id\": \"7398454655505763593\",\n        \"effect_id\": \"7398454655505763593\",\n        \"name\": \"黄色\",\n        \"is_vip\": True\n    },\n    \"黑色渐变白蓝描边\": {\n        \"resource_id\": \"7406687421921791282\",\n        \"effect_id\": \"7406687421921791282\",\n        \"name\": \"黑色渐变白蓝描边\",\n        \"is_vip\": True\n    },\n    \"端午61立体字效\": {\n        \"resource_id\": \"7506872589642665240\",\n        \"effect_id\": \"7506872589642665240\",\n        \"name\": \"端午61立体字效\",\n        \"is_vip\": True\n    },\n    \"黄色立体文字\": {\n        \"resource_id\": \"7405120470477065507\",\n        \"effect_id\": \"7405120470477065507\",\n        \"name\": \"黄色立体文字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7431452163181792524\",\n        \"effect_id\": \"7431452163181792524\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"炫彩模糊花字\": {\n        \"resource_id\": \"7236984607575461154\",\n        \"effect_id\": \"7236984607575461154\",\n        \"name\": \"炫彩模糊花字\",\n        \"is_vip\": True\n    },\n    \"五四青年立体\": {\n        \"resource_id\": \"7494656119529393470\",\n        \"effect_id\": \"7494656119529393470\",\n        \"name\": \"五四青年立体\",\n        \"is_vip\": True\n    },\n    \"复古方底立体\": {\n        \"resource_id\": \"7406389812925680933\",\n        \"effect_id\": \"7406389812925680933\",\n        \"name\": \"复古方底立体\",\n        \"is_vip\": True\n    },\n    \"喜庆花字\": {\n        \"resource_id\": \"7467033569848839486\",\n        \"effect_id\": \"7467033569848839486\",\n        \"name\": \"喜庆花字\",\n        \"is_vip\": True\n    },\n    \"中秋黄白立体字效\": {\n        \"resource_id\": \"7546585357555649816\",\n        \"effect_id\": \"7546585357555649816\",\n        \"name\": \"中秋黄白立体字效\",\n        \"is_vip\": True\n    },\n    \"黄蓝色立体综艺描边花字\": {\n        \"resource_id\": \"7403927160563551528\",\n        \"effect_id\": \"7403927160563551528\",\n        \"name\": \"黄蓝色立体综艺描边花字\",\n        \"is_vip\": True\n    },\n    \"白紫色立体花字\": {\n        \"resource_id\": \"7405229843220106534\",\n        \"effect_id\": \"7405229843220106534\",\n        \"name\": \"白紫色立体花字\",\n        \"is_vip\": True\n    },\n    \"金色渐变立体发光花字\": {\n        \"resource_id\": \"7372363920864005386\",\n        \"effect_id\": \"7372363920864005386\",\n        \"name\": \"金色渐变立体发光花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7547731905500794174\",\n        \"effect_id\": \"7547731905500794174\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"蓝色描边立体花字\": {\n        \"resource_id\": \"7471910410766109977\",\n        \"effect_id\": \"7471910410766109977\",\n        \"name\": \"蓝色描边立体花字\",\n        \"is_vip\": True\n    },\n    \"黄色白色\": {\n        \"resource_id\": \"7505771535878098200\",\n        \"effect_id\": \"7505771535878098200\",\n        \"name\": \"黄色白色\",\n        \"is_vip\": True\n    },\n    \"渐变色白边立体花字\": {\n        \"resource_id\": \"7406364344176414003\",\n        \"effect_id\": \"7406364344176414003\",\n        \"name\": \"渐变色白边立体花字\",\n        \"is_vip\": True\n    },\n    \"橘猫花字\": {\n        \"resource_id\": \"7403728040653573387\",\n        \"effect_id\": \"7403728040653573387\",\n        \"name\": \"橘猫花字\",\n        \"is_vip\": True\n    },\n    \"综艺字立体\": {\n        \"resource_id\": \"7409333268195101979\",\n        \"effect_id\": \"7409333268195101979\",\n        \"name\": \"综艺字立体\",\n        \"is_vip\": True\n    },\n    \"红橘新年花字\": {\n        \"resource_id\": \"7455529495043525950\",\n        \"effect_id\": \"7455529495043525950\",\n        \"name\": \"红橘新年花字\",\n        \"is_vip\": True\n    },\n    \"红包花字\": {\n        \"resource_id\": \"7449034603760749839\",\n        \"effect_id\": \"7449034603760749839\",\n        \"name\": \"红包花字\",\n        \"is_vip\": True\n    },\n    \"花字 经典黄色加深蓝经典配色凸显文字\": {\n        \"resource_id\": \"7231489008126266679\",\n        \"effect_id\": \"7231489008126266679\",\n        \"name\": \"花字 经典黄色加深蓝经典配色凸显文字\",\n        \"is_vip\": True\n    },\n    \"橙色花字\": {\n        \"resource_id\": \"7519880279205448984\",\n        \"effect_id\": \"7519880279205448984\",\n        \"name\": \"橙色花字\",\n        \"is_vip\": True\n    },\n    \"淡蓝色渐变发光花字\": {\n        \"resource_id\": \"7371415414817000754\",\n        \"effect_id\": \"7371415414817000754\",\n        \"name\": \"淡蓝色渐变发光花字\",\n        \"is_vip\": True\n    },\n    \"紫色双层描边花字\": {\n        \"resource_id\": \"7406385391265156362\",\n        \"effect_id\": \"7406385391265156362\",\n        \"name\": \"紫色双层描边花字\",\n        \"is_vip\": True\n    },\n    \"新年红金花字\": {\n        \"resource_id\": \"7455254263888104766\",\n        \"effect_id\": \"7455254263888104766\",\n        \"name\": \"新年红金花字\",\n        \"is_vip\": True\n    },\n    \"晕染蓝\": {\n        \"resource_id\": \"7357027100324367627\",\n        \"effect_id\": \"7357027100324367627\",\n        \"name\": \"晕染蓝\",\n        \"is_vip\": True\n    },\n    \"黑色渐变立体花字\": {\n        \"resource_id\": \"7431440010152316169\",\n        \"effect_id\": \"7431440010152316169\",\n        \"name\": \"黑色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"拼贴绿\": {\n        \"resource_id\": \"7360540744035142953\",\n        \"effect_id\": \"7360540744035142953\",\n        \"name\": \"拼贴绿\",\n        \"is_vip\": True\n    },\n    \"橘黄色波点渐变发光花字\": {\n        \"resource_id\": \"7404370982238014747\",\n        \"effect_id\": \"7404370982238014747\",\n        \"name\": \"橘黄色波点渐变发光花字\",\n        \"is_vip\": True\n    },\n    \"红黄白多层渐变立体花字\": {\n        \"resource_id\": \"7403764204420730122\",\n        \"effect_id\": \"7403764204420730122\",\n        \"name\": \"红黄白多层渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变\": {\n        \"resource_id\": \"7364604452323495204\",\n        \"effect_id\": \"7364604452323495204\",\n        \"name\": \"蓝色渐变\",\n        \"is_vip\": True\n    },\n    \"黄绿高饱和多重描边字\": {\n        \"resource_id\": \"7404415905066782004\",\n        \"effect_id\": \"7404415905066782004\",\n        \"name\": \"黄绿高饱和多重描边字\",\n        \"is_vip\": True\n    },\n    \"粉色发光花字\": {\n        \"resource_id\": \"7400335293565455679\",\n        \"effect_id\": \"7400335293565455679\",\n        \"name\": \"粉色发光花字\",\n        \"is_vip\": True\n    },\n    \"简约雪纹理立体花字\": {\n        \"resource_id\": \"7430397468082228543\",\n        \"effect_id\": \"7430397468082228543\",\n        \"name\": \"简约雪纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"白字红边重影风格花字\": {\n        \"resource_id\": \"7450496790354234674\",\n        \"effect_id\": \"7450496790354234674\",\n        \"name\": \"白字红边重影风格花字\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变\": {\n        \"resource_id\": \"7385227292521418018\",\n        \"effect_id\": \"7385227292521418018\",\n        \"name\": \"蓝色渐变\",\n        \"is_vip\": True\n    },\n    \"粉蓝色渐变立体发光花字\": {\n        \"resource_id\": \"7366060581410901286\",\n        \"effect_id\": \"7366060581410901286\",\n        \"name\": \"粉蓝色渐变立体发光花字\",\n        \"is_vip\": True\n    },\n    \"黄色奶酪字\": {\n        \"resource_id\": \"7405831511003417871\",\n        \"effect_id\": \"7405831511003417871\",\n        \"name\": \"黄色奶酪字\",\n        \"is_vip\": True\n    },\n    \"彩虹色描边白字\": {\n        \"resource_id\": \"7406673678412418354\",\n        \"effect_id\": \"7406673678412418354\",\n        \"name\": \"彩虹色描边白字\",\n        \"is_vip\": True\n    },\n    \"橙黄色渐变立体花字\": {\n        \"resource_id\": \"7406360821216988416\",\n        \"effect_id\": \"7406360821216988416\",\n        \"name\": \"橙黄色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝色纸张质感黄底花字\": {\n        \"resource_id\": \"7430856547934211379\",\n        \"effect_id\": \"7430856547934211379\",\n        \"name\": \"蓝色纸张质感黄底花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7533174868930645273\",\n        \"effect_id\": \"7533174868930645273\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"粉色爱心立体字\": {\n        \"resource_id\": \"7474476846223101209\",\n        \"effect_id\": \"7474476846223101209\",\n        \"name\": \"粉色爱心立体字\",\n        \"is_vip\": True\n    },\n    \"蓝色纹理立体描边花字\": {\n        \"resource_id\": \"7406335734044577035\",\n        \"effect_id\": \"7406335734044577035\",\n        \"name\": \"蓝色纹理立体描边花字\",\n        \"is_vip\": True\n    },\n    \"拼贴浅红\": {\n        \"resource_id\": \"7360960769703398695\",\n        \"effect_id\": \"7360960769703398695\",\n        \"name\": \"拼贴浅红\",\n        \"is_vip\": True\n    },\n    \"红色花字 \": {\n        \"resource_id\": \"7359358208286215464\",\n        \"effect_id\": \"7359358208286215464\",\n        \"name\": \"红色花字 \",\n        \"is_vip\": True\n    },\n    \"故障字\": {\n        \"resource_id\": \"7347989608908606783\",\n        \"effect_id\": \"7347989608908606783\",\n        \"name\": \"故障字\",\n        \"is_vip\": True\n    },\n    \"橙色秋叶立体花字\": {\n        \"resource_id\": \"7538998611628084542\",\n        \"effect_id\": \"7538998611628084542\",\n        \"name\": \"橙色秋叶立体花字\",\n        \"is_vip\": True\n    },\n    \"国庆黄红立体字效\": {\n        \"resource_id\": \"7546423084874599705\",\n        \"effect_id\": \"7546423084874599705\",\n        \"name\": \"国庆黄红立体字效\",\n        \"is_vip\": True\n    },\n    \"黄红渐变纹理花字\": {\n        \"resource_id\": \"7548711671317974334\",\n        \"effect_id\": \"7548711671317974334\",\n        \"name\": \"黄红渐变纹理花字\",\n        \"is_vip\": True\n    },\n    \"黄橙玻璃质感秋日花字\": {\n        \"resource_id\": \"7538711238725946649\",\n        \"effect_id\": \"7538711238725946649\",\n        \"name\": \"黄橙玻璃质感秋日花字\",\n        \"is_vip\": True\n    },\n    \"复古黄色方底背景\": {\n        \"resource_id\": \"7406380674057358642\",\n        \"effect_id\": \"7406380674057358642\",\n        \"name\": \"复古黄色方底背景\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7539626317688425753\",\n        \"effect_id\": \"7539626317688425753\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7548813025013419289\",\n        \"effect_id\": \"7548813025013419289\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7540868241737141529\",\n        \"effect_id\": \"7540868241737141529\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"立体桔黄\": {\n        \"resource_id\": \"7546349045032439102\",\n        \"effect_id\": \"7546349045032439102\",\n        \"name\": \"立体桔黄\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7538719944897236286\",\n        \"effect_id\": \"7538719944897236286\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"618黑边\": {\n        \"resource_id\": \"7509793945480613144\",\n        \"effect_id\": \"7509793945480613144\",\n        \"name\": \"618黑边\",\n        \"is_vip\": True\n    },\n    \"综艺风红色立体描边花字\": {\n        \"resource_id\": \"7508042807811280190\",\n        \"effect_id\": \"7508042807811280190\",\n        \"name\": \"综艺风红色立体描边花字\",\n        \"is_vip\": True\n    },\n    \"高考立体\": {\n        \"resource_id\": \"7509930498681163032\",\n        \"effect_id\": \"7509930498681163032\",\n        \"name\": \"高考立体\",\n        \"is_vip\": True\n    },\n    \"糖炒栗子\": {\n        \"resource_id\": \"7545871911138577726\",\n        \"effect_id\": \"7545871911138577726\",\n        \"name\": \"糖炒栗子\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7540131523937357118\",\n        \"effect_id\": \"7540131523937357118\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7546127896943840536\",\n        \"effect_id\": \"7546127896943840536\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"斜纹花字\": {\n        \"resource_id\": \"7546131418620071192\",\n        \"effect_id\": \"7546131418620071192\",\n        \"name\": \"斜纹花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变蓝色描边立体花字\": {\n        \"resource_id\": \"7507853100984667416\",\n        \"effect_id\": \"7507853100984667416\",\n        \"name\": \"黄色渐变蓝色描边立体花字\",\n        \"is_vip\": True\n    },\n    \"三原色\": {\n        \"resource_id\": \"7527398816782454040\",\n        \"effect_id\": \"7527398816782454040\",\n        \"name\": \"三原色\",\n        \"is_vip\": True\n    },\n    \"糖炒栗子\": {\n        \"resource_id\": \"7546032665510841662\",\n        \"effect_id\": \"7546032665510841662\",\n        \"name\": \"糖炒栗子\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7544777148205190425\",\n        \"effect_id\": \"7544777148205190425\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"黄色纹理蓝棕色阴影描边立体花字\": {\n        \"resource_id\": \"7511339634761420057\",\n        \"effect_id\": \"7511339634761420057\",\n        \"name\": \"黄色纹理蓝棕色阴影描边立体花字\",\n        \"is_vip\": True\n    },\n    \"橙色渐变立体花字\": {\n        \"resource_id\": \"7533092158820142360\",\n        \"effect_id\": \"7533092158820142360\",\n        \"name\": \"橙色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"立体花字\": {\n        \"resource_id\": \"7532701961364278553\",\n        \"effect_id\": \"7532701961364278553\",\n        \"name\": \"立体花字\",\n        \"is_vip\": True\n    },\n    \"毛绒字\": {\n        \"resource_id\": \"7535694140227456280\",\n        \"effect_id\": \"7535694140227456280\",\n        \"name\": \"毛绒字\",\n        \"is_vip\": True\n    },\n    \"我的潮流指南\": {\n        \"resource_id\": \"7506898516468370750\",\n        \"effect_id\": \"7506898516468370750\",\n        \"name\": \"我的潮流指南\",\n        \"is_vip\": True\n    },\n    \"蓝莓奶酪\": {\n        \"resource_id\": \"7507101495339568446\",\n        \"effect_id\": \"7507101495339568446\",\n        \"name\": \"蓝莓奶酪\",\n        \"is_vip\": True\n    },\n    \"综艺风蓝色立体描边花字\": {\n        \"resource_id\": \"7495312625169911065\",\n        \"effect_id\": \"7495312625169911065\",\n        \"name\": \"综艺风蓝色立体描边花字\",\n        \"is_vip\": True\n    },\n    \"彩铅渐变黄色花字\": {\n        \"resource_id\": \"7477620313522703678\",\n        \"effect_id\": \"7477620313522703678\",\n        \"name\": \"彩铅渐变黄色花字\",\n        \"is_vip\": True\n    },\n    \"彩色\": {\n        \"resource_id\": \"7474582555853901080\",\n        \"effect_id\": \"7474582555853901080\",\n        \"name\": \"彩色\",\n        \"is_vip\": True\n    },\n    \"膨胀感字\": {\n        \"resource_id\": \"7480089681586130238\",\n        \"effect_id\": \"7480089681586130238\",\n        \"name\": \"膨胀感字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7492216396290542873\",\n        \"effect_id\": \"7492216396290542873\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7507526398710435097\",\n        \"effect_id\": \"7507526398710435097\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7482733632910675262\",\n        \"effect_id\": \"7482733632910675262\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"蓝紫色混合花字\": {\n        \"resource_id\": \"7236599551984028939\",\n        \"effect_id\": \"7236599551984028939\",\n        \"name\": \"蓝紫色混合花字\",\n        \"is_vip\": True\n    },\n    \"蓝色\": {\n        \"resource_id\": \"7481665617796369689\",\n        \"effect_id\": \"7481665617796369689\",\n        \"name\": \"蓝色\",\n        \"is_vip\": True\n    },\n    \"彩铅渐变粉色花字\": {\n        \"resource_id\": \"7477756249665342744\",\n        \"effect_id\": \"7477756249665342744\",\n        \"name\": \"彩铅渐变粉色花字\",\n        \"is_vip\": True\n    },\n    \"渐变花字\": {\n        \"resource_id\": \"7260020603044826427\",\n        \"effect_id\": \"7260020603044826427\",\n        \"name\": \"渐变花字\",\n        \"is_vip\": True\n    },\n    \"绿色花字发光\": {\n        \"resource_id\": \"7506874577159572755\",\n        \"effect_id\": \"7506874577159572755\",\n        \"name\": \"绿色花字发光\",\n        \"is_vip\": True\n    },\n    \"可爱彩色涂鸦花字\": {\n        \"resource_id\": \"7350563191123938611\",\n        \"effect_id\": \"7350563191123938611\",\n        \"name\": \"可爱彩色涂鸦花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7508005459065097497\",\n        \"effect_id\": \"7508005459065097497\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"粉色闪闪芭比花字\": {\n        \"resource_id\": \"7507082793592032536\",\n        \"effect_id\": \"7507082793592032536\",\n        \"name\": \"粉色闪闪芭比花字\",\n        \"is_vip\": True\n    },\n    \"粉色渐变\": {\n        \"resource_id\": \"7469677410414382398\",\n        \"effect_id\": \"7469677410414382398\",\n        \"name\": \"粉色渐变\",\n        \"is_vip\": True\n    },\n    \"马卡龙\": {\n        \"resource_id\": \"7509757725908225304\",\n        \"effect_id\": \"7509757725908225304\",\n        \"name\": \"马卡龙\",\n        \"is_vip\": True\n    },\n    \"发光字\": {\n        \"resource_id\": \"7348369625215749388\",\n        \"effect_id\": \"7348369625215749388\",\n        \"name\": \"发光字\",\n        \"is_vip\": True\n    },\n    \"粉笔字\": {\n        \"resource_id\": \"7403964791372533027\",\n        \"effect_id\": \"7403964791372533027\",\n        \"name\": \"粉笔字\",\n        \"is_vip\": True\n    },\n    \"蓝白\": {\n        \"resource_id\": \"7508363172798270744\",\n        \"effect_id\": \"7508363172798270744\",\n        \"name\": \"蓝白\",\n        \"is_vip\": True\n    },\n    \"黄绿渐变立体字\": {\n        \"resource_id\": \"7477149973520583961\",\n        \"effect_id\": \"7477149973520583961\",\n        \"name\": \"黄绿渐变立体字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7495692617561181502\",\n        \"effect_id\": \"7495692617561181502\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"多层描边彩色多巴胺花字\": {\n        \"resource_id\": \"7494493486155042110\",\n        \"effect_id\": \"7494493486155042110\",\n        \"name\": \"多层描边彩色多巴胺花字\",\n        \"is_vip\": True\n    },\n    \"蓝粉\": {\n        \"resource_id\": \"7492310644704841022\",\n        \"effect_id\": \"7492310644704841022\",\n        \"name\": \"蓝粉\",\n        \"is_vip\": True\n    },\n    \"节日绿色立体描边花字\": {\n        \"resource_id\": \"7507164704448679193\",\n        \"effect_id\": \"7507164704448679193\",\n        \"name\": \"节日绿色立体描边花字\",\n        \"is_vip\": True\n    },\n    \"蓝绿色花字\": {\n        \"resource_id\": \"7347171058488823066\",\n        \"effect_id\": \"7347171058488823066\",\n        \"name\": \"蓝绿色花字\",\n        \"is_vip\": True\n    },\n    \"粉色立体拼贴花字\": {\n        \"resource_id\": \"7405934415567736074\",\n        \"effect_id\": \"7405934415567736074\",\n        \"name\": \"粉色立体拼贴花字\",\n        \"is_vip\": True\n    },\n    \"彩色描边立体可爱花字\": {\n        \"resource_id\": \"7492411773329476889\",\n        \"effect_id\": \"7492411773329476889\",\n        \"name\": \"彩色描边立体可爱花字\",\n        \"is_vip\": True\n    },\n    \"绿色立体\": {\n        \"resource_id\": \"7492716248091004222\",\n        \"effect_id\": \"7492716248091004222\",\n        \"name\": \"绿色立体\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7471905506001669401\",\n        \"effect_id\": \"7471905506001669401\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"春日综艺感渐变纹理花字\": {\n        \"resource_id\": \"7479683834464898329\",\n        \"effect_id\": \"7479683834464898329\",\n        \"name\": \"春日综艺感渐变纹理花字\",\n        \"is_vip\": True\n    },\n    \"绿紫黄紫立体字\": {\n        \"resource_id\": \"7478608447794187582\",\n        \"effect_id\": \"7478608447794187582\",\n        \"name\": \"绿紫黄紫立体字\",\n        \"is_vip\": True\n    },\n    \"膨胀感字\": {\n        \"resource_id\": \"7480097920361073945\",\n        \"effect_id\": \"7480097920361073945\",\n        \"name\": \"膨胀感字\",\n        \"is_vip\": True\n    },\n    \"立体综艺花字\": {\n        \"resource_id\": \"7403676308145802522\",\n        \"effect_id\": \"7403676308145802522\",\n        \"name\": \"立体综艺花字\",\n        \"is_vip\": False\n    },\n    \"白色纹理描边花字\": {\n        \"resource_id\": \"7405202500493610275\",\n        \"effect_id\": \"7405202500493610275\",\n        \"name\": \"白色纹理描边花字\",\n        \"is_vip\": False\n    },\n    \"复古淡黄花字\": {\n        \"resource_id\": \"7441152469352090889\",\n        \"effect_id\": \"7441152469352090889\",\n        \"name\": \"复古淡黄花字\",\n        \"is_vip\": False\n    },\n    \"白色发光字\": {\n        \"resource_id\": \"7405564299122429219\",\n        \"effect_id\": \"7405564299122429219\",\n        \"name\": \"白色发光字\",\n        \"is_vip\": False\n    },\n    \"黄色渐变立体白描边花字\": {\n        \"resource_id\": \"7403679510702378278\",\n        \"effect_id\": \"7403679510702378278\",\n        \"name\": \"黄色渐变立体白描边花字\",\n        \"is_vip\": False\n    },\n    \"白字红边立体字\": {\n        \"resource_id\": \"7403960732490157364\",\n        \"effect_id\": \"7403960732490157364\",\n        \"name\": \"白字红边立体字\",\n        \"is_vip\": False\n    },\n    \"蓝色立体字\": {\n        \"resource_id\": \"7405107629137186082\",\n        \"effect_id\": \"7405107629137186082\",\n        \"name\": \"蓝色立体字\",\n        \"is_vip\": False\n    },\n    \"美拉德立体文字\": {\n        \"resource_id\": \"7410649194110733602\",\n        \"effect_id\": \"7410649194110733602\",\n        \"name\": \"美拉德立体文字\",\n        \"is_vip\": False\n    },\n    \"绿色立体通用花字\": {\n        \"resource_id\": \"7404477237837270299\",\n        \"effect_id\": \"7404477237837270299\",\n        \"name\": \"绿色立体通用花字\",\n        \"is_vip\": False\n    },\n    \"绿色镂空透明文字\": {\n        \"resource_id\": \"7405105991651544360\",\n        \"effect_id\": \"7405105991651544360\",\n        \"name\": \"绿色镂空透明文字\",\n        \"is_vip\": False\n    },\n    \"绿色描边投影字\": {\n        \"resource_id\": \"7405410790867586344\",\n        \"effect_id\": \"7405410790867586344\",\n        \"name\": \"绿色描边投影字\",\n        \"is_vip\": False\n    },\n    \"绿色透明纹理花字\": {\n        \"resource_id\": \"7405203773066415360\",\n        \"effect_id\": \"7405203773066415360\",\n        \"name\": \"绿色透明纹理花字\",\n        \"is_vip\": False\n    },\n    \"综艺火焰\": {\n        \"resource_id\": \"7543157780769803582\",\n        \"effect_id\": \"7543157780769803582\",\n        \"name\": \"综艺火焰\",\n        \"is_vip\": True\n    },\n    \"系统故障字\": {\n        \"resource_id\": \"7347967906669415716\",\n        \"effect_id\": \"7347967906669415716\",\n        \"name\": \"系统故障字\",\n        \"is_vip\": True\n    },\n    \"蓝色黄色渐变立体描边花字\": {\n        \"resource_id\": \"7532041202787487038\",\n        \"effect_id\": \"7532041202787487038\",\n        \"name\": \"蓝色黄色渐变立体描边花字\",\n        \"is_vip\": True\n    },\n    \"综艺 黄色\": {\n        \"resource_id\": \"7127670164996328740\",\n        \"effect_id\": \"7127670164996328740\",\n        \"name\": \"综艺 黄色\",\n        \"is_vip\": True\n    },\n    \"黑白黄色花字\": {\n        \"resource_id\": \"7260340249581128996\",\n        \"effect_id\": \"7260340249581128996\",\n        \"name\": \"黑白黄色花字\",\n        \"is_vip\": True\n    },\n    \"红色火焰燃烧花字\": {\n        \"resource_id\": \"7405896759987227931\",\n        \"effect_id\": \"7405896759987227931\",\n        \"name\": \"红色火焰燃烧花字\",\n        \"is_vip\": True\n    },\n    \"复古紫光蓝色渐变立体花字\": {\n        \"resource_id\": \"7160595602236116232\",\n        \"effect_id\": \"7160595602236116232\",\n        \"name\": \"复古紫光蓝色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"综艺风蓝色描边立体花字\": {\n        \"resource_id\": \"7494932494253608216\",\n        \"effect_id\": \"7494932494253608216\",\n        \"name\": \"综艺风蓝色描边立体花字\",\n        \"is_vip\": True\n    },\n    \"喷溅红立体\": {\n        \"resource_id\": \"7411046111760125211\",\n        \"effect_id\": \"7411046111760125211\",\n        \"name\": \"喷溅红立体\",\n        \"is_vip\": True\n    },\n    \"红黄渐变纹理立体花字\": {\n        \"resource_id\": \"7313160248175398154\",\n        \"effect_id\": \"7313160248175398154\",\n        \"name\": \"红黄渐变纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"白字蓝框综艺花字\": {\n        \"resource_id\": \"7403899942944705819\",\n        \"effect_id\": \"7403899942944705819\",\n        \"name\": \"白字蓝框综艺花字\",\n        \"is_vip\": True\n    },\n    \"美食-金色渐变\": {\n        \"resource_id\": \"7205144150390443301\",\n        \"effect_id\": \"7205144150390443301\",\n        \"name\": \"美食-金色渐变\",\n        \"is_vip\": True\n    },\n    \"红色火焰字\": {\n        \"resource_id\": \"7406328633205312820\",\n        \"effect_id\": \"7406328633205312820\",\n        \"name\": \"红色火焰字\",\n        \"is_vip\": True\n    },\n    \"镂空发光字\": {\n        \"resource_id\": \"7404690754590821632\",\n        \"effect_id\": \"7404690754590821632\",\n        \"name\": \"镂空发光字\",\n        \"is_vip\": True\n    },\n    \"蓝色纹理花字\": {\n        \"resource_id\": \"7405902936175381787\",\n        \"effect_id\": \"7405902936175381787\",\n        \"name\": \"蓝色纹理花字\",\n        \"is_vip\": True\n    },\n    \"白色质感纹理立体花字\": {\n        \"resource_id\": \"7310113812168871177\",\n        \"effect_id\": \"7310113812168871177\",\n        \"name\": \"白色质感纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"黄色花字\": {\n        \"resource_id\": \"7430781079058976026\",\n        \"effect_id\": \"7430781079058976026\",\n        \"name\": \"黄色花字\",\n        \"is_vip\": True\n    },\n    \"综艺立体\": {\n        \"resource_id\": \"7448962185159609625\",\n        \"effect_id\": \"7448962185159609625\",\n        \"name\": \"综艺立体\",\n        \"is_vip\": True\n    },\n    \"五一复古立体\": {\n        \"resource_id\": \"7494493305716378905\",\n        \"effect_id\": \"7494493305716378905\",\n        \"name\": \"五一复古立体\",\n        \"is_vip\": True\n    },\n    \"好物美妆-双层投影\": {\n        \"resource_id\": \"7264501278175202572\",\n        \"effect_id\": \"7264501278175202572\",\n        \"name\": \"好物美妆-双层投影\",\n        \"is_vip\": True\n    },\n    \"白字绿底花字\": {\n        \"resource_id\": \"7350578203905232166\",\n        \"effect_id\": \"7350578203905232166\",\n        \"name\": \"白字绿底花字\",\n        \"is_vip\": True\n    },\n    \"渐变错位花字\": {\n        \"resource_id\": \"7406249723423640871\",\n        \"effect_id\": \"7406249723423640871\",\n        \"name\": \"渐变错位花字\",\n        \"is_vip\": True\n    },\n    \"彩色\": {\n        \"resource_id\": \"7474546033763224894\",\n        \"effect_id\": \"7474546033763224894\",\n        \"name\": \"彩色\",\n        \"is_vip\": True\n    },\n    \"像素格背景字\": {\n        \"resource_id\": \"7406866881144966409\",\n        \"effect_id\": \"7406866881144966409\",\n        \"name\": \"像素格背景字\",\n        \"is_vip\": True\n    },\n    \"橙黄渐变花字\": {\n        \"resource_id\": \"7404777689518738728\",\n        \"effect_id\": \"7404777689518738728\",\n        \"name\": \"橙黄渐变花字\",\n        \"is_vip\": True\n    },\n    \"彩色手绘线条花字\": {\n        \"resource_id\": \"7342020000812731658\",\n        \"effect_id\": \"7342020000812731658\",\n        \"name\": \"彩色手绘线条花字\",\n        \"is_vip\": True\n    },\n    \"立体麻布花纹字体\": {\n        \"resource_id\": \"7262979013637967119\",\n        \"effect_id\": \"7262979013637967119\",\n        \"name\": \"立体麻布花纹字体\",\n        \"is_vip\": True\n    },\n    \"红色渐变波点底纹立体花字\": {\n        \"resource_id\": \"7406013385969569062\",\n        \"effect_id\": \"7406013385969569062\",\n        \"name\": \"红色渐变波点底纹立体花字\",\n        \"is_vip\": True\n    },\n    \"综艺风蓝色渐变纹理立体花字\": {\n        \"resource_id\": \"7478945314318241086\",\n        \"effect_id\": \"7478945314318241086\",\n        \"name\": \"综艺风蓝色渐变纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"高饱和彩虹字\": {\n        \"resource_id\": \"7404293089377930536\",\n        \"effect_id\": \"7404293089377930536\",\n        \"name\": \"高饱和彩虹字\",\n        \"is_vip\": True\n    },\n    \"3D蓝红色立体综艺花字\": {\n        \"resource_id\": \"7404132140365008179\",\n        \"effect_id\": \"7404132140365008179\",\n        \"name\": \"3D蓝红色立体综艺花字\",\n        \"is_vip\": True\n    },\n    \"音乐节-杂点黄字\": {\n        \"resource_id\": \"7272729157895769355\",\n        \"effect_id\": \"7272729157895769355\",\n        \"name\": \"音乐节-杂点黄字\",\n        \"is_vip\": True\n    },\n    \"拼贴位移字\": {\n        \"resource_id\": \"7343806780583038247\",\n        \"effect_id\": \"7343806780583038247\",\n        \"name\": \"拼贴位移字\",\n        \"is_vip\": True\n    },\n    \"彩色立体底框花字\": {\n        \"resource_id\": \"7347548073897364746\",\n        \"effect_id\": \"7347548073897364746\",\n        \"name\": \"彩色立体底框花字\",\n        \"is_vip\": True\n    },\n    \"综艺风蓝色立体描边花字\": {\n        \"resource_id\": \"7495656020006669592\",\n        \"effect_id\": \"7495656020006669592\",\n        \"name\": \"综艺风蓝色立体描边花字\",\n        \"is_vip\": True\n    },\n    \"黑字底红光\": {\n        \"resource_id\": \"7230694221513035020\",\n        \"effect_id\": \"7230694221513035020\",\n        \"name\": \"黑字底红光\",\n        \"is_vip\": True\n    },\n    \"海浪卡通立体字\": {\n        \"resource_id\": \"7405947244395924770\",\n        \"effect_id\": \"7405947244395924770\",\n        \"name\": \"海浪卡通立体字\",\n        \"is_vip\": True\n    },\n    \"浪花紫\": {\n        \"resource_id\": \"7261598257762045219\",\n        \"effect_id\": \"7261598257762045219\",\n        \"name\": \"浪花紫\",\n        \"is_vip\": True\n    },\n    \"裂纹立体文字\": {\n        \"resource_id\": \"7405953030996184335\",\n        \"effect_id\": \"7405953030996184335\",\n        \"name\": \"裂纹立体文字\",\n        \"is_vip\": True\n    },\n    \"漫画层叠花字\": {\n        \"resource_id\": \"7406307881865301258\",\n        \"effect_id\": \"7406307881865301258\",\n        \"name\": \"漫画层叠花字\",\n        \"is_vip\": True\n    },\n    \"节点营销直播主题立体字蓝色\": {\n        \"resource_id\": \"7403686755486010634\",\n        \"effect_id\": \"7403686755486010634\",\n        \"name\": \"节点营销直播主题立体字蓝色\",\n        \"is_vip\": True\n    },\n    \"黑色立体投影紫色发光镭射纹理花字  艺术字体\": {\n        \"resource_id\": \"7251715329162841347\",\n        \"effect_id\": \"7251715329162841347\",\n        \"name\": \"黑色立体投影紫色发光镭射纹理花字  艺术字体\",\n        \"is_vip\": True\n    },\n    \"复古白蓝色立体花字\": {\n        \"resource_id\": \"7405563025169632562\",\n        \"effect_id\": \"7405563025169632562\",\n        \"name\": \"复古白蓝色立体花字\",\n        \"is_vip\": True\n    },\n    \"爆款热卖\": {\n        \"resource_id\": \"7430816571443940659\",\n        \"effect_id\": \"7430816571443940659\",\n        \"name\": \"爆款热卖\",\n        \"is_vip\": True\n    },\n    \"蓝紫渐变多重投影字\": {\n        \"resource_id\": \"7403937403397885184\",\n        \"effect_id\": \"7403937403397885184\",\n        \"name\": \"蓝紫渐变多重投影字\",\n        \"is_vip\": True\n    },\n    \"综艺白色立体描边纹理花字\": {\n        \"resource_id\": \"7404868077101255988\",\n        \"effect_id\": \"7404868077101255988\",\n        \"name\": \"综艺白色立体描边纹理花字\",\n        \"is_vip\": True\n    },\n    \"红金渐变国风立体花字\": {\n        \"resource_id\": \"7547984081930161470\",\n        \"effect_id\": \"7547984081930161470\",\n        \"name\": \"红金渐变国风立体花字\",\n        \"is_vip\": True\n    },\n    \"立体字粉色背景\": {\n        \"resource_id\": \"7409964157296020751\",\n        \"effect_id\": \"7409964157296020751\",\n        \"name\": \"立体字粉色背景\",\n        \"is_vip\": True\n    },\n    \"金色渐变红底立体花字\": {\n        \"resource_id\": \"7330165240576970021\",\n        \"effect_id\": \"7330165240576970021\",\n        \"name\": \"金色渐变红底立体花字\",\n        \"is_vip\": True\n    },\n    \"热销字体\": {\n        \"resource_id\": \"7431487397017226507\",\n        \"effect_id\": \"7431487397017226507\",\n        \"name\": \"热销字体\",\n        \"is_vip\": True\n    },\n    \"位移字\": {\n        \"resource_id\": \"7343541738537061651\",\n        \"effect_id\": \"7343541738537061651\",\n        \"name\": \"位移字\",\n        \"is_vip\": True\n    },\n    \"美食-立体描边\": {\n        \"resource_id\": \"7205148909730024762\",\n        \"effect_id\": \"7205148909730024762\",\n        \"name\": \"美食-立体描边\",\n        \"is_vip\": True\n    },\n    \"格子背景双色字\": {\n        \"resource_id\": \"7404037981952068879\",\n        \"effect_id\": \"7404037981952068879\",\n        \"name\": \"格子背景双色字\",\n        \"is_vip\": True\n    },\n    \"落日鸡尾酒\": {\n        \"resource_id\": \"7174051263578000678\",\n        \"effect_id\": \"7174051263578000678\",\n        \"name\": \"落日鸡尾酒\",\n        \"is_vip\": True\n    },\n    \"春节-半透明\": {\n        \"resource_id\": \"7187622568717749565\",\n        \"effect_id\": \"7187622568717749565\",\n        \"name\": \"春节-半透明\",\n        \"is_vip\": True\n    },\n    \"黑色综艺花字\": {\n        \"resource_id\": \"7241429233287925044\",\n        \"effect_id\": \"7241429233287925044\",\n        \"name\": \"黑色综艺花字\",\n        \"is_vip\": True\n    },\n    \"白/黄方块图案质感花字\": {\n        \"resource_id\": \"7405060175322795276\",\n        \"effect_id\": \"7405060175322795276\",\n        \"name\": \"白/黄方块图案质感花字\",\n        \"is_vip\": True\n    },\n    \"时尚黑蓝粉\": {\n        \"resource_id\": \"7284906593399950647\",\n        \"effect_id\": \"7284906593399950647\",\n        \"name\": \"时尚黑蓝粉\",\n        \"is_vip\": True\n    },\n    \"3D蓝色渐变综艺花字\": {\n        \"resource_id\": \"7403911656587234597\",\n        \"effect_id\": \"7403911656587234597\",\n        \"name\": \"3D蓝色渐变综艺花字\",\n        \"is_vip\": True\n    },\n    \"白色蓝色描边红色荧光花字\": {\n        \"resource_id\": \"7241398402125253903\",\n        \"effect_id\": \"7241398402125253903\",\n        \"name\": \"白色蓝色描边红色荧光花字\",\n        \"is_vip\": True\n    },\n    \"白色仿3D立体花字\": {\n        \"resource_id\": \"7371129776494365990\",\n        \"effect_id\": \"7371129776494365990\",\n        \"name\": \"白色仿3D立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝色立体描边花字\": {\n        \"resource_id\": \"7406357450166635776\",\n        \"effect_id\": \"7406357450166635776\",\n        \"name\": \"蓝色立体描边花字\",\n        \"is_vip\": True\n    },\n    \"破碎裂开文字\": {\n        \"resource_id\": \"7404701167156088116\",\n        \"effect_id\": \"7404701167156088116\",\n        \"name\": \"破碎裂开文字\",\n        \"is_vip\": True\n    },\n    \"黄边黑字立体花字\": {\n        \"resource_id\": \"7270881305070423356\",\n        \"effect_id\": \"7270881305070423356\",\n        \"name\": \"黄边黑字立体花字\",\n        \"is_vip\": True\n    },\n    \"立体星星花字\": {\n        \"resource_id\": \"7405886722011172150\",\n        \"effect_id\": \"7405886722011172150\",\n        \"name\": \"立体星星花字\",\n        \"is_vip\": True\n    },\n    \"多色花字\": {\n        \"resource_id\": \"7405917295421263158\",\n        \"effect_id\": \"7405917295421263158\",\n        \"name\": \"多色花字\",\n        \"is_vip\": True\n    },\n    \"立体方块花字\": {\n        \"resource_id\": \"7481488244421741848\",\n        \"effect_id\": \"7481488244421741848\",\n        \"name\": \"立体方块花字\",\n        \"is_vip\": True\n    },\n    \"水墨纹花字\": {\n        \"resource_id\": \"7252151198805986572\",\n        \"effect_id\": \"7252151198805986572\",\n        \"name\": \"水墨纹花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7529442177953352985\",\n        \"effect_id\": \"7529442177953352985\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"白字蓝底花字\": {\n        \"resource_id\": \"7368858909295136010\",\n        \"effect_id\": \"7368858909295136010\",\n        \"name\": \"白字蓝底花字\",\n        \"is_vip\": True\n    },\n    \"橙色纹理立体发光花字\": {\n        \"resource_id\": \"7430724518248729919\",\n        \"effect_id\": \"7430724518248729919\",\n        \"name\": \"橙色纹理立体发光花字\",\n        \"is_vip\": True\n    },\n    \"红黄绿复古花字\": {\n        \"resource_id\": \"7407014154613116210\",\n        \"effect_id\": \"7407014154613116210\",\n        \"name\": \"红黄绿复古花字\",\n        \"is_vip\": True\n    },\n    \"橙黄色渐变立体描边花字\": {\n        \"resource_id\": \"7404037530980453647\",\n        \"effect_id\": \"7404037530980453647\",\n        \"name\": \"橙黄色渐变立体描边花字\",\n        \"is_vip\": True\n    },\n    \"潮酷薄膜纹理字\": {\n        \"resource_id\": \"7404380953893735714\",\n        \"effect_id\": \"7404380953893735714\",\n        \"name\": \"潮酷薄膜纹理字\",\n        \"is_vip\": True\n    },\n    \"粉色贝壳光泽花字\": {\n        \"resource_id\": \"7265614510084443444\",\n        \"effect_id\": \"7265614510084443444\",\n        \"name\": \"粉色贝壳光泽花字\",\n        \"is_vip\": True\n    },\n    \"四色蜡笔花字\": {\n        \"resource_id\": \"7348679900477279507\",\n        \"effect_id\": \"7348679900477279507\",\n        \"name\": \"四色蜡笔花字\",\n        \"is_vip\": True\n    },\n    \"蓝色立体描边发光花字\": {\n        \"resource_id\": \"7404828145255288075\",\n        \"effect_id\": \"7404828145255288075\",\n        \"name\": \"蓝色立体描边发光花字\",\n        \"is_vip\": True\n    },\n    \"限时抢购\": {\n        \"resource_id\": \"7510183639066627352\",\n        \"effect_id\": \"7510183639066627352\",\n        \"name\": \"限时抢购\",\n        \"is_vip\": True\n    },\n    \"游戏综艺风蓝色波点渐变花字\": {\n        \"resource_id\": \"7404883759012597030\",\n        \"effect_id\": \"7404883759012597030\",\n        \"name\": \"游戏综艺风蓝色波点渐变花字\",\n        \"is_vip\": True\n    },\n    \"紫色梦幻   白字紫底红醒目花字\": {\n        \"resource_id\": \"7334687695660272947\",\n        \"effect_id\": \"7334687695660272947\",\n        \"name\": \"紫色梦幻   白字紫底红醒目花字\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变综艺\": {\n        \"resource_id\": \"7435551949266701580\",\n        \"effect_id\": \"7435551949266701580\",\n        \"name\": \"蓝色渐变综艺\",\n        \"is_vip\": True\n    },\n    \"黑色粉色阴影花字\": {\n        \"resource_id\": \"7289732660077874491\",\n        \"effect_id\": \"7289732660077874491\",\n        \"name\": \"黑色粉色阴影花字\",\n        \"is_vip\": True\n    },\n    \"黑体蓝紫边发光花字\": {\n        \"resource_id\": \"7259399609452088637\",\n        \"effect_id\": \"7259399609452088637\",\n        \"name\": \"黑体蓝紫边发光花字\",\n        \"is_vip\": True\n    },\n    \"粉笔涂鸦花字（教师节）\": {\n        \"resource_id\": \"7405546666498985227\",\n        \"effect_id\": \"7405546666498985227\",\n        \"name\": \"粉笔涂鸦花字（教师节）\",\n        \"is_vip\": True\n    },\n    \"可爱花字\": {\n        \"resource_id\": \"7430667612146666764\",\n        \"effect_id\": \"7430667612146666764\",\n        \"name\": \"可爱花字\",\n        \"is_vip\": True\n    },\n    \"黑粉甜酷拼贴文字\": {\n        \"resource_id\": \"7431814893415812362\",\n        \"effect_id\": \"7431814893415812362\",\n        \"name\": \"黑粉甜酷拼贴文字\",\n        \"is_vip\": True\n    },\n    \"彩色立体\": {\n        \"resource_id\": \"7506818824885390616\",\n        \"effect_id\": \"7506818824885390616\",\n        \"name\": \"彩色立体\",\n        \"is_vip\": True\n    },\n    \"浅棕色描边花字\": {\n        \"resource_id\": \"7328771445960592640\",\n        \"effect_id\": \"7328771445960592640\",\n        \"name\": \"浅棕色描边花字\",\n        \"is_vip\": True\n    },\n    \"蓝红蜡笔质感纹理花字\": {\n        \"resource_id\": \"7543482227871599896\",\n        \"effect_id\": \"7543482227871599896\",\n        \"name\": \"蓝红蜡笔质感纹理花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变\": {\n        \"resource_id\": \"7410369831503006988\",\n        \"effect_id\": \"7410369831503006988\",\n        \"name\": \"黄色渐变\",\n        \"is_vip\": True\n    },\n    \"综艺风方块背景立体花字\": {\n        \"resource_id\": \"7404072480870026534\",\n        \"effect_id\": \"7404072480870026534\",\n        \"name\": \"综艺风方块背景立体花字\",\n        \"is_vip\": True\n    },\n    \"彩色花字\": {\n        \"resource_id\": \"7252116303329217824\",\n        \"effect_id\": \"7252116303329217824\",\n        \"name\": \"彩色花字\",\n        \"is_vip\": True\n    },\n    \"综艺感蓝色立体描边花字\": {\n        \"resource_id\": \"7482027387266469145\",\n        \"effect_id\": \"7482027387266469145\",\n        \"name\": \"综艺感蓝色立体描边花字\",\n        \"is_vip\": True\n    },\n    \"彩色透明花字\": {\n        \"resource_id\": \"7406321401969364264\",\n        \"effect_id\": \"7406321401969364264\",\n        \"name\": \"彩色透明花字\",\n        \"is_vip\": True\n    },\n    \"橙色蓝色花字\": {\n        \"resource_id\": \"7369415539795529012\",\n        \"effect_id\": \"7369415539795529012\",\n        \"name\": \"橙色蓝色花字\",\n        \"is_vip\": True\n    },\n    \"黑字黄绿拼贴花字\": {\n        \"resource_id\": \"7406010573961317670\",\n        \"effect_id\": \"7406010573961317670\",\n        \"name\": \"黑字黄绿拼贴花字\",\n        \"is_vip\": True\n    },\n    \"蓝橙白立体花字\": {\n        \"resource_id\": \"7504864758944927001\",\n        \"effect_id\": \"7504864758944927001\",\n        \"name\": \"蓝橙白立体花字\",\n        \"is_vip\": True\n    },\n    \"黄蓝撞色描边字\": {\n        \"resource_id\": \"7435272797611429172\",\n        \"effect_id\": \"7435272797611429172\",\n        \"name\": \"黄蓝撞色描边字\",\n        \"is_vip\": True\n    },\n    \"玫粉黑花字\": {\n        \"resource_id\": \"7407015583444782375\",\n        \"effect_id\": \"7407015583444782375\",\n        \"name\": \"玫粉黑花字\",\n        \"is_vip\": True\n    },\n    \"芭比粉背景白字\": {\n        \"resource_id\": \"7405183112906378522\",\n        \"effect_id\": \"7405183112906378522\",\n        \"name\": \"芭比粉背景白字\",\n        \"is_vip\": True\n    },\n    \"万圣节多色花字\": {\n        \"resource_id\": \"7407047445240139071\",\n        \"effect_id\": \"7407047445240139071\",\n        \"name\": \"万圣节多色花字\",\n        \"is_vip\": True\n    },\n    \"复古风花字\": {\n        \"resource_id\": \"7406318872862674185\",\n        \"effect_id\": \"7406318872862674185\",\n        \"name\": \"复古风花字\",\n        \"is_vip\": True\n    },\n    \"深红白边黄影立体花字\": {\n        \"resource_id\": \"7231502419723603239\",\n        \"effect_id\": \"7231502419723603239\",\n        \"name\": \"深红白边黄影立体花字\",\n        \"is_vip\": True\n    },\n    \"APT花字\": {\n        \"resource_id\": \"7431429796434890021\",\n        \"effect_id\": \"7431429796434890021\",\n        \"name\": \"APT花字\",\n        \"is_vip\": True\n    },\n    \"粉底黄边黑色立体花字\": {\n        \"resource_id\": \"7270171712136776997\",\n        \"effect_id\": \"7270171712136776997\",\n        \"name\": \"粉底黄边黑色立体花字\",\n        \"is_vip\": True\n    },\n    \"未来科技感立体厚重标题花字\": {\n        \"resource_id\": \"7405789476561095986\",\n        \"effect_id\": \"7405789476561095986\",\n        \"name\": \"未来科技感立体厚重标题花字\",\n        \"is_vip\": True\n    },\n    \"白字带描边花字\": {\n        \"resource_id\": \"7405944078992559411\",\n        \"effect_id\": \"7405944078992559411\",\n        \"name\": \"白字带描边花字\",\n        \"is_vip\": True\n    },\n    \"美妆方底\": {\n        \"resource_id\": \"7411583332707863835\",\n        \"effect_id\": \"7411583332707863835\",\n        \"name\": \"美妆方底\",\n        \"is_vip\": True\n    },\n    \"酒红风格   黄字酒红底色花字\": {\n        \"resource_id\": \"7337839774079798566\",\n        \"effect_id\": \"7337839774079798566\",\n        \"name\": \"酒红风格   黄字酒红底色花字\",\n        \"is_vip\": True\n    },\n    \"多色花字\": {\n        \"resource_id\": \"7406589254157061439\",\n        \"effect_id\": \"7406589254157061439\",\n        \"name\": \"多色花字\",\n        \"is_vip\": True\n    },\n    \"黄绿撕纸拼贴质感花字\": {\n        \"resource_id\": \"7405065396648283455\",\n        \"effect_id\": \"7405065396648283455\",\n        \"name\": \"黄绿撕纸拼贴质感花字\",\n        \"is_vip\": True\n    },\n    \"橙黄色立体霓虹花字\": {\n        \"resource_id\": \"7405186414284999971\",\n        \"effect_id\": \"7405186414284999971\",\n        \"name\": \"橙黄色立体霓虹花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变粉色花朵底纹立体花字\": {\n        \"resource_id\": \"7544660134732057881\",\n        \"effect_id\": \"7544660134732057881\",\n        \"name\": \"黄色渐变粉色花朵底纹立体花字\",\n        \"is_vip\": True\n    },\n    \"青团底纹花字\": {\n        \"resource_id\": \"7348639844198878515\",\n        \"effect_id\": \"7348639844198878515\",\n        \"name\": \"青团底纹花字\",\n        \"is_vip\": True\n    },\n    \"黄蓝渐变立体字\": {\n        \"resource_id\": \"7382058294157774107\",\n        \"effect_id\": \"7382058294157774107\",\n        \"name\": \"黄蓝渐变立体字\",\n        \"is_vip\": True\n    },\n    \"紫色描边发光小字体\": {\n        \"resource_id\": \"7252346023656394042\",\n        \"effect_id\": \"7252346023656394042\",\n        \"name\": \"紫色描边发光小字体\",\n        \"is_vip\": True\n    },\n    \"粉蓝色渐变黑边立体花字\": {\n        \"resource_id\": \"7404290790391860530\",\n        \"effect_id\": \"7404290790391860530\",\n        \"name\": \"粉蓝色渐变黑边立体花字\",\n        \"is_vip\": True\n    },\n    \"红色渐变黄绿描边\": {\n        \"resource_id\": \"7406979682911931657\",\n        \"effect_id\": \"7406979682911931657\",\n        \"name\": \"红色渐变黄绿描边\",\n        \"is_vip\": True\n    },\n    \"美妆拼贴\": {\n        \"resource_id\": \"7411563961381817610\",\n        \"effect_id\": \"7411563961381817610\",\n        \"name\": \"美妆拼贴\",\n        \"is_vip\": True\n    },\n    \"游戏综艺风黄红紫渐变花字\": {\n        \"resource_id\": \"7404883418774818086\",\n        \"effect_id\": \"7404883418774818086\",\n        \"name\": \"游戏综艺风黄红紫渐变花字\",\n        \"is_vip\": True\n    },\n    \"彩色花字\": {\n        \"resource_id\": \"7430759634757061926\",\n        \"effect_id\": \"7430759634757061926\",\n        \"name\": \"彩色花字\",\n        \"is_vip\": True\n    },\n    \"蓝橙波点纹理玻璃质感立体花字\": {\n        \"resource_id\": \"7543299507744967960\",\n        \"effect_id\": \"7543299507744967960\",\n        \"name\": \"蓝橙波点纹理玻璃质感立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝色纹理立体花字\": {\n        \"resource_id\": \"7406011366865161481\",\n        \"effect_id\": \"7406011366865161481\",\n        \"name\": \"蓝色纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"放射背景字\": {\n        \"resource_id\": \"7404009350399937792\",\n        \"effect_id\": \"7404009350399937792\",\n        \"name\": \"放射背景字\",\n        \"is_vip\": True\n    },\n    \"白字黄绿拼贴花字\": {\n        \"resource_id\": \"7406011150829194546\",\n        \"effect_id\": \"7406011150829194546\",\n        \"name\": \"白字黄绿拼贴花字\",\n        \"is_vip\": True\n    },\n    \"夏日蓝描边立体\": {\n        \"resource_id\": \"7548102481977593113\",\n        \"effect_id\": \"7548102481977593113\",\n        \"name\": \"夏日蓝描边立体\",\n        \"is_vip\": True\n    },\n    \"白色国风水墨花字\": {\n        \"resource_id\": \"7405537186436648201\",\n        \"effect_id\": \"7405537186436648201\",\n        \"name\": \"白色国风水墨花字\",\n        \"is_vip\": True\n    },\n    \"金箔纹理阴影花字\": {\n        \"resource_id\": \"7405530102324415807\",\n        \"effect_id\": \"7405530102324415807\",\n        \"name\": \"金箔纹理阴影花字\",\n        \"is_vip\": True\n    },\n    \"书法墨迹白色花字\": {\n        \"resource_id\": \"7405519026367122727\",\n        \"effect_id\": \"7405519026367122727\",\n        \"name\": \"书法墨迹白色花字\",\n        \"is_vip\": True\n    },\n    \"泼墨书法纹理花字\": {\n        \"resource_id\": \"7405512855434382611\",\n        \"effect_id\": \"7405512855434382611\",\n        \"name\": \"泼墨书法纹理花字\",\n        \"is_vip\": True\n    },\n    \"红色斑驳\": {\n        \"resource_id\": \"7475566213477977368\",\n        \"effect_id\": \"7475566213477977368\",\n        \"name\": \"红色斑驳\",\n        \"is_vip\": True\n    },\n    \"红色立体\": {\n        \"resource_id\": \"7546579616576720152\",\n        \"effect_id\": \"7546579616576720152\",\n        \"name\": \"红色立体\",\n        \"is_vip\": True\n    },\n    \"金色质感立体花字\": {\n        \"resource_id\": \"7405499580399357210\",\n        \"effect_id\": \"7405499580399357210\",\n        \"name\": \"金色质感立体花字\",\n        \"is_vip\": True\n    },\n    \"国风花字\": {\n        \"resource_id\": \"7406643508242582825\",\n        \"effect_id\": \"7406643508242582825\",\n        \"name\": \"国风花字\",\n        \"is_vip\": True\n    },\n    \"黑白水墨字\": {\n        \"resource_id\": \"7405516433863511348\",\n        \"effect_id\": \"7405516433863511348\",\n        \"name\": \"黑白水墨字\",\n        \"is_vip\": True\n    },\n    \"复古红色立体花字\": {\n        \"resource_id\": \"7435884430620691739\",\n        \"effect_id\": \"7435884430620691739\",\n        \"name\": \"复古红色立体花字\",\n        \"is_vip\": True\n    },\n    \"国风花字\": {\n        \"resource_id\": \"7406646658768882983\",\n        \"effect_id\": \"7406646658768882983\",\n        \"name\": \"国风花字\",\n        \"is_vip\": True\n    },\n    \"水墨风晕染花字\": {\n        \"resource_id\": \"7405497799036407090\",\n        \"effect_id\": \"7405497799036407090\",\n        \"name\": \"水墨风晕染花字\",\n        \"is_vip\": True\n    },\n    \"白金花字\": {\n        \"resource_id\": \"7405510219633036555\",\n        \"effect_id\": \"7405510219633036555\",\n        \"name\": \"白金花字\",\n        \"is_vip\": True\n    },\n    \"古风质感花字\": {\n        \"resource_id\": \"7483351934074817817\",\n        \"effect_id\": \"7483351934074817817\",\n        \"name\": \"古风质感花字\",\n        \"is_vip\": True\n    },\n    \"暗黑系红色火焰纹理花字\": {\n        \"resource_id\": \"7405504415408409865\",\n        \"effect_id\": \"7405504415408409865\",\n        \"name\": \"暗黑系红色火焰纹理花字\",\n        \"is_vip\": True\n    },\n    \"红金国风花字\": {\n        \"resource_id\": \"7405500731253411108\",\n        \"effect_id\": \"7405500731253411108\",\n        \"name\": \"红金国风花字\",\n        \"is_vip\": True\n    },\n    \"点墨金银花字\": {\n        \"resource_id\": \"7405517111231073575\",\n        \"effect_id\": \"7405517111231073575\",\n        \"name\": \"点墨金银花字\",\n        \"is_vip\": True\n    },\n    \"春节新年福字背景花字\": {\n        \"resource_id\": \"7404078955344448777\",\n        \"effect_id\": \"7404078955344448777\",\n        \"name\": \"春节新年福字背景花字\",\n        \"is_vip\": True\n    },\n    \"银色花字\": {\n        \"resource_id\": \"7405512551879970067\",\n        \"effect_id\": \"7405512551879970067\",\n        \"name\": \"银色花字\",\n        \"is_vip\": True\n    },\n    \"红色暗黑花字\": {\n        \"resource_id\": \"7405501851887586611\",\n        \"effect_id\": \"7405501851887586611\",\n        \"name\": \"红色暗黑花字\",\n        \"is_vip\": True\n    },\n    \"国风花字\": {\n        \"resource_id\": \"7406643758231571766\",\n        \"effect_id\": \"7406643758231571766\",\n        \"name\": \"国风花字\",\n        \"is_vip\": True\n    },\n    \"黑红渐变立体描边花字\": {\n        \"resource_id\": \"7405506413524569363\",\n        \"effect_id\": \"7405506413524569363\",\n        \"name\": \"黑红渐变立体描边花字\",\n        \"is_vip\": True\n    },\n    \"书法水痕阴影花字\": {\n        \"resource_id\": \"7405527291209469196\",\n        \"effect_id\": \"7405527291209469196\",\n        \"name\": \"书法水痕阴影花字\",\n        \"is_vip\": True\n    },\n    \"水墨背景白色花字\": {\n        \"resource_id\": \"7405534702221790515\",\n        \"effect_id\": \"7405534702221790515\",\n        \"name\": \"水墨背景白色花字\",\n        \"is_vip\": True\n    },\n    \"国风金红花字\": {\n        \"resource_id\": \"7405499186109533494\",\n        \"effect_id\": \"7405499186109533494\",\n        \"name\": \"国风金红花字\",\n        \"is_vip\": True\n    },\n    \"红金国风花字\": {\n        \"resource_id\": \"7507132514088062233\",\n        \"effect_id\": \"7507132514088062233\",\n        \"name\": \"红金国风花字\",\n        \"is_vip\": True\n    },\n    \"黑白水墨花字\": {\n        \"resource_id\": \"7405498270568418611\",\n        \"effect_id\": \"7405498270568418611\",\n        \"name\": \"黑白水墨花字\",\n        \"is_vip\": True\n    },\n    \"暗黑红色立体花字\": {\n        \"resource_id\": \"7405503477444644106\",\n        \"effect_id\": \"7405503477444644106\",\n        \"name\": \"暗黑红色立体花字\",\n        \"is_vip\": True\n    },\n    \"暗黑墨迹字\": {\n        \"resource_id\": \"7405513478645091636\",\n        \"effect_id\": \"7405513478645091636\",\n        \"name\": \"暗黑墨迹字\",\n        \"is_vip\": True\n    },\n    \"青绿色水墨风古典边框花字\": {\n        \"resource_id\": \"7405879747340700937\",\n        \"effect_id\": \"7405879747340700937\",\n        \"name\": \"青绿色水墨风古典边框花字\",\n        \"is_vip\": True\n    },\n    \"水墨书法纹理花字\": {\n        \"resource_id\": \"7405514792724745484\",\n        \"effect_id\": \"7405514792724745484\",\n        \"name\": \"水墨书法纹理花字\",\n        \"is_vip\": True\n    },\n    \"黑灰色质感立体花字\": {\n        \"resource_id\": \"7405500890620120358\",\n        \"effect_id\": \"7405500890620120358\",\n        \"name\": \"黑灰色质感立体花字\",\n        \"is_vip\": True\n    },\n    \"暗黑火焰红边花字\": {\n        \"resource_id\": \"7405494488019275059\",\n        \"effect_id\": \"7405494488019275059\",\n        \"name\": \"暗黑火焰红边花字\",\n        \"is_vip\": True\n    },\n    \"暗红色墨痕书法花字\": {\n        \"resource_id\": \"7405528972135583030\",\n        \"effect_id\": \"7405528972135583030\",\n        \"name\": \"暗红色墨痕书法花字\",\n        \"is_vip\": True\n    },\n    \"银色国风花字\": {\n        \"resource_id\": \"7405504097429867815\",\n        \"effect_id\": \"7405504097429867815\",\n        \"name\": \"银色国风花字\",\n        \"is_vip\": True\n    },\n    \"书法墨环图案花字\": {\n        \"resource_id\": \"7405524745959034124\",\n        \"effect_id\": \"7405524745959034124\",\n        \"name\": \"书法墨环图案花字\",\n        \"is_vip\": False\n    },\n    \"金箔描边书法水墨花字\": {\n        \"resource_id\": \"7405523665145613631\",\n        \"effect_id\": \"7405523665145613631\",\n        \"name\": \"金箔描边书法水墨花字\",\n        \"is_vip\": False\n    },\n    \"综艺金色花字\": {\n        \"resource_id\": \"7127823728267791647\",\n        \"effect_id\": \"7127823728267791647\",\n        \"name\": \"综艺金色花字\",\n        \"is_vip\": True\n    },\n    \"潮酷发光立体花字\": {\n        \"resource_id\": \"7160598356237012261\",\n        \"effect_id\": \"7160598356237012261\",\n        \"name\": \"潮酷发光立体花字\",\n        \"is_vip\": True\n    },\n    \"潮酷金色发光花字\": {\n        \"resource_id\": \"7160595759375666446\",\n        \"effect_id\": \"7160595759375666446\",\n        \"name\": \"潮酷金色发光花字\",\n        \"is_vip\": True\n    },\n    \"光芒万丈\": {\n        \"resource_id\": \"7269602984844102947\",\n        \"effect_id\": \"7269602984844102947\",\n        \"name\": \"光芒万丈\",\n        \"is_vip\": True\n    },\n    \"综艺立体花字\": {\n        \"resource_id\": \"7160596923781598472\",\n        \"effect_id\": \"7160596923781598472\",\n        \"name\": \"综艺立体花字\",\n        \"is_vip\": True\n    },\n    \"美食-渐变小字\": {\n        \"resource_id\": \"7205150731035266341\",\n        \"effect_id\": \"7205150731035266341\",\n        \"name\": \"美食-渐变小字\",\n        \"is_vip\": True\n    },\n    \"金色渐变立体发光花字\": {\n        \"resource_id\": \"7406007163417529638\",\n        \"effect_id\": \"7406007163417529638\",\n        \"name\": \"金色渐变立体发光花字\",\n        \"is_vip\": True\n    },\n    \"粉色花字\": {\n        \"resource_id\": \"7127655008715296031\",\n        \"effect_id\": \"7127655008715296031\",\n        \"name\": \"粉色花字\",\n        \"is_vip\": True\n    },\n    \"粉色发光字\": {\n        \"resource_id\": \"7403924857282432271\",\n        \"effect_id\": \"7403924857282432271\",\n        \"name\": \"粉色发光字\",\n        \"is_vip\": True\n    },\n    \"蓝色发光\": {\n        \"resource_id\": \"7346895765458947366\",\n        \"effect_id\": \"7346895765458947366\",\n        \"name\": \"蓝色发光\",\n        \"is_vip\": True\n    },\n    \"元旦透明燥点花字-2022元旦\": {\n        \"resource_id\": \"7179606734166592825\",\n        \"effect_id\": \"7179606734166592825\",\n        \"name\": \"元旦透明燥点花字-2022元旦\",\n        \"is_vip\": True\n    },\n    \"红色渐变黄色发光花字\": {\n        \"resource_id\": \"7406005354070379802\",\n        \"effect_id\": \"7406005354070379802\",\n        \"name\": \"红色渐变黄色发光花字\",\n        \"is_vip\": True\n    },\n    \"蓝色霓虹灯发光花字\": {\n        \"resource_id\": \"7408957503892884774\",\n        \"effect_id\": \"7408957503892884774\",\n        \"name\": \"蓝色霓虹灯发光花字\",\n        \"is_vip\": True\n    },\n    \"黄色发光花字\": {\n        \"resource_id\": \"7404896582182767908\",\n        \"effect_id\": \"7404896582182767908\",\n        \"name\": \"黄色发光花字\",\n        \"is_vip\": True\n    },\n    \"金色渐变立体发光花字\": {\n        \"resource_id\": \"7459717947620363582\",\n        \"effect_id\": \"7459717947620363582\",\n        \"name\": \"金色渐变立体发光花字\",\n        \"is_vip\": True\n    },\n    \"蓝色发光花字\": {\n        \"resource_id\": \"7404751791503576339\",\n        \"effect_id\": \"7404751791503576339\",\n        \"name\": \"蓝色发光花字\",\n        \"is_vip\": True\n    },\n    \"圣诞红白条\": {\n        \"resource_id\": \"7174330567222185253\",\n        \"effect_id\": \"7174330567222185253\",\n        \"name\": \"圣诞红白条\",\n        \"is_vip\": True\n    },\n    \"粉色花字\": {\n        \"resource_id\": \"7127839722893774087\",\n        \"effect_id\": \"7127839722893774087\",\n        \"name\": \"粉色花字\",\n        \"is_vip\": True\n    },\n    \"潮酷白色发光立体花字\": {\n        \"resource_id\": \"7160597532043644174\",\n        \"effect_id\": \"7160597532043644174\",\n        \"name\": \"潮酷白色发光立体花字\",\n        \"is_vip\": True\n    },\n    \"综艺立体渐变\": {\n        \"resource_id\": \"7160596088011951373\",\n        \"effect_id\": \"7160596088011951373\",\n        \"name\": \"综艺立体渐变\",\n        \"is_vip\": True\n    },\n    \"黄色渐变花字\": {\n        \"resource_id\": \"7273017604837625151\",\n        \"effect_id\": \"7273017604837625151\",\n        \"name\": \"黄色渐变花字\",\n        \"is_vip\": True\n    },\n    \"发光\": {\n        \"resource_id\": \"7346916622247955763\",\n        \"effect_id\": \"7346916622247955763\",\n        \"name\": \"发光\",\n        \"is_vip\": True\n    },\n    \"闪光的新年花字-2022元旦\": {\n        \"resource_id\": \"7179634097906519356\",\n        \"effect_id\": \"7179634097906519356\",\n        \"name\": \"闪光的新年花字-2022元旦\",\n        \"is_vip\": True\n    },\n    \"红色渐变描边花字\": {\n        \"resource_id\": \"7265622933702184232\",\n        \"effect_id\": \"7265622933702184232\",\n        \"name\": \"红色渐变描边花字\",\n        \"is_vip\": True\n    },\n    \"粉色发光\": {\n        \"resource_id\": \"7362142403416952115\",\n        \"effect_id\": \"7362142403416952115\",\n        \"name\": \"粉色发光\",\n        \"is_vip\": True\n    },\n    \"霓虹灯黄红发光花字\": {\n        \"resource_id\": \"7322482076958149914\",\n        \"effect_id\": \"7322482076958149914\",\n        \"name\": \"霓虹灯黄红发光花字\",\n        \"is_vip\": True\n    },\n    \"洒金粉花字-2022元旦\": {\n        \"resource_id\": \"7179628047832730941\",\n        \"effect_id\": \"7179628047832730941\",\n        \"name\": \"洒金粉花字-2022元旦\",\n        \"is_vip\": True\n    },\n    \"元旦透明飘雪花字-2022元旦\": {\n        \"resource_id\": \"7179616970399124795\",\n        \"effect_id\": \"7179616970399124795\",\n        \"name\": \"元旦透明飘雪花字-2022元旦\",\n        \"is_vip\": True\n    },\n    \"浅蓝色发光花字\": {\n        \"resource_id\": \"7281951975275597114\",\n        \"effect_id\": \"7281951975275597114\",\n        \"name\": \"浅蓝色发光花字\",\n        \"is_vip\": True\n    },\n    \"红色内发光文字\": {\n        \"resource_id\": \"7405197593808096527\",\n        \"effect_id\": \"7405197593808096527\",\n        \"name\": \"红色内发光文字\",\n        \"is_vip\": True\n    },\n    \"克莱因蓝发光字体\": {\n        \"resource_id\": \"7240995033393007931\",\n        \"effect_id\": \"7240995033393007931\",\n        \"name\": \"克莱因蓝发光字体\",\n        \"is_vip\": True\n    },\n    \"红黄配色花字\": {\n        \"resource_id\": \"7403941808302066979\",\n        \"effect_id\": \"7403941808302066979\",\n        \"name\": \"红黄配色花字\",\n        \"is_vip\": True\n    },\n    \"红色发光花字\": {\n        \"resource_id\": \"7128327279804976397\",\n        \"effect_id\": \"7128327279804976397\",\n        \"name\": \"红色发光花字\",\n        \"is_vip\": True\n    },\n    \"黄色橙色描边花字\": {\n        \"resource_id\": \"7241397134128352551\",\n        \"effect_id\": \"7241397134128352551\",\n        \"name\": \"黄色橙色描边花字\",\n        \"is_vip\": True\n    },\n    \"霓虹灯发光红黄花字\": {\n        \"resource_id\": \"7404014524900199706\",\n        \"effect_id\": \"7404014524900199706\",\n        \"name\": \"霓虹灯发光红黄花字\",\n        \"is_vip\": True\n    },\n    \"薄荷冰花字\": {\n        \"resource_id\": \"7312709252928277812\",\n        \"effect_id\": \"7312709252928277812\",\n        \"name\": \"薄荷冰花字\",\n        \"is_vip\": True\n    },\n    \"荧光绿炫酷字体\": {\n        \"resource_id\": \"7241480073759575357\",\n        \"effect_id\": \"7241480073759575357\",\n        \"name\": \"荧光绿炫酷字体\",\n        \"is_vip\": True\n    },\n    \"渐变花字\": {\n        \"resource_id\": \"7260439366953110825\",\n        \"effect_id\": \"7260439366953110825\",\n        \"name\": \"渐变花字\",\n        \"is_vip\": True\n    },\n    \"烟雾纹理花字\": {\n        \"resource_id\": \"7245610210386136357\",\n        \"effect_id\": \"7245610210386136357\",\n        \"name\": \"烟雾纹理花字\",\n        \"is_vip\": True\n    },\n    \"红配蓝发光炫酷字体\": {\n        \"resource_id\": \"7243255465822506255\",\n        \"effect_id\": \"7243255465822506255\",\n        \"name\": \"红配蓝发光炫酷字体\",\n        \"is_vip\": True\n    },\n    \"潮酷发光立体花字\": {\n        \"resource_id\": \"7160595918226525453\",\n        \"effect_id\": \"7160595918226525453\",\n        \"name\": \"潮酷发光立体花字\",\n        \"is_vip\": True\n    },\n    \"电商节日直播贴片标题立体字\": {\n        \"resource_id\": \"7406289529096719625\",\n        \"effect_id\": \"7406289529096719625\",\n        \"name\": \"电商节日直播贴片标题立体字\",\n        \"is_vip\": True\n    },\n    \"渐变 蓝紫色花字\": {\n        \"resource_id\": \"7336848964819504434\",\n        \"effect_id\": \"7336848964819504434\",\n        \"name\": \"渐变 蓝紫色花字\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变花字\": {\n        \"resource_id\": \"7241432857447583028\",\n        \"effect_id\": \"7241432857447583028\",\n        \"name\": \"蓝色渐变花字\",\n        \"is_vip\": True\n    },\n    \"黄色字荧光描边花字\": {\n        \"resource_id\": \"7241389070943866164\",\n        \"effect_id\": \"7241389070943866164\",\n        \"name\": \"黄色字荧光描边花字\",\n        \"is_vip\": True\n    },\n    \"粉色渐变描边花字\": {\n        \"resource_id\": \"7265621281838533923\",\n        \"effect_id\": \"7265621281838533923\",\n        \"name\": \"粉色渐变描边花字\",\n        \"is_vip\": True\n    },\n    \"圆环发光花字\": {\n        \"resource_id\": \"7322679348106906918\",\n        \"effect_id\": \"7322679348106906918\",\n        \"name\": \"圆环发光花字\",\n        \"is_vip\": True\n    },\n    \"绿色渐变描边花字\": {\n        \"resource_id\": \"7265622422022262051\",\n        \"effect_id\": \"7265622422022262051\",\n        \"name\": \"绿色渐变描边花字\",\n        \"is_vip\": True\n    },\n    \"白紫立体发光\": {\n        \"resource_id\": \"7390410514976804122\",\n        \"effect_id\": \"7390410514976804122\",\n        \"name\": \"白紫立体发光\",\n        \"is_vip\": True\n    },\n    \"甜粉\": {\n        \"resource_id\": \"7266447274115419449\",\n        \"effect_id\": \"7266447274115419449\",\n        \"name\": \"甜粉\",\n        \"is_vip\": True\n    },\n    \"红色霓虹灯发光花字\": {\n        \"resource_id\": \"7408956912089206067\",\n        \"effect_id\": \"7408956912089206067\",\n        \"name\": \"红色霓虹灯发光花字\",\n        \"is_vip\": True\n    },\n    \"金色花字\": {\n        \"resource_id\": \"7266696486363106616\",\n        \"effect_id\": \"7266696486363106616\",\n        \"name\": \"金色花字\",\n        \"is_vip\": True\n    },\n    \"空心白色描边发光花字\": {\n        \"resource_id\": \"7404503527617301770\",\n        \"effect_id\": \"7404503527617301770\",\n        \"name\": \"空心白色描边发光花字\",\n        \"is_vip\": True\n    },\n    \"白字蓝光花字\": {\n        \"resource_id\": \"7351422706086169866\",\n        \"effect_id\": \"7351422706086169866\",\n        \"name\": \"白字蓝光花字\",\n        \"is_vip\": True\n    },\n    \"亮黄字橙色描边发光花字\": {\n        \"resource_id\": \"7404047060221037851\",\n        \"effect_id\": \"7404047060221037851\",\n        \"name\": \"亮黄字橙色描边发光花字\",\n        \"is_vip\": True\n    },\n    \"冬季发光\": {\n        \"resource_id\": \"7434806614781168947\",\n        \"effect_id\": \"7434806614781168947\",\n        \"name\": \"冬季发光\",\n        \"is_vip\": True\n    },\n    \"黄的红边花字重叠\": {\n        \"resource_id\": \"7231824394559982886\",\n        \"effect_id\": \"7231824394559982886\",\n        \"name\": \"黄的红边花字重叠\",\n        \"is_vip\": True\n    },\n    \"渐变彩虹色发光花字\": {\n        \"resource_id\": \"7405056348200684827\",\n        \"effect_id\": \"7405056348200684827\",\n        \"name\": \"渐变彩虹色发光花字\",\n        \"is_vip\": True\n    },\n    \"霓虹灯发光花字\": {\n        \"resource_id\": \"7322881735522290995\",\n        \"effect_id\": \"7322881735522290995\",\n        \"name\": \"霓虹灯发光花字\",\n        \"is_vip\": True\n    },\n    \"绿色纹理立体花字\": {\n        \"resource_id\": \"7391283375606156585\",\n        \"effect_id\": \"7391283375606156585\",\n        \"name\": \"绿色纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"红色霓虹灯发光字\": {\n        \"resource_id\": \"7322678574719339802\",\n        \"effect_id\": \"7322678574719339802\",\n        \"name\": \"红色霓虹灯发光字\",\n        \"is_vip\": True\n    },\n    \"星空\": {\n        \"resource_id\": \"7266724384205786427\",\n        \"effect_id\": \"7266724384205786427\",\n        \"name\": \"星空\",\n        \"is_vip\": True\n    },\n    \"美食-中间渐变\": {\n        \"resource_id\": \"7212896736849841467\",\n        \"effect_id\": \"7212896736849841467\",\n        \"name\": \"美食-中间渐变\",\n        \"is_vip\": True\n    },\n    \"夏日的亮丽 \": {\n        \"resource_id\": \"7259709733790125366\",\n        \"effect_id\": \"7259709733790125366\",\n        \"name\": \"夏日的亮丽 \",\n        \"is_vip\": True\n    },\n    \"纯黑底色，荧光绿和黑色描边 立体 发光 花字\": {\n        \"resource_id\": \"7274035971207744824\",\n        \"effect_id\": \"7274035971207744824\",\n        \"name\": \"纯黑底色，荧光绿和黑色描边 立体 发光 花字\",\n        \"is_vip\": True\n    },\n    \"黄色蓝色发发光花字\": {\n        \"resource_id\": \"7241392284686683395\",\n        \"effect_id\": \"7241392284686683395\",\n        \"name\": \"黄色蓝色发发光花字\",\n        \"is_vip\": True\n    },\n    \"梦幻蓝紫色简约渐变花字\": {\n        \"resource_id\": \"7241477841567649080\",\n        \"effect_id\": \"7241477841567649080\",\n        \"name\": \"梦幻蓝紫色简约渐变花字\",\n        \"is_vip\": True\n    },\n    \"红色荧光花字\": {\n        \"resource_id\": \"7241410291521670400\",\n        \"effect_id\": \"7241410291521670400\",\n        \"name\": \"红色荧光花字\",\n        \"is_vip\": True\n    },\n    \"彩色发光立体\": {\n        \"resource_id\": \"7390315130128452890\",\n        \"effect_id\": \"7390315130128452890\",\n        \"name\": \"彩色发光立体\",\n        \"is_vip\": True\n    },\n    \"黄色渐变发光字\": {\n        \"resource_id\": \"7404001083665812771\",\n        \"effect_id\": \"7404001083665812771\",\n        \"name\": \"黄色渐变发光字\",\n        \"is_vip\": True\n    },\n    \"发光灯箱感红色花字\": {\n        \"resource_id\": \"6926827744189779207\",\n        \"effect_id\": \"6926827744189779207\",\n        \"name\": \"发光灯箱感红色花字\",\n        \"is_vip\": True\n    },\n    \"霓虹灯发光花字\": {\n        \"resource_id\": \"7322422789355392265\",\n        \"effect_id\": \"7322422789355392265\",\n        \"name\": \"霓虹灯发光花字\",\n        \"is_vip\": True\n    },\n    \"黑色红边柔光花字\": {\n        \"resource_id\": \"7231468045976292645\",\n        \"effect_id\": \"7231468045976292645\",\n        \"name\": \"黑色红边柔光花字\",\n        \"is_vip\": True\n    },\n    \"粉色渐变温柔发光花字\": {\n        \"resource_id\": \"7404385123975613706\",\n        \"effect_id\": \"7404385123975613706\",\n        \"name\": \"粉色渐变温柔发光花字\",\n        \"is_vip\": True\n    },\n    \"渐变紫色花字\": {\n        \"resource_id\": \"7241393396575735040\",\n        \"effect_id\": \"7241393396575735040\",\n        \"name\": \"渐变紫色花字\",\n        \"is_vip\": True\n    },\n    \"红配绿发光拼色字体\": {\n        \"resource_id\": \"7243262147210267944\",\n        \"effect_id\": \"7243262147210267944\",\n        \"name\": \"红配绿发光拼色字体\",\n        \"is_vip\": True\n    },\n    \"黑底荧光绿描边 发光 花字\": {\n        \"resource_id\": \"7273831317136035133\",\n        \"effect_id\": \"7273831317136035133\",\n        \"name\": \"黑底荧光绿描边 发光 花字\",\n        \"is_vip\": True\n    },\n    \"霓虹灯发光花字\": {\n        \"resource_id\": \"7322380988430994715\",\n        \"effect_id\": \"7322380988430994715\",\n        \"name\": \"霓虹灯发光花字\",\n        \"is_vip\": True\n    },\n    \"绿字蓝白描边荧光字\": {\n        \"resource_id\": \"7403932533995425039\",\n        \"effect_id\": \"7403932533995425039\",\n        \"name\": \"绿字蓝白描边荧光字\",\n        \"is_vip\": True\n    },\n    \"粉色渐变双层立体发光花字\": {\n        \"resource_id\": \"7494822504427539737\",\n        \"effect_id\": \"7494822504427539737\",\n        \"name\": \"粉色渐变双层立体发光花字\",\n        \"is_vip\": True\n    },\n    \"东南亚渐变\": {\n        \"resource_id\": \"7411034104415685939\",\n        \"effect_id\": \"7411034104415685939\",\n        \"name\": \"东南亚渐变\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变花字\": {\n        \"resource_id\": \"7241398727125011746\",\n        \"effect_id\": \"7241398727125011746\",\n        \"name\": \"蓝色渐变花字\",\n        \"is_vip\": True\n    },\n    \"黄红色霓虹灯镂空发光花字\": {\n        \"resource_id\": \"7404089520070593843\",\n        \"effect_id\": \"7404089520070593843\",\n        \"name\": \"黄红色霓虹灯镂空发光花字\",\n        \"is_vip\": True\n    },\n    \"粉色渐变圆圈\": {\n        \"resource_id\": \"7403922592194710834\",\n        \"effect_id\": \"7403922592194710834\",\n        \"name\": \"粉色渐变圆圈\",\n        \"is_vip\": True\n    },\n    \"紫色发光花字\": {\n        \"resource_id\": \"7248870704752397579\",\n        \"effect_id\": \"7248870704752397579\",\n        \"name\": \"紫色发光花字\",\n        \"is_vip\": True\n    },\n    \"粉色发光\": {\n        \"resource_id\": \"7361004787967495462\",\n        \"effect_id\": \"7361004787967495462\",\n        \"name\": \"粉色发光\",\n        \"is_vip\": True\n    },\n    \"纯色黄色字体\": {\n        \"resource_id\": \"7260373127249595687\",\n        \"effect_id\": \"7260373127249595687\",\n        \"name\": \"纯色黄色字体\",\n        \"is_vip\": True\n    },\n    \"紫色发光字\": {\n        \"resource_id\": \"7403992509212314920\",\n        \"effect_id\": \"7403992509212314920\",\n        \"name\": \"紫色发光字\",\n        \"is_vip\": True\n    },\n    \"粉色闪粉星光闪闪发光划走\": {\n        \"resource_id\": \"7496497861224516926\",\n        \"effect_id\": \"7496497861224516926\",\n        \"name\": \"粉色闪粉星光闪闪发光划走\",\n        \"is_vip\": True\n    },\n    \"绿底黑边黄色立体花字\": {\n        \"resource_id\": \"7270129109974469945\",\n        \"effect_id\": \"7270129109974469945\",\n        \"name\": \"绿底黑边黄色立体花字\",\n        \"is_vip\": True\n    },\n    \"简约蓝\": {\n        \"resource_id\": \"7264481843301354813\",\n        \"effect_id\": \"7264481843301354813\",\n        \"name\": \"简约蓝\",\n        \"is_vip\": True\n    },\n    \"花粉绿\": {\n        \"resource_id\": \"7241230847741791521\",\n        \"effect_id\": \"7241230847741791521\",\n        \"name\": \"花粉绿\",\n        \"is_vip\": True\n    },\n    \"粉色发光立体花字\": {\n        \"resource_id\": \"7404070348263607603\",\n        \"effect_id\": \"7404070348263607603\",\n        \"name\": \"粉色发光立体花字\",\n        \"is_vip\": True\n    },\n    \"绿色渐变立体描边花字\": {\n        \"resource_id\": \"7406241968847670569\",\n        \"effect_id\": \"7406241968847670569\",\n        \"name\": \"绿色渐变立体描边花字\",\n        \"is_vip\": True\n    },\n    \"粉色糖果风格花字\": {\n        \"resource_id\": \"7291429737774255412\",\n        \"effect_id\": \"7291429737774255412\",\n        \"name\": \"粉色糖果风格花字\",\n        \"is_vip\": True\n    },\n    \"紫色花字\": {\n        \"resource_id\": \"7355608527144062217\",\n        \"effect_id\": \"7355608527144062217\",\n        \"name\": \"紫色花字\",\n        \"is_vip\": True\n    },\n    \"渐变发光花字\": {\n        \"resource_id\": \"7238624559178485031\",\n        \"effect_id\": \"7238624559178485031\",\n        \"name\": \"渐变发光花字\",\n        \"is_vip\": True\n    },\n    \"荧光绿线条发光字\": {\n        \"resource_id\": \"7405916937353465128\",\n        \"effect_id\": \"7405916937353465128\",\n        \"name\": \"荧光绿线条发光字\",\n        \"is_vip\": True\n    },\n    \"渐变花字\": {\n        \"resource_id\": \"7270718850256211259\",\n        \"effect_id\": \"7270718850256211259\",\n        \"name\": \"渐变花字\",\n        \"is_vip\": True\n    },\n    \"粉色发光花字\": {\n        \"resource_id\": \"7274771737999379749\",\n        \"effect_id\": \"7274771737999379749\",\n        \"name\": \"粉色发光花字\",\n        \"is_vip\": True\n    },\n    \"粉色闪粉白色描边发光花字\": {\n        \"resource_id\": \"7404388775264030003\",\n        \"effect_id\": \"7404388775264030003\",\n        \"name\": \"粉色闪粉白色描边发光花字\",\n        \"is_vip\": True\n    },\n    \"紫红发光字\": {\n        \"resource_id\": \"7405417769446968610\",\n        \"effect_id\": \"7405417769446968610\",\n        \"name\": \"紫红发光字\",\n        \"is_vip\": True\n    },\n    \"彩色渐变花字\": {\n        \"resource_id\": \"7248130865094561036\",\n        \"effect_id\": \"7248130865094561036\",\n        \"name\": \"彩色渐变花字\",\n        \"is_vip\": True\n    },\n    \"绿色立体花字\": {\n        \"resource_id\": \"7241415162345852194\",\n        \"effect_id\": \"7241415162345852194\",\n        \"name\": \"绿色立体花字\",\n        \"is_vip\": True\n    },\n    \"条纹黄色综艺发光花字\": {\n        \"resource_id\": \"7275250557386788156\",\n        \"effect_id\": \"7275250557386788156\",\n        \"name\": \"条纹黄色综艺发光花字\",\n        \"is_vip\": True\n    },\n    \"梦幻紫星光双层立体花字\": {\n        \"resource_id\": \"7404321217110396187\",\n        \"effect_id\": \"7404321217110396187\",\n        \"name\": \"梦幻紫星光双层立体花字\",\n        \"is_vip\": True\n    },\n    \"粉色闪闪\": {\n        \"resource_id\": \"7529808923725925657\",\n        \"effect_id\": \"7529808923725925657\",\n        \"name\": \"粉色闪闪\",\n        \"is_vip\": True\n    },\n    \"荧光线条发光字\": {\n        \"resource_id\": \"7405939554047233295\",\n        \"effect_id\": \"7405939554047233295\",\n        \"name\": \"荧光线条发光字\",\n        \"is_vip\": True\n    },\n    \"机械装甲绿色科技感文字标题\": {\n        \"resource_id\": \"7327845943305358646\",\n        \"effect_id\": \"7327845943305358646\",\n        \"name\": \"机械装甲绿色科技感文字标题\",\n        \"is_vip\": True\n    },\n    \"发光灯箱感绿色描边立体花字\": {\n        \"resource_id\": \"7404100687820229922\",\n        \"effect_id\": \"7404100687820229922\",\n        \"name\": \"发光灯箱感绿色描边立体花字\",\n        \"is_vip\": True\n    },\n    \"白花纹发光花字\": {\n        \"resource_id\": \"7259233733964811572\",\n        \"effect_id\": \"7259233733964811572\",\n        \"name\": \"白花纹发光花字\",\n        \"is_vip\": True\n    },\n    \"清新绿色 绿色花字\": {\n        \"resource_id\": \"7334225752663149850\",\n        \"effect_id\": \"7334225752663149850\",\n        \"name\": \"清新绿色 绿色花字\",\n        \"is_vip\": True\n    },\n    \"浅绿色 绿色花字底发光\": {\n        \"resource_id\": \"7334229773402606886\",\n        \"effect_id\": \"7334229773402606886\",\n        \"name\": \"浅绿色 绿色花字底发光\",\n        \"is_vip\": True\n    },\n    \"夏日青春派对\": {\n        \"resource_id\": \"7249749880611015988\",\n        \"effect_id\": \"7249749880611015988\",\n        \"name\": \"夏日青春派对\",\n        \"is_vip\": True\n    },\n    \"紫色发光字\": {\n        \"resource_id\": \"7406201706456960256\",\n        \"effect_id\": \"7406201706456960256\",\n        \"name\": \"紫色发光字\",\n        \"is_vip\": True\n    },\n    \"白色描边芭比粉发光花字\": {\n        \"resource_id\": \"7404708538926353700\",\n        \"effect_id\": \"7404708538926353700\",\n        \"name\": \"白色描边芭比粉发光花字\",\n        \"is_vip\": True\n    },\n    \"花字-雪花彩粉渐变立体字\": {\n        \"resource_id\": \"7232089500518862140\",\n        \"effect_id\": \"7232089500518862140\",\n        \"name\": \"花字-雪花彩粉渐变立体字\",\n        \"is_vip\": True\n    },\n    \"赛博朋克纹理发光字\": {\n        \"resource_id\": \"7405875861712342307\",\n        \"effect_id\": \"7405875861712342307\",\n        \"name\": \"赛博朋克纹理发光字\",\n        \"is_vip\": True\n    },\n    \"浅梦幻少女色\": {\n        \"resource_id\": \"7281283804235402533\",\n        \"effect_id\": \"7281283804235402533\",\n        \"name\": \"浅梦幻少女色\",\n        \"is_vip\": True\n    },\n    \"彩色镭射渐变花字\": {\n        \"resource_id\": \"7404330497574309129\",\n        \"effect_id\": \"7404330497574309129\",\n        \"name\": \"彩色镭射渐变花字\",\n        \"is_vip\": True\n    },\n    \"紫色发光立体花字\": {\n        \"resource_id\": \"7245923862574009635\",\n        \"effect_id\": \"7245923862574009635\",\n        \"name\": \"紫色发光立体花字\",\n        \"is_vip\": True\n    },\n    \"薄荷绿花字\": {\n        \"resource_id\": \"7404021791427005723\",\n        \"effect_id\": \"7404021791427005723\",\n        \"name\": \"薄荷绿花字\",\n        \"is_vip\": True\n    },\n    \"青色 红色 荧光花字\": {\n        \"resource_id\": \"7241393660334574848\",\n        \"effect_id\": \"7241393660334574848\",\n        \"name\": \"青色 红色 荧光花字\",\n        \"is_vip\": True\n    },\n    \"绿色花字\": {\n        \"resource_id\": \"7351303614104636699\",\n        \"effect_id\": \"7351303614104636699\",\n        \"name\": \"绿色花字\",\n        \"is_vip\": True\n    },\n    \"紫宝石\": {\n        \"resource_id\": \"7241904291722693944\",\n        \"effect_id\": \"7241904291722693944\",\n        \"name\": \"紫宝石\",\n        \"is_vip\": True\n    },\n    \"粉橙色花字\": {\n        \"resource_id\": \"7241388504381541666\",\n        \"effect_id\": \"7241388504381541666\",\n        \"name\": \"粉橙色花字\",\n        \"is_vip\": True\n    },\n    \"格子纹理花字\": {\n        \"resource_id\": \"7260122300564000012\",\n        \"effect_id\": \"7260122300564000012\",\n        \"name\": \"格子纹理花字\",\n        \"is_vip\": True\n    },\n    \"复古格子清新蓝花字\": {\n        \"resource_id\": \"7297906734755073319\",\n        \"effect_id\": \"7297906734755073319\",\n        \"name\": \"复古格子清新蓝花字\",\n        \"is_vip\": True\n    },\n    \"深绿色黑边紫光花字\": {\n        \"resource_id\": \"7231501962041117955\",\n        \"effect_id\": \"7231501962041117955\",\n        \"name\": \"深绿色黑边紫光花字\",\n        \"is_vip\": True\n    },\n    \"紫色粉边花字\": {\n        \"resource_id\": \"7291157036098735401\",\n        \"effect_id\": \"7291157036098735401\",\n        \"name\": \"紫色粉边花字\",\n        \"is_vip\": True\n    },\n    \"清新蓝色发光花字\": {\n        \"resource_id\": \"6896138122774514951\",\n        \"effect_id\": \"6896138122774514951\",\n        \"name\": \"清新蓝色发光花字\",\n        \"is_vip\": False\n    },\n    \"潮酷 白色橙边\": {\n        \"resource_id\": \"7127615338035924238\",\n        \"effect_id\": \"7127615338035924238\",\n        \"name\": \"潮酷 白色橙边\",\n        \"is_vip\": False\n    },\n    \"简约白色发光立体花字\": {\n        \"resource_id\": \"7166445713029729568\",\n        \"effect_id\": \"7166445713029729568\",\n        \"name\": \"简约白色发光立体花字\",\n        \"is_vip\": False\n    },\n    \"超酷发光镂空花字、潮人必备\": {\n        \"resource_id\": \"6896141886055107854\",\n        \"effect_id\": \"6896141886055107854\",\n        \"name\": \"超酷发光镂空花字、潮人必备\",\n        \"is_vip\": False\n    },\n    \"潮酷蓝色发光镂空花字\": {\n        \"resource_id\": \"6896141886055091470\",\n        \"effect_id\": \"6896141886055091470\",\n        \"name\": \"潮酷蓝色发光镂空花字\",\n        \"is_vip\": False\n    },\n    \"综艺 橙色\": {\n        \"resource_id\": \"7127654126997048607\",\n        \"effect_id\": \"7127654126997048607\",\n        \"name\": \"综艺 橙色\",\n        \"is_vip\": False\n    },\n    \"清新粉色发光灯箱感花字\": {\n        \"resource_id\": \"6896138122774531335\",\n        \"effect_id\": \"6896138122774531335\",\n        \"name\": \"清新粉色发光灯箱感花字\",\n        \"is_vip\": False\n    },\n    \"炫彩发光跳色花字，\": {\n        \"resource_id\": \"6896141886055058702\",\n        \"effect_id\": \"6896141886055058702\",\n        \"name\": \"炫彩发光跳色花字，\",\n        \"is_vip\": False\n    },\n    \"潮酷 橙色\": {\n        \"resource_id\": \"7127817897061125413\",\n        \"effect_id\": \"7127817897061125413\",\n        \"name\": \"潮酷 橙色\",\n        \"is_vip\": False\n    },\n    \"潮酷黄色霓虹灯花字\": {\n        \"resource_id\": \"6926796566346960141\",\n        \"effect_id\": \"6926796566346960141\",\n        \"name\": \"潮酷黄色霓虹灯花字\",\n        \"is_vip\": False\n    },\n    \"红色镂空发光花字\": {\n        \"resource_id\": \"6926825801258126599\",\n        \"effect_id\": \"6926825801258126599\",\n        \"name\": \"红色镂空发光花字\",\n        \"is_vip\": False\n    },\n    \"潮酷蓝色霓虹灯发光花字\": {\n        \"resource_id\": \"6926827744189795591\",\n        \"effect_id\": \"6926827744189795591\",\n        \"name\": \"潮酷蓝色霓虹灯发光花字\",\n        \"is_vip\": False\n    },\n    \"潮酷黄底白色发光立体花字\": {\n        \"resource_id\": \"7187616139642522936\",\n        \"effect_id\": \"7187616139642522936\",\n        \"name\": \"潮酷黄底白色发光立体花字\",\n        \"is_vip\": False\n    },\n    \"蓝色镂空发光花字\": {\n        \"resource_id\": \"6927159112887176459\",\n        \"effect_id\": \"6927159112887176459\",\n        \"name\": \"蓝色镂空发光花字\",\n        \"is_vip\": False\n    },\n    \"潮酷 白色粉边\": {\n        \"resource_id\": \"7127819154018602277\",\n        \"effect_id\": \"7127819154018602277\",\n        \"name\": \"潮酷 白色粉边\",\n        \"is_vip\": False\n    },\n    \"暗黑潮酷黑色花字\": {\n        \"resource_id\": \"6926825801258159367\",\n        \"effect_id\": \"6926825801258159367\",\n        \"name\": \"暗黑潮酷黑色花字\",\n        \"is_vip\": False\n    },\n    \"超酷黄色发光花字\": {\n        \"resource_id\": \"6896143968241798408\",\n        \"effect_id\": \"6896143968241798408\",\n        \"name\": \"超酷黄色发光花字\",\n        \"is_vip\": False\n    },\n    \"小清新 白色\": {\n        \"resource_id\": \"7127680616283295006\",\n        \"effect_id\": \"7127680616283295006\",\n        \"name\": \"小清新 白色\",\n        \"is_vip\": False\n    },\n    \"黄色发光字\": {\n        \"resource_id\": \"7405565480678739200\",\n        \"effect_id\": \"7405565480678739200\",\n        \"name\": \"黄色发光字\",\n        \"is_vip\": False\n    },\n    \"炫彩发光花字，跳字变色\": {\n        \"resource_id\": \"6896141886055075086\",\n        \"effect_id\": \"6896141886055075086\",\n        \"name\": \"炫彩发光花字，跳字变色\",\n        \"is_vip\": False\n    },\n    \"发光灯箱感绿色花字\": {\n        \"resource_id\": \"6896144021568179469\",\n        \"effect_id\": \"6896144021568179469\",\n        \"name\": \"发光灯箱感绿色花字\",\n        \"is_vip\": False\n    },\n    \"潮酷黄色发光花字\": {\n        \"resource_id\": \"6926825801384021256\",\n        \"effect_id\": \"6926825801384021256\",\n        \"name\": \"潮酷黄色发光花字\",\n        \"is_vip\": False\n    },\n    \"复古 红色\": {\n        \"resource_id\": \"7127827287826779428\",\n        \"effect_id\": \"7127827287826779428\",\n        \"name\": \"复古 红色\",\n        \"is_vip\": False\n    },\n    \"赛博朋克未来科技感立体发光花字\": {\n        \"resource_id\": \"7404088879780826406\",\n        \"effect_id\": \"7404088879780826406\",\n        \"name\": \"赛博朋克未来科技感立体发光花字\",\n        \"is_vip\": False\n    },\n    \"红色潮酷外发光花字\": {\n        \"resource_id\": \"6927160254996253967\",\n        \"effect_id\": \"6927160254996253967\",\n        \"name\": \"红色潮酷外发光花字\",\n        \"is_vip\": False\n    },\n    \"红色朦胧港风复古花字\": {\n        \"resource_id\": \"6927160144421866752\",\n        \"effect_id\": \"6927160144421866752\",\n        \"name\": \"红色朦胧港风复古花字\",\n        \"is_vip\": False\n    },\n    \"Y2k粉色立体灯箱发光花字\": {\n        \"resource_id\": \"7127675252410289445\",\n        \"effect_id\": \"7127675252410289445\",\n        \"name\": \"Y2k粉色立体灯箱发光花字\",\n        \"is_vip\": False\n    },\n    \"潮酷粉色发光镂空花字\": {\n        \"resource_id\": \"6896143968241782024\",\n        \"effect_id\": \"6896143968241782024\",\n        \"name\": \"潮酷粉色发光镂空花字\",\n        \"is_vip\": False\n    },\n    \"梦幻粉色发光立体花字\": {\n        \"resource_id\": \"7197333872466611513\",\n        \"effect_id\": \"7197333872466611513\",\n        \"name\": \"梦幻粉色发光立体花字\",\n        \"is_vip\": False\n    },\n    \"潮酷发光青色\": {\n        \"resource_id\": \"7127669605199351048\",\n        \"effect_id\": \"7127669605199351048\",\n        \"name\": \"潮酷发光青色\",\n        \"is_vip\": False\n    },\n    \"黄橙渐变黑红描边立体字\": {\n        \"resource_id\": \"7403926640260123944\",\n        \"effect_id\": \"7403926640260123944\",\n        \"name\": \"黄橙渐变黑红描边立体字\",\n        \"is_vip\": True\n    },\n    \"蓝色纹理立体发光花字\": {\n        \"resource_id\": \"7430703360409554212\",\n        \"effect_id\": \"7430703360409554212\",\n        \"name\": \"蓝色纹理立体发光花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变红边发光花字\": {\n        \"resource_id\": \"7407014765907774747\",\n        \"effect_id\": \"7407014765907774747\",\n        \"name\": \"黄色渐变红边发光花字\",\n        \"is_vip\": True\n    },\n    \"潮酷发光立体花字\": {\n        \"resource_id\": \"7160596855456320776\",\n        \"effect_id\": \"7160596855456320776\",\n        \"name\": \"潮酷发光立体花字\",\n        \"is_vip\": True\n    },\n    \"立体金属字\": {\n        \"resource_id\": \"7317088712154696969\",\n        \"effect_id\": \"7317088712154696969\",\n        \"name\": \"立体金属字\",\n        \"is_vip\": True\n    },\n    \"黑金色立体花字\": {\n        \"resource_id\": \"7244940532298829090\",\n        \"effect_id\": \"7244940532298829090\",\n        \"name\": \"黑金色立体花字\",\n        \"is_vip\": True\n    },\n    \"黑灰色花字【严肃】\": {\n        \"resource_id\": \"7281947750139219257\",\n        \"effect_id\": \"7281947750139219257\",\n        \"name\": \"黑灰色花字【严肃】\",\n        \"is_vip\": True\n    },\n    \"美食-黄网格\": {\n        \"resource_id\": \"7212896770370587941\",\n        \"effect_id\": \"7212896770370587941\",\n        \"name\": \"美食-黄网格\",\n        \"is_vip\": True\n    },\n    \"金属灰渐变立体白边花字\": {\n        \"resource_id\": \"7388020661312146751\",\n        \"effect_id\": \"7388020661312146751\",\n        \"name\": \"金属灰渐变立体白边花字\",\n        \"is_vip\": True\n    },\n    \"一窝时光标题花字字体设计美食海报大气简约醒目小龙虾\": {\n        \"resource_id\": \"7260358084772547903\",\n        \"effect_id\": \"7260358084772547903\",\n        \"name\": \"一窝时光标题花字字体设计美食海报大气简约醒目小龙虾\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变3D立体花字\": {\n        \"resource_id\": \"7405125461438762267\",\n        \"effect_id\": \"7405125461438762267\",\n        \"name\": \"蓝色渐变3D立体花字\",\n        \"is_vip\": True\n    },\n    \"立体效果\": {\n        \"resource_id\": \"7274581371975142710\",\n        \"effect_id\": \"7274581371975142710\",\n        \"name\": \"立体效果\",\n        \"is_vip\": True\n    },\n    \"美食-金色网格\": {\n        \"resource_id\": \"7212897121249283383\",\n        \"effect_id\": \"7212897121249283383\",\n        \"name\": \"美食-金色网格\",\n        \"is_vip\": True\n    },\n    \"土酷蓝色渐变立体花字\": {\n        \"resource_id\": \"7160599091750145287\",\n        \"effect_id\": \"7160599091750145287\",\n        \"name\": \"土酷蓝色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变花字\": {\n        \"resource_id\": \"7220003213171281192\",\n        \"effect_id\": \"7220003213171281192\",\n        \"name\": \"蓝色渐变花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变花字\": {\n        \"resource_id\": \"7265625223381273891\",\n        \"effect_id\": \"7265625223381273891\",\n        \"name\": \"黄色渐变花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变花字\": {\n        \"resource_id\": \"7493083674158796094\",\n        \"effect_id\": \"7493083674158796094\",\n        \"name\": \"黄色渐变花字\",\n        \"is_vip\": True\n    },\n    \"黄白涂鸦花字\": {\n        \"resource_id\": \"7369091570345282866\",\n        \"effect_id\": \"7369091570345282866\",\n        \"name\": \"黄白涂鸦花字\",\n        \"is_vip\": True\n    },\n    \"黑灰渐变\": {\n        \"resource_id\": \"7224762483448237345\",\n        \"effect_id\": \"7224762483448237345\",\n        \"name\": \"黑灰渐变\",\n        \"is_vip\": True\n    },\n    \"彩色渐变描边\": {\n        \"resource_id\": \"7369985913310448911\",\n        \"effect_id\": \"7369985913310448911\",\n        \"name\": \"彩色渐变描边\",\n        \"is_vip\": True\n    },\n    \"黄色渐变花字\": {\n        \"resource_id\": \"7439987370033728807\",\n        \"effect_id\": \"7439987370033728807\",\n        \"name\": \"黄色渐变花字\",\n        \"is_vip\": True\n    },\n    \"橘黄色渐变波点底纹立体花字\": {\n        \"resource_id\": \"7405889740081237285\",\n        \"effect_id\": \"7405889740081237285\",\n        \"name\": \"橘黄色渐变波点底纹立体花字\",\n        \"is_vip\": True\n    },\n    \"大雪渐变\": {\n        \"resource_id\": \"7431533312738348314\",\n        \"effect_id\": \"7431533312738348314\",\n        \"name\": \"大雪渐变\",\n        \"is_vip\": True\n    },\n    \"黑白配\": {\n        \"resource_id\": \"7268912246900772135\",\n        \"effect_id\": \"7268912246900772135\",\n        \"name\": \"黑白配\",\n        \"is_vip\": True\n    },\n    \"美食-黄白跳色\": {\n        \"resource_id\": \"7252679635027168567\",\n        \"effect_id\": \"7252679635027168567\",\n        \"name\": \"美食-黄白跳色\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变立体描边花字\": {\n        \"resource_id\": \"7511237110914125080\",\n        \"effect_id\": \"7511237110914125080\",\n        \"name\": \"蓝色渐变立体描边花字\",\n        \"is_vip\": True\n    },\n    \"美食-弹幕\": {\n        \"resource_id\": \"7212885712495070519\",\n        \"effect_id\": \"7212885712495070519\",\n        \"name\": \"美食-弹幕\",\n        \"is_vip\": True\n    },\n    \"蓝色花字\": {\n        \"resource_id\": \"7264536942832848165\",\n        \"effect_id\": \"7264536942832848165\",\n        \"name\": \"蓝色花字\",\n        \"is_vip\": True\n    },\n    \"橘色渐变描边花字\": {\n        \"resource_id\": \"7265622781008629032\",\n        \"effect_id\": \"7265622781008629032\",\n        \"name\": \"橘色渐变描边花字\",\n        \"is_vip\": True\n    },\n    \"黄橙色渐变描边立体花字\": {\n        \"resource_id\": \"7405056217225104681\",\n        \"effect_id\": \"7405056217225104681\",\n        \"name\": \"黄橙色渐变描边立体花字\",\n        \"is_vip\": True\n    },\n    \"金色渐变 金灿灿花字 富贵\": {\n        \"resource_id\": \"7328610126296796468\",\n        \"effect_id\": \"7328610126296796468\",\n        \"name\": \"金色渐变 金灿灿花字 富贵\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7491562659268119870\",\n        \"effect_id\": \"7491562659268119870\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"暗黑红黑渐立体花字\": {\n        \"resource_id\": \"7205151372805754167\",\n        \"effect_id\": \"7205151372805754167\",\n        \"name\": \"暗黑红黑渐立体花字\",\n        \"is_vip\": True\n    },\n    \"粉色渐变红色底花字\": {\n        \"resource_id\": \"7404684532756073791\",\n        \"effect_id\": \"7404684532756073791\",\n        \"name\": \"粉色渐变红色底花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变立体花字\": {\n        \"resource_id\": \"7313119295792352539\",\n        \"effect_id\": \"7313119295792352539\",\n        \"name\": \"黄色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"综艺立体花字\": {\n        \"resource_id\": \"7160601969629891847\",\n        \"effect_id\": \"7160601969629891847\",\n        \"name\": \"综艺立体花字\",\n        \"is_vip\": True\n    },\n    \"扁平化请新白蓝\": {\n        \"resource_id\": \"7233363221497842977\",\n        \"effect_id\": \"7233363221497842977\",\n        \"name\": \"扁平化请新白蓝\",\n        \"is_vip\": True\n    },\n    \"春节-兔彩头-银色立体\": {\n        \"resource_id\": \"7187770975822433594\",\n        \"effect_id\": \"7187770975822433594\",\n        \"name\": \"春节-兔彩头-银色立体\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变花字\": {\n        \"resource_id\": \"7404899700970753321\",\n        \"effect_id\": \"7404899700970753321\",\n        \"name\": \"蓝色渐变花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7530918113899105561\",\n        \"effect_id\": \"7530918113899105561\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"七夕-粉白渐变\": {\n        \"resource_id\": \"7265298421341277452\",\n        \"effect_id\": \"7265298421341277452\",\n        \"name\": \"七夕-粉白渐变\",\n        \"is_vip\": True\n    },\n    \"金色红底春节喜庆花字\": {\n        \"resource_id\": \"7324218891222240522\",\n        \"effect_id\": \"7324218891222240522\",\n        \"name\": \"金色红底春节喜庆花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7431462520835099955\",\n        \"effect_id\": \"7431462520835099955\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"金色渐变红底立体花字\": {\n        \"resource_id\": \"7324255228310654235\",\n        \"effect_id\": \"7324255228310654235\",\n        \"name\": \"金色渐变红底立体花字\",\n        \"is_vip\": True\n    },\n    \"黄红渐变黑边立体花字\": {\n        \"resource_id\": \"7431549062475762959\",\n        \"effect_id\": \"7431549062475762959\",\n        \"name\": \"黄红渐变黑边立体花字\",\n        \"is_vip\": True\n    },\n    \"美食-红黄渐变\": {\n        \"resource_id\": \"7205154202757172541\",\n        \"effect_id\": \"7205154202757172541\",\n        \"name\": \"美食-红黄渐变\",\n        \"is_vip\": True\n    },\n    \"美食-划痕渐变\": {\n        \"resource_id\": \"7212896808798801213\",\n        \"effect_id\": \"7212896808798801213\",\n        \"name\": \"美食-划痕渐变\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变白色描边花字\": {\n        \"resource_id\": \"7330967545240964404\",\n        \"effect_id\": \"7330967545240964404\",\n        \"name\": \"蓝色渐变白色描边花字\",\n        \"is_vip\": True\n    },\n    \"渐变蓝色花字\": {\n        \"resource_id\": \"7384325883584056617\",\n        \"effect_id\": \"7384325883584056617\",\n        \"name\": \"渐变蓝色花字\",\n        \"is_vip\": True\n    },\n    \"红色描边双色渐变立体花字\": {\n        \"resource_id\": \"7391023993802804521\",\n        \"effect_id\": \"7391023993802804521\",\n        \"name\": \"红色描边双色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"橙色渐变波点双层立体花字\": {\n        \"resource_id\": \"7404880919582018854\",\n        \"effect_id\": \"7404880919582018854\",\n        \"name\": \"橙色渐变波点双层立体花字\",\n        \"is_vip\": True\n    },\n    \"浅蓝粉渐变立体花字\": {\n        \"resource_id\": \"7312840128949505307\",\n        \"effect_id\": \"7312840128949505307\",\n        \"name\": \"浅蓝粉渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"紫色立体花字\": {\n        \"resource_id\": \"7399918916232826123\",\n        \"effect_id\": \"7399918916232826123\",\n        \"name\": \"紫色立体花字\",\n        \"is_vip\": True\n    },\n    \"简约蓝色渐变立体花字\": {\n        \"resource_id\": \"7248118492111703357\",\n        \"effect_id\": \"7248118492111703357\",\n        \"name\": \"简约蓝色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"黄蓝撞色渐变立体花字\": {\n        \"resource_id\": \"7405583007098195237\",\n        \"effect_id\": \"7405583007098195237\",\n        \"name\": \"黄蓝撞色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"彩色渐变\": {\n        \"resource_id\": \"7369988046277594383\",\n        \"effect_id\": \"7369988046277594383\",\n        \"name\": \"彩色渐变\",\n        \"is_vip\": True\n    },\n    \"黄橘渐变\": {\n        \"resource_id\": \"7410717398510128424\",\n        \"effect_id\": \"7410717398510128424\",\n        \"name\": \"黄橘渐变\",\n        \"is_vip\": True\n    },\n    \"红色渐变透明花字\": {\n        \"resource_id\": \"7405253473299696931\",\n        \"effect_id\": \"7405253473299696931\",\n        \"name\": \"红色渐变透明花字\",\n        \"is_vip\": True\n    },\n    \"雪花字\": {\n        \"resource_id\": \"7298358091664362793\",\n        \"effect_id\": \"7298358091664362793\",\n        \"name\": \"雪花字\",\n        \"is_vip\": True\n    },\n    \"美食-辣\": {\n        \"resource_id\": \"7205147811573271864\",\n        \"effect_id\": \"7205147811573271864\",\n        \"name\": \"美食-辣\",\n        \"is_vip\": True\n    },\n    \"黄白色渐变立体花字\": {\n        \"resource_id\": \"7493079330654899480\",\n        \"effect_id\": \"7493079330654899480\",\n        \"name\": \"黄白色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"彩色\": {\n        \"resource_id\": \"7369460089767480614\",\n        \"effect_id\": \"7369460089767480614\",\n        \"name\": \"彩色\",\n        \"is_vip\": True\n    },\n    \"白字霓虹灯渐变花字\": {\n        \"resource_id\": \"7406294702212877619\",\n        \"effect_id\": \"7406294702212877619\",\n        \"name\": \"白字霓虹灯渐变花字\",\n        \"is_vip\": True\n    },\n    \"冬日寒冷发光花字\": {\n        \"resource_id\": \"7263267444020596005\",\n        \"effect_id\": \"7263267444020596005\",\n        \"name\": \"冬日寒冷发光花字\",\n        \"is_vip\": True\n    },\n    \"彩色渐变花字\": {\n        \"resource_id\": \"7405953290271198491\",\n        \"effect_id\": \"7405953290271198491\",\n        \"name\": \"彩色渐变花字\",\n        \"is_vip\": True\n    },\n    \"黄绿渐变发光字\": {\n        \"resource_id\": \"7406253347746876706\",\n        \"effect_id\": \"7406253347746876706\",\n        \"name\": \"黄绿渐变发光字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变描边立体花字\": {\n        \"resource_id\": \"7383803879730842931\",\n        \"effect_id\": \"7383803879730842931\",\n        \"name\": \"黄色渐变描边立体花字\",\n        \"is_vip\": True\n    },\n    \"简约渐变花字\": {\n        \"resource_id\": \"7236638821901733175\",\n        \"effect_id\": \"7236638821901733175\",\n        \"name\": \"简约渐变花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变橙蓝色描边立体花字\": {\n        \"resource_id\": \"7505100141288901950\",\n        \"effect_id\": \"7505100141288901950\",\n        \"name\": \"黄色渐变橙蓝色描边立体花字\",\n        \"is_vip\": True\n    },\n    \"白绿紫渐变\": {\n        \"resource_id\": \"7127664822887402759\",\n        \"effect_id\": \"7127664822887402759\",\n        \"name\": \"白绿紫渐变\",\n        \"is_vip\": True\n    },\n    \"蓝绿渐变花字\": {\n        \"resource_id\": \"7391445684953681192\",\n        \"effect_id\": \"7391445684953681192\",\n        \"name\": \"蓝绿渐变花字\",\n        \"is_vip\": True\n    },\n    \"紫色立体渐变\": {\n        \"resource_id\": \"7376115629230673204\",\n        \"effect_id\": \"7376115629230673204\",\n        \"name\": \"紫色立体渐变\",\n        \"is_vip\": True\n    },\n    \"蓝色纹理发光立体花字\": {\n        \"resource_id\": \"7430709931411623204\",\n        \"effect_id\": \"7430709931411623204\",\n        \"name\": \"蓝色纹理发光立体花字\",\n        \"is_vip\": True\n    },\n    \"黄色渐变双色描边花字\": {\n        \"resource_id\": \"7265636111211449634\",\n        \"effect_id\": \"7265636111211449634\",\n        \"name\": \"黄色渐变双色描边花字\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变花字\": {\n        \"resource_id\": \"7285696655989411133\",\n        \"effect_id\": \"7285696655989411133\",\n        \"name\": \"蓝色渐变花字\",\n        \"is_vip\": True\n    },\n    \"黄绿花纹立体字\": {\n        \"resource_id\": \"7404026606869613864\",\n        \"effect_id\": \"7404026606869613864\",\n        \"name\": \"黄绿花纹立体字\",\n        \"is_vip\": True\n    },\n    \"星空梦幻炫彩立体花字\": {\n        \"resource_id\": \"7404369195875487016\",\n        \"effect_id\": \"7404369195875487016\",\n        \"name\": \"星空梦幻炫彩立体花字\",\n        \"is_vip\": True\n    },\n    \"紫色 立体 渐变 花字\": {\n        \"resource_id\": \"7527575726220987672\",\n        \"effect_id\": \"7527575726220987672\",\n        \"name\": \"紫色 立体 渐变 花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7241433848943365436\",\n        \"effect_id\": \"7241433848943365436\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"蓝字彩虹渐变描边花字\": {\n        \"resource_id\": \"7404026005389708595\",\n        \"effect_id\": \"7404026005389708595\",\n        \"name\": \"蓝字彩虹渐变描边花字\",\n        \"is_vip\": True\n    },\n    \"国风粉色渐变\": {\n        \"resource_id\": \"7406640534036532490\",\n        \"effect_id\": \"7406640534036532490\",\n        \"name\": \"国风粉色渐变\",\n        \"is_vip\": True\n    },\n    \"多色渐变花字\": {\n        \"resource_id\": \"7405867875317173516\",\n        \"effect_id\": \"7405867875317173516\",\n        \"name\": \"多色渐变花字\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变立体花字\": {\n        \"resource_id\": \"7371124565839301925\",\n        \"effect_id\": \"7371124565839301925\",\n        \"name\": \"蓝色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"渐变白色描边花字\": {\n        \"resource_id\": \"7405949704904658203\",\n        \"effect_id\": \"7405949704904658203\",\n        \"name\": \"渐变白色描边花字\",\n        \"is_vip\": True\n    },\n    \"黄色手绘蜡笔质感花字\": {\n        \"resource_id\": \"7366899343451852058\",\n        \"effect_id\": \"7366899343451852058\",\n        \"name\": \"黄色手绘蜡笔质感花字\",\n        \"is_vip\": True\n    },\n    \"3D渐变绿色立体花字\": {\n        \"resource_id\": \"7404710833344892196\",\n        \"effect_id\": \"7404710833344892196\",\n        \"name\": \"3D渐变绿色立体花字\",\n        \"is_vip\": True\n    },\n    \"简约双层描边蓝色渐变花字\": {\n        \"resource_id\": \"7497111940762995993\",\n        \"effect_id\": \"7497111940762995993\",\n        \"name\": \"简约双层描边蓝色渐变花字\",\n        \"is_vip\": True\n    },\n    \"五色花字\": {\n        \"resource_id\": \"7430992115376704819\",\n        \"effect_id\": \"7430992115376704819\",\n        \"name\": \"五色花字\",\n        \"is_vip\": True\n    },\n    \"炫彩星空花字\": {\n        \"resource_id\": \"6896143862222327047\",\n        \"effect_id\": \"6896143862222327047\",\n        \"name\": \"炫彩星空花字\",\n        \"is_vip\": True\n    },\n    \"美妆立体\": {\n        \"resource_id\": \"7482318463755734334\",\n        \"effect_id\": \"7482318463755734334\",\n        \"name\": \"美妆立体\",\n        \"is_vip\": True\n    },\n    \"忧郁蓝\": {\n        \"resource_id\": \"7481306716752219417\",\n        \"effect_id\": \"7481306716752219417\",\n        \"name\": \"忧郁蓝\",\n        \"is_vip\": True\n    },\n    \"黑底纹粉渐变描边发光花字\": {\n        \"resource_id\": \"7407010177842482459\",\n        \"effect_id\": \"7407010177842482459\",\n        \"name\": \"黑底纹粉渐变描边发光花字\",\n        \"is_vip\": True\n    },\n    \"粉色渐变镂空描边\": {\n        \"resource_id\": \"7406359623545933093\",\n        \"effect_id\": \"7406359623545933093\",\n        \"name\": \"粉色渐变镂空描边\",\n        \"is_vip\": True\n    },\n    \"金色渐变描边花字\": {\n        \"resource_id\": \"7391015553818692927\",\n        \"effect_id\": \"7391015553818692927\",\n        \"name\": \"金色渐变描边花字\",\n        \"is_vip\": True\n    },\n    \"白字花字\": {\n        \"resource_id\": \"7404038278057332005\",\n        \"effect_id\": \"7404038278057332005\",\n        \"name\": \"白字花字\",\n        \"is_vip\": True\n    },\n    \"暗色花字\": {\n        \"resource_id\": \"7249649958297783589\",\n        \"effect_id\": \"7249649958297783589\",\n        \"name\": \"暗色花字\",\n        \"is_vip\": True\n    },\n    \"双十一-彩色立体字\": {\n        \"resource_id\": \"7296106361153293618\",\n        \"effect_id\": \"7296106361153293618\",\n        \"name\": \"双十一-彩色立体字\",\n        \"is_vip\": True\n    },\n    \"天蓝色渐变花字\": {\n        \"resource_id\": \"7241433473796394255\",\n        \"effect_id\": \"7241433473796394255\",\n        \"name\": \"天蓝色渐变花字\",\n        \"is_vip\": True\n    },\n    \"红色渐变立体文字\": {\n        \"resource_id\": \"7406232498734157090\",\n        \"effect_id\": \"7406232498734157090\",\n        \"name\": \"红色渐变立体文字\",\n        \"is_vip\": True\n    },\n    \"粉色梦幻立体\": {\n        \"resource_id\": \"7404129182244031782\",\n        \"effect_id\": \"7404129182244031782\",\n        \"name\": \"粉色梦幻立体\",\n        \"is_vip\": True\n    },\n    \"粉色渐变发光花字\": {\n        \"resource_id\": \"7405578926489160998\",\n        \"effect_id\": \"7405578926489160998\",\n        \"name\": \"粉色渐变发光花字\",\n        \"is_vip\": True\n    },\n    \"彩色\": {\n        \"resource_id\": \"7369459252290718986\",\n        \"effect_id\": \"7369459252290718986\",\n        \"name\": \"彩色\",\n        \"is_vip\": True\n    },\n    \"黄色渐变粉色阴影立体花字\": {\n        \"resource_id\": \"7495776303799618878\",\n        \"effect_id\": \"7495776303799618878\",\n        \"name\": \"黄色渐变粉色阴影立体花字\",\n        \"is_vip\": True\n    },\n    \"低饱和蓝色渐变立体白边花字\": {\n        \"resource_id\": \"7388019320686693686\",\n        \"effect_id\": \"7388019320686693686\",\n        \"name\": \"低饱和蓝色渐变立体白边花字\",\n        \"is_vip\": True\n    },\n    \"绿色渐变蓝紫色描边花字\": {\n        \"resource_id\": \"7315437477425155368\",\n        \"effect_id\": \"7315437477425155368\",\n        \"name\": \"绿色渐变蓝紫色描边花字\",\n        \"is_vip\": True\n    },\n    \"粉色渐变\": {\n        \"resource_id\": \"7475023258228788505\",\n        \"effect_id\": \"7475023258228788505\",\n        \"name\": \"粉色渐变\",\n        \"is_vip\": True\n    },\n    \"红色燃烧花字\": {\n        \"resource_id\": \"7405837403782384906\",\n        \"effect_id\": \"7405837403782384906\",\n        \"name\": \"红色燃烧花字\",\n        \"is_vip\": True\n    },\n    \"春节喜庆金字红边立体花字\": {\n        \"resource_id\": \"7460547039252909337\",\n        \"effect_id\": \"7460547039252909337\",\n        \"name\": \"春节喜庆金字红边立体花字\",\n        \"is_vip\": True\n    },\n    \"斜线纹理黑白漫画感花字\": {\n        \"resource_id\": \"7405244303586397476\",\n        \"effect_id\": \"7405244303586397476\",\n        \"name\": \"斜线纹理黑白漫画感花字\",\n        \"is_vip\": True\n    },\n    \"白纸纹理蓝边拼贴花字\": {\n        \"resource_id\": \"7509039282737302808\",\n        \"effect_id\": \"7509039282737302808\",\n        \"name\": \"白纸纹理蓝边拼贴花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7545325777781280024\",\n        \"effect_id\": \"7545325777781280024\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"粉笔质感纸张花字\": {\n        \"resource_id\": \"7538694611150130457\",\n        \"effect_id\": \"7538694611150130457\",\n        \"name\": \"粉笔质感纸张花字\",\n        \"is_vip\": True\n    },\n    \"黄色立体纹理花字\": {\n        \"resource_id\": \"7405846768010661157\",\n        \"effect_id\": \"7405846768010661157\",\n        \"name\": \"黄色立体纹理花字\",\n        \"is_vip\": True\n    },\n    \"像素化花字\": {\n        \"resource_id\": \"7488161196357487934\",\n        \"effect_id\": \"7488161196357487934\",\n        \"name\": \"像素化花字\",\n        \"is_vip\": True\n    },\n    \"白色纸质纹理立体\": {\n        \"resource_id\": \"7406014922078965001\",\n        \"effect_id\": \"7406014922078965001\",\n        \"name\": \"白色纸质纹理立体\",\n        \"is_vip\": True\n    },\n    \"黄红立体字\": {\n        \"resource_id\": \"7492626374239243545\",\n        \"effect_id\": \"7492626374239243545\",\n        \"name\": \"黄红立体字\",\n        \"is_vip\": True\n    },\n    \"像素化花字\": {\n        \"resource_id\": \"7482734426015730968\",\n        \"effect_id\": \"7482734426015730968\",\n        \"name\": \"像素化花字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7480452404811615512\",\n        \"effect_id\": \"7480452404811615512\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"金属质感硬朗立体花字\": {\n        \"resource_id\": \"7405140394662530354\",\n        \"effect_id\": \"7405140394662530354\",\n        \"name\": \"金属质感硬朗立体花字\",\n        \"is_vip\": True\n    },\n    \"冰雪大世界立体雪花字\": {\n        \"resource_id\": \"7407272554445999411\",\n        \"effect_id\": \"7407272554445999411\",\n        \"name\": \"冰雪大世界立体雪花字\",\n        \"is_vip\": True\n    },\n    \"不织布新年红\": {\n        \"resource_id\": \"7449585330547625228\",\n        \"effect_id\": \"7449585330547625228\",\n        \"name\": \"不织布新年红\",\n        \"is_vip\": True\n    },\n    \"复古纸张纹理字\": {\n        \"resource_id\": \"7404377624690101544\",\n        \"effect_id\": \"7404377624690101544\",\n        \"name\": \"复古纸张纹理字\",\n        \"is_vip\": True\n    },\n    \"花字\": {\n        \"resource_id\": \"7541849024001740056\",\n        \"effect_id\": \"7541849024001740056\",\n        \"name\": \"花字\",\n        \"is_vip\": True\n    },\n    \"像素化游戏花字\": {\n        \"resource_id\": \"7482761022504275262\",\n        \"effect_id\": \"7482761022504275262\",\n        \"name\": \"像素化游戏花字\",\n        \"is_vip\": True\n    },\n    \"未来科技感赛博斜体字\": {\n        \"resource_id\": \"7405126783332404517\",\n        \"effect_id\": \"7405126783332404517\",\n        \"name\": \"未来科技感赛博斜体字\",\n        \"is_vip\": True\n    },\n    \"复古格纹立体花字\": {\n        \"resource_id\": \"7406192655488519433\",\n        \"effect_id\": \"7406192655488519433\",\n        \"name\": \"复古格纹立体花字\",\n        \"is_vip\": True\n    },\n    \"清爽冰块纹理字\": {\n        \"resource_id\": \"7405853759911333172\",\n        \"effect_id\": \"7405853759911333172\",\n        \"name\": \"清爽冰块纹理字\",\n        \"is_vip\": True\n    },\n    \"绿叶绿色纹理花字\": {\n        \"resource_id\": \"7435107467366878503\",\n        \"effect_id\": \"7435107467366878503\",\n        \"name\": \"绿叶绿色纹理花字\",\n        \"is_vip\": True\n    },\n    \"港风图案纹理花字\": {\n        \"resource_id\": \"7451442109753675070\",\n        \"effect_id\": \"7451442109753675070\",\n        \"name\": \"港风图案纹理花字\",\n        \"is_vip\": True\n    },\n    \"冰块立体字\": {\n        \"resource_id\": \"7405824092479196431\",\n        \"effect_id\": \"7405824092479196431\",\n        \"name\": \"冰块立体字\",\n        \"is_vip\": True\n    },\n    \"蓝色星空花字\": {\n        \"resource_id\": \"7405857800208928037\",\n        \"effect_id\": \"7405857800208928037\",\n        \"name\": \"蓝色星空花字\",\n        \"is_vip\": True\n    },\n    \"红色纹理立体花字\": {\n        \"resource_id\": \"7405855842072808755\",\n        \"effect_id\": \"7405855842072808755\",\n        \"name\": \"红色纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"复古红轴\": {\n        \"resource_id\": \"7483893116274117950\",\n        \"effect_id\": \"7483893116274117950\",\n        \"name\": \"复古红轴\",\n        \"is_vip\": True\n    },\n    \"红黄质感立体花字\": {\n        \"resource_id\": \"7481535145284160792\",\n        \"effect_id\": \"7481535145284160792\",\n        \"name\": \"红黄质感立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝紫色发光纹理花字\": {\n        \"resource_id\": \"7405843250960993586\",\n        \"effect_id\": \"7405843250960993586\",\n        \"name\": \"蓝紫色发光纹理花字\",\n        \"is_vip\": True\n    },\n    \"牛奶花字\": {\n        \"resource_id\": \"7532883438072778008\",\n        \"effect_id\": \"7532883438072778008\",\n        \"name\": \"牛奶花字\",\n        \"is_vip\": True\n    },\n    \"木纹雕刻立体字\": {\n        \"resource_id\": \"7405870250916384015\",\n        \"effect_id\": \"7405870250916384015\",\n        \"name\": \"木纹雕刻立体字\",\n        \"is_vip\": True\n    },\n    \"像素化花字\": {\n        \"resource_id\": \"7486311409861528894\",\n        \"effect_id\": \"7486311409861528894\",\n        \"name\": \"像素化花字\",\n        \"is_vip\": True\n    },\n    \"粉笔黑板花字（教师节）\": {\n        \"resource_id\": \"7405550386234281235\",\n        \"effect_id\": \"7405550386234281235\",\n        \"name\": \"粉笔黑板花字（教师节）\",\n        \"is_vip\": True\n    },\n    \"梦幻爱心纹理底花字\": {\n        \"resource_id\": \"7330983004631878964\",\n        \"effect_id\": \"7330983004631878964\",\n        \"name\": \"梦幻爱心纹理底花字\",\n        \"is_vip\": True\n    },\n    \"流光立体花字\": {\n        \"resource_id\": \"7405693659536051492\",\n        \"effect_id\": \"7405693659536051492\",\n        \"name\": \"流光立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变DIY纹理立体花字\": {\n        \"resource_id\": \"7371332005948083494\",\n        \"effect_id\": \"7371332005948083494\",\n        \"name\": \"蓝色渐变DIY纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"冬日冰花\": {\n        \"resource_id\": \"7407265065272937778\",\n        \"effect_id\": \"7407265065272937778\",\n        \"name\": \"冬日冰花\",\n        \"is_vip\": True\n    },\n    \"红色黑条纹字\": {\n        \"resource_id\": \"7406984542742924582\",\n        \"effect_id\": \"7406984542742924582\",\n        \"name\": \"红色黑条纹字\",\n        \"is_vip\": True\n    },\n    \"蓝色天空纹理立体花字\": {\n        \"resource_id\": \"7406190866626366770\",\n        \"effect_id\": \"7406190866626366770\",\n        \"name\": \"蓝色天空纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"荧光紫渐变字\": {\n        \"resource_id\": \"7404383053906267392\",\n        \"effect_id\": \"7404383053906267392\",\n        \"name\": \"荧光紫渐变字\",\n        \"is_vip\": True\n    },\n    \"红色洒墨花字（书法古风）\": {\n        \"resource_id\": \"7405523650423639308\",\n        \"effect_id\": \"7405523650423639308\",\n        \"name\": \"红色洒墨花字（书法古风）\",\n        \"is_vip\": True\n    },\n    \"蓝色渐变立体描边花字\": {\n        \"resource_id\": \"7405919974411242791\",\n        \"effect_id\": \"7405919974411242791\",\n        \"name\": \"蓝色渐变立体描边花字\",\n        \"is_vip\": True\n    },\n    \"圣诞-四色纹理\": {\n        \"resource_id\": \"7306473747953863975\",\n        \"effect_id\": \"7306473747953863975\",\n        \"name\": \"圣诞-四色纹理\",\n        \"is_vip\": True\n    },\n    \"渐变纹理花字\": {\n        \"resource_id\": \"7506817303296675123\",\n        \"effect_id\": \"7506817303296675123\",\n        \"name\": \"渐变纹理花字\",\n        \"is_vip\": True\n    },\n    \"游戏像素化花字\": {\n        \"resource_id\": \"7486231125992623385\",\n        \"effect_id\": \"7486231125992623385\",\n        \"name\": \"游戏像素化花字\",\n        \"is_vip\": True\n    },\n    \"花石榴\": {\n        \"resource_id\": \"7471979945447836952\",\n        \"effect_id\": \"7471979945447836952\",\n        \"name\": \"花石榴\",\n        \"is_vip\": True\n    },\n    \"紫色纹理描边立体花字\": {\n        \"resource_id\": \"7405866412570348836\",\n        \"effect_id\": \"7405866412570348836\",\n        \"name\": \"紫色纹理描边立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝色毛毡绒毛立体花字\": {\n        \"resource_id\": \"7404145370399329587\",\n        \"effect_id\": \"7404145370399329587\",\n        \"name\": \"蓝色毛毡绒毛立体花字\",\n        \"is_vip\": True\n    },\n    \"紫色纹理立体发光花字\": {\n        \"resource_id\": \"7430717597039054143\",\n        \"effect_id\": \"7430717597039054143\",\n        \"name\": \"紫色纹理立体发光花字\",\n        \"is_vip\": True\n    },\n    \"粉笔蓝白色立体花字\": {\n        \"resource_id\": \"7405201103903624463\",\n        \"effect_id\": \"7405201103903624463\",\n        \"name\": \"粉笔蓝白色立体花字\",\n        \"is_vip\": True\n    },\n    \"绿粉圈圈纹理综艺花字\": {\n        \"resource_id\": \"7546407203654159678\",\n        \"effect_id\": \"7546407203654159678\",\n        \"name\": \"绿粉圈圈纹理综艺花字\",\n        \"is_vip\": True\n    },\n    \"红色棋盘格纹理立体花字\": {\n        \"resource_id\": \"7405573811107663155\",\n        \"effect_id\": \"7405573811107663155\",\n        \"name\": \"红色棋盘格纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"方块游戏花字\": {\n        \"resource_id\": \"7477911542575516952\",\n        \"effect_id\": \"7477911542575516952\",\n        \"name\": \"方块游戏花字\",\n        \"is_vip\": True\n    },\n    \"彩色纹理花字\": {\n        \"resource_id\": \"7406205168200568115\",\n        \"effect_id\": \"7406205168200568115\",\n        \"name\": \"彩色纹理花字\",\n        \"is_vip\": True\n    },\n    \"绿色粉笔描边花字\": {\n        \"resource_id\": \"7405201692775451904\",\n        \"effect_id\": \"7405201692775451904\",\n        \"name\": \"绿色粉笔描边花字\",\n        \"is_vip\": True\n    },\n    \"3D蓝粉色渐变立体花字\": {\n        \"resource_id\": \"7406173713428745509\",\n        \"effect_id\": \"7406173713428745509\",\n        \"name\": \"3D蓝粉色渐变立体花字\",\n        \"is_vip\": True\n    },\n    \"红砖纹理立体花字\": {\n        \"resource_id\": \"7405864219809287433\",\n        \"effect_id\": \"7405864219809287433\",\n        \"name\": \"红砖纹理立体花字\",\n        \"is_vip\": True\n    },\n    \"蓝黄拼色立体花字\": {\n        \"resource_id\": \"7405917544126647602\",\n        \"effect_id\": \"7405917544126647602\",\n        \"name\": \"蓝黄拼色立体花字\",\n        \"is_vip\": True\n    },\n    \"红色花字\": {\n        \"resource_id\": \"7481938079507418430\",\n        \"effect_id\": \"7481938079507418430\",\n        \"name\": \"红色花字\",\n        \"is_vip\": True\n    }\n}"
  },
  {
    "path": "src/service/timelines.py",
    "content": "from src.utils.logger import logger\nfrom typing import List, Dict, Tuple\n\n\ndef timelines(duration: int, num: int, start: int, type: int) -> Tuple[List[Dict[str, int]], List[Dict[str, int]]]:\n    \"\"\"\n    计算时间线分割点\n    \n    Args:\n        duration: 总时长\n        num: 分割段数\n        start: 开始时间\n        type: 分割类型 (0: 平均分, 1: 随机)\n    \n    Returns:\n        tuple: (timelines, all_timelines)\n    \"\"\"\n    logger.info(f\"timelines, duration: {duration}, num: {num}, start: {start}, type: {type}\")\n    \n    timelines = []\n    all_timelines = [{\"start\": start, \"end\": start + duration}]\n    \n    if num <= 0:\n        return [], all_timelines\n        \n    if type == 0:  # 平均分\n        segment_duration = duration // num\n        for i in range(num):\n            seg_start = start + i * segment_duration\n            seg_end = start + (i + 1) * segment_duration if i < num - 1 else start + duration\n            timelines.append({\"start\": seg_start, \"end\": seg_end})\n    else:  # 随机分 (简化实现，实际可能需要更复杂的随机算法)\n        import random\n        random.seed(42)  # 固定种子以便测试\n        points = sorted([random.randint(start, start + duration) for _ in range(num - 1)])\n        points = [start] + points + [start + duration]\n        for i in range(len(points) - 1):\n            timelines.append({\"start\": points[i], \"end\": points[i + 1]})\n            \n    return timelines, all_timelines\n"
  },
  {
    "path": "src/service/video_infos.py",
    "content": "from src.utils.logger import logger\nimport json\nfrom typing import List, Optional, Dict, Any\n\n\ndef video_infos(\n    video_urls: List[str],\n    timelines: List[Dict[str, int]],\n    height: Optional[int] = None,\n    width: Optional[int] = None,\n    mask: Optional[str] = None,\n    transition: Optional[str] = None,\n    transition_duration: Optional[int] = None,\n    volume: float = 1.0\n) -> str:\n    \"\"\"\n    根据视频URL和时间线生成视频信息JSON字符串\n    \n    Args:\n        video_urls: 视频URL列表\n        timelines: 时间线数组\n        height: 视频高（可选）\n        width: 视频宽（可选）\n        mask: 视频蒙版（可选）\n        transition: 转场名称（可选）\n        transition_duration: 转场时长（可选）\n        volume: 音量大小，默认1.0\n        \n    Returns:\n        str: JSON字符串格式的视频信息\n        \n    Raises:\n        无异常抛出，长度不匹配时以最短的为准\n    \"\"\"\n    logger.info(f\"video_infos called with {len(video_urls)} videos and {len(timelines)} timelines\")\n    \n    # 长度不相等时以最短的为准\n    if len(video_urls) != len(timelines):\n        min_len = min(len(video_urls), len(timelines))\n        logger.warning(f\"video_urls length ({len(video_urls)}) does not match timelines length ({len(timelines)}), using shorter length: {min_len}\")\n        video_urls = video_urls[:min_len]\n        timelines = timelines[:min_len]\n    \n    # 构建视频信息列表\n    infos = []\n    for i, (video_url, timeline) in enumerate(zip(video_urls, timelines)):\n        start = timeline[\"start\"]\n        end = timeline[\"end\"]\n        duration = end - start\n        \n        info = {\n            \"video_url\": video_url,\n            \"start\": start,\n            \"end\": end,\n            \"duration\": duration\n        }\n        \n        # 添加可选参数\n        if width is not None:\n            info[\"width\"] = width\n            \n        if height is not None:\n            info[\"height\"] = height\n            \n        if mask is not None:\n            info[\"mask\"] = mask\n            \n        if transition is not None:\n            info[\"transition\"] = transition\n            \n        if transition_duration is not None:\n            info[\"transition_duration\"] = transition_duration\n            \n        if volume is not None:\n            info[\"volume\"] = volume\n            \n        infos.append(info)\n        logger.info(f\"Processed video info {i+1}: {info}\")\n    \n    # 转换为JSON字符串\n    infos_json = json.dumps(infos, ensure_ascii=False)\n    logger.info(f\"Generated video infos JSON with {len(infos)} items\")\n    \n    return infos_json"
  },
  {
    "path": "src/utils/__init__.py",
    "content": "# 工具实现\nfrom .media import get_media_duration, get_media_duration_formatted\n\n__all__ = ['get_media_duration', 'get_media_duration_formatted']"
  },
  {
    "path": "src/utils/cos.py",
    "content": "# 实现腾讯云对象存储（COS）的上传功能\nimport os\nimport time\nimport datetime\nfrom typing import Optional\nimport config\nfrom qcloud_cos import CosConfig\nfrom qcloud_cos import CosS3Client\nfrom src.utils.logger import logger\nfrom src.utils.storage_upload_retry import run_with_storage_retry\nfrom exceptions import CustomException, CustomError\n\n\ndef cos_upload_file(file_path: str, expire_days: Optional[int] = None) -> str:\n    \"\"\"\n    上传文件到COS，返回带签名的临时URL，链接在指定天数后失效（见 config.VIDEO_GEN_RETENTION_DAYS）。\n\n    Args:\n        file_path: 文件路径\n        expire_days: URL 有效期天数；为 None 时使用 config.VIDEO_GEN_RETENTION_DAYS（视频生成任务默认）\n\n    Returns:\n        str: 带签名的临时下载URL（有效期为 expire_days 天）\n\n    Raises:\n        CustomException: 上传失败\n    \"\"\"\n    if expire_days is None:\n        expire_days = config.VIDEO_GEN_RETENTION_DAYS\n\n    now = datetime.datetime.now()\n    current_date = now.strftime(\"%Y-%m-%d\")\n    current_hour = now.strftime(\"%H\")\n    filename = os.path.basename(file_path)\n    key = f\"{current_date}/{current_hour}/{filename}\"\n\n    cfg = CosConfig(\n        Region=config.COS_REGION,\n        SecretId=config.COS_SECRET_ID,\n        SecretKey=config.COS_SECRET_KEY,\n        Token=None\n    )\n\n    def do_upload() -> str:\n        # SDK 内 retry；业务层在 storage_upload_retry 中再套一层\n        cli = CosS3Client(cfg, retry=5)\n        expire_time = datetime.datetime.now() + datetime.timedelta(days=expire_days)\n        expire_time_str = expire_time.strftime(\"%Y-%m-%dT%H:%M:%S.000Z\")\n\n        response = cli.upload_file(\n            Bucket=config.COS_BUCKET_NAME,\n            Key=key,\n            LocalFilePath=file_path\n        )\n        logger.info(f\"COS upload success, key: {key}, expire time: {expire_time_str}, response: {response}\")\n\n        signed_url = cli.get_presigned_url(\n            Method='GET',\n            Bucket=config.COS_BUCKET_NAME,\n            Key=key,\n            Expired=expire_days * 24 * 3600\n        )\n        logger.info(f\"Generated COS signed URL valid for {expire_days} day(s), URL: {signed_url[:100]}...\")\n        return signed_url\n\n    _t0 = time.perf_counter()\n    success = False\n    try:\n        result = run_with_storage_retry(do_upload, context=\"COS\")\n        success = True\n        return result\n    except Exception as e:\n        logger.error(f\"COS upload failed: {e}\")\n        raise CustomException(CustomError.INTERNAL_SERVER_ERROR, \"COS upload failed\")\n    finally:\n        elapsed = time.perf_counter() - _t0\n        logger.info(\n            \"COS upload %s, file=%s, key=%s, total_duration_sec=%.3f\",\n            \"success\" if success else \"failed\",\n            file_path,\n            key,\n            elapsed,\n        )\n"
  },
  {
    "path": "src/utils/download.py",
    "content": "import os\nimport requests\nimport mimetypes\nimport time\nfrom typing import Dict, Any, Optional\nfrom src.utils import helper\nfrom src.utils.logger import logger\nfrom exceptions import CustomException, CustomError\nimport config\n\n# 常量配置\nDEFAULT_FILE_SIZE_LIMIT = config.DOWNLOAD_FILE_SIZE_LIMIT  # 文件下载大小限制，默认200MB，可通过环境变量DOWNLOAD_FILE_SIZE_LIMIT配置\nDEFAULT_DOWNLOAD_TIMEOUT = 90  # 总下载超时时间90秒（用户要求）\nDEFAULT_CONNECT_TIMEOUT = 10  # 连接超时10秒，快速失败\nDEFAULT_READ_TIMEOUT = 15  # 读取超时15秒，平衡稳定性和速度\nDEFAULT_API_TIMEOUT = 30  # 30秒\nDEFAULT_FFPROBE_TIMEOUT = 30  # 30秒\nDEFAULT_RETRY_COUNT = 3  # 重试次数改为3次，在90秒内完成\nCHUNK_SIZE = 32768  # 32KB，增加块大小提高效率\nCHUNK_READ_TIMEOUT = 10  # 每个块的读取超时10秒，快速检测网络中断\nCONNECTION_RETRY_DELAY = 1  # 连接重试间隔时间（秒）\nMAX_RETRY_DELAY = 8  # 最大重试等待时间8秒，控制总时间\nMIN_PARTIAL_SIZE = 1024  # 最小部分下载大小（字节），小于此尺寸不使用断点续传\n\n# 网络质量评估阈值\nNETWORK_GOOD_THRESHOLD = 0.5  # 0.5秒内响应认为网络良好\nNETWORK_MEDIUM_THRESHOLD = 2.0  # 2秒内响应认为网络中等\n\n# HTTP连接池配置\nCONNECTION_POOL_SIZE = 3  # 连接池大小\nCONNECTION_POOL_MAXSIZE = 5  # 连接池最大连接数\n\n# HTTP请求头（优化网络稳定性）\nDOWNLOAD_HEADERS = {\n    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',\n    'Accept': '*/*',\n    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',\n    'Accept-Encoding': 'gzip, deflate',  # 支持压缩提高传输效率\n    'Connection': 'keep-alive',  # 保持连接\n    'Cache-Control': 'no-cache',  # 不使用缓存\n    'Pragma': 'no-cache',  # 兼容性缓存控制\n    'Keep-Alive': 'timeout=30, max=3'  # Keep-Alive配置\n}\n\ndef download(url: str, save_dir: str, limit: int = DEFAULT_FILE_SIZE_LIMIT, \n            timeout: int = DEFAULT_DOWNLOAD_TIMEOUT, retry: int = DEFAULT_RETRY_COUNT) -> str:\n    \"\"\"\n    下载文件并根据Content-Type判断文件类型，支持高度稳定的断点续传和智能重试机制\n    \n    Args:\n        url: 文件的URL地址\n        save_dir: 文件保存目录\n        limit: 文件大小限制（字节），默认300MB\n        timeout: 整体下载超时时间（秒），默认5分钟\n        retry: 下载失败时的重试次数，默认5次\n    \n    Returns:\n        str: 完整的文件路径\n\n    Raises:\n        CustomException: 下载失败时抛出异常\n    \"\"\"\n    # 兼容 Pydantic HttpUrl 等类型，避免切片/解析时下标报错\n    url = str(url)\n    # 初始化下载环境\n    download_context = _prepare_download_context(url, save_dir, timeout)\n    \n    # 执行带重试的下载流程\n    return _execute_download_with_retry(download_context, limit, retry)\n\ndef cleanup_temp_file(temp_file_path: Optional[str]) -> None:\n    \"\"\"\n    清理临时文件\n    \n    Args:\n        temp_file_path: 临时文件路径，可能为None\n    \"\"\"\n    if temp_file_path and os.path.exists(temp_file_path):\n        try:\n            os.remove(temp_file_path)\n            logger.info(f\"Temporary file removed: {temp_file_path}\")\n        except Exception as cleanup_error:\n            logger.warning(f\"Failed to cleanup temporary file {temp_file_path}: {cleanup_error}\")\n\ndef _prepare_download_context(url: str, save_dir: str, timeout: int) -> dict:\n    \"\"\"\n    准备下载上下文信息\n    \n    Args:\n        url: 文件URL\n        save_dir: 保存目录\n        timeout: 超时时间\n    \n    Returns:\n        dict: 下载上下文字典\n    \"\"\"\n    # 生成唯一的文件路径\n    base_filename = helper.gen_unique_id()\n    temp_save_path = os.path.join(save_dir, base_filename)\n    \n    # 评估网络环境\n    network_quality = _assess_network_quality(url)\n    supports_range = _check_range_support_with_retry(url)\n    \n    logger.info(f\"Preparing download environment - Network quality: {network_quality}, Range support: {supports_range}, URL: {url}\")\n    \n    # 计算自适应超时参数\n    adaptive_timeouts = _calculate_adaptive_timeouts(network_quality, timeout)\n    \n    return {\n        'url': url,\n        'save_path': temp_save_path,\n        'network_quality': network_quality,\n        'supports_range': supports_range,\n        'timeouts': adaptive_timeouts\n    }\n\n\ndef _execute_download_with_retry(context: dict, limit: int, retry: int) -> str:\n    \"\"\"\n    执行带重试机制的下载流程\n    \n    Args:\n        context: 下载上下文\n        limit: 文件大小限制\n        retry: 重试次数\n    \n    Returns:\n        str: 下载成功的文件路径\n        \n    Raises:\n        CustomException: 下载失败时抛出异常\n    \"\"\"\n    url = context['url']\n    temp_save_path = context['save_path']\n    supports_range = context['supports_range']\n    timeouts = context['timeouts']\n    \n    last_exception = None\n    consecutive_failures = 0  # 连续失败计数器\n    \n    for attempt in range(retry + 1):  # 总共尝试 retry + 1 次\n        response = None\n        try:\n            logger.info(f\"Starting download attempt {attempt + 1}/{retry + 1}, URL: {url}\")\n            \n            # 检查断点续传条件\n            resume_info = _check_resume_conditions(temp_save_path, supports_range, \n                                                 attempt, consecutive_failures)\n            \n            # 执行单次下载\n            response = _execute_single_download(url, resume_info, timeouts)\n            \n            # 确定最终文件路径（首次下载时添加扩展名）\n            if resume_info['existing_size'] == 0:\n                temp_save_path = _determine_file_path_with_extension(response, temp_save_path)\n                context['save_path'] = temp_save_path\n            \n            # 下载文件内容\n            _download_file_with_enhanced_stability(\n                response, temp_save_path, limit, url, timeouts, \n                resume_info['existing_size'], resume_info['use_resume']\n            )\n            \n            # 验证下载完整性\n            _validate_download_integrity_with_resume(response, temp_save_path, \n                                                   url, resume_info['use_resume'])\n            \n            logger.info(f\"Download completed successfully, attempts: {attempt + 1}, file path: {temp_save_path}\")\n            return temp_save_path\n            \n        except Exception as e:\n            last_exception = e\n            consecutive_failures += 1\n            \n            # 处理下载异常\n            if not _handle_download_exception(e, attempt, retry, temp_save_path, \n                                            supports_range, consecutive_failures, context):\n                break  # 致命错误，停止重试\n        finally:\n            # 统一关闭 response/session，避免连接资源滞留\n            if response is not None:\n                try:\n                    response.close()\n                except Exception:\n                    pass\n                session = getattr(response, \"_capcut_session\", None)\n                if session is not None:\n                    try:\n                        session.close()\n                    except Exception:\n                        pass\n    \n    # 所有重试都失败，抛出异常\n    return _handle_final_failure(last_exception, url)\n\n\ndef _check_resume_conditions(save_path: str, supports_range: bool, \n                           attempt: int, consecutive_failures: int) -> dict:\n    \"\"\"\n    检查断点续传条件\n    \n    Args:\n        save_path: 保存路径\n        supports_range: 是否支持范围请求\n        attempt: 当前尝试次数\n        consecutive_failures: 连续失败次数\n    \n    Returns:\n        dict: 断点续传信息字典\n    \"\"\"\n    existing_size = 0\n    if os.path.exists(save_path):\n        existing_size = os.path.getsize(save_path)\n        logger.info(f\"Found existing partial file: {save_path}, size: {existing_size} bytes\")\n    \n    # 判断是否使用断点续传（增强条件判断）\n    use_resume = (\n        supports_range and \n        existing_size >= MIN_PARTIAL_SIZE and \n        attempt > 0 and\n        consecutive_failures <= 2  # 连续失败不超过2次才使用断点续传\n    )\n    \n    return {\n        'existing_size': existing_size,\n        'use_resume': use_resume\n    }\n\n\ndef _execute_single_download(url: str, resume_info: dict, timeouts: dict) -> requests.Response:\n    \"\"\"\n    执行单次下载操作\n    \n    Args:\n        url: 文件URL\n        resume_info: 断点续传信息\n        timeouts: 超时配置\n    \n    Returns:\n        requests.Response: HTTP响应对象\n    \"\"\"\n    if resume_info['use_resume']:\n        logger.info(f\"Using resume download from byte {resume_info['existing_size']}\")\n        return _download_with_resume_enhanced(url, resume_info['existing_size'], timeouts)\n    else:\n        logger.info(\"Starting fresh download\")\n        return _download_fresh_enhanced(url, timeouts)\n\n\ndef _handle_download_exception(exception: Exception, attempt: int, retry: int, \n                             save_path: str, supports_range: bool, \n                             consecutive_failures: int, context: dict) -> bool:\n    \"\"\"\n    处理下载异常\n    \n    Args:\n        exception: 异常对象\n        attempt: 当前尝试次数\n        retry: 总重试次数\n        save_path: 保存路径\n        supports_range: 是否支持范围请求\n        consecutive_failures: 连续失败次数\n        context: 下载上下文\n    \n    Returns:\n        bool: True表示可以继续重试，False表示应该停止\n    \"\"\"\n    url = context['url']\n    \n    # 错误分类\n    error_category = _classify_download_error(exception)\n    \n    # 致命错误直接停止\n    if error_category == 'fatal':\n        if os.path.exists(save_path):\n            _safe_remove_file(save_path)\n        logger.error(f\"Fatal error encountered, stopping retry, URL: {url}, error: {str(exception)}\")\n        raise exception\n    \n    # 非最后一次尝试，继续重试\n    if attempt < retry:\n        logger.warning(f\"Download attempt {attempt + 1} failed, URL: {url}, error: {str(exception)}, category: {error_category}\")\n        \n        # 决定是否清理文件\n        should_cleanup = _should_cleanup_on_error(error_category, supports_range, consecutive_failures)\n        if should_cleanup and os.path.exists(save_path):\n            _safe_remove_file(save_path)\n            logger.debug(f\"Cleaned up partial download file: {save_path}\")\n        \n        # 执行重试等待\n        _execute_retry_wait(attempt, error_category, consecutive_failures, context)\n        return True\n    else:\n        logger.error(f\"All retry attempts failed, URL: {url}, final error: {str(exception)}\")\n        if os.path.exists(save_path):\n            _safe_remove_file(save_path)\n        return False\n\n\ndef _execute_retry_wait(attempt: int, error_category: str, consecutive_failures: int, context: dict) -> None:\n    \"\"\"\n    执行重试等待逻辑\n    \n    Args:\n        attempt: 当前尝试次数\n        error_category: 错误类型\n        consecutive_failures: 连续失败次数\n        context: 下载上下文\n    \"\"\"\n    # 计算等待时间\n    wait_time = _calculate_retry_delay(attempt, error_category, consecutive_failures)\n    logger.info(f\"Waiting {wait_time} seconds before retry...\")\n    time.sleep(wait_time)\n    \n    # 网络错误后重新评估网络质量\n    if error_category == 'network':\n        url = context['url']\n        network_quality = _assess_network_quality(url)\n        context['timeouts'] = _calculate_adaptive_timeouts(network_quality, \n                                                          context['timeouts']['total_timeout'])\n        logger.info(f\"Re-assessed network quality: {network_quality}\")\n\n\ndef _handle_final_failure(last_exception: Optional[Exception], url: str) -> str:\n    \"\"\"\n    处理最终失败情况\n    \n    Args:\n        last_exception: 最后一次异常（可能为None）\n        url: 文件URL\n    \n    Raises:\n        CustomException: 总是抛出异常\n    \"\"\"\n    if last_exception and isinstance(last_exception, CustomException):\n        raise last_exception\n    \n    error_detail = str(last_exception) if last_exception else \"Unknown error\"\n    logger.error(f\"All retries failed, URL: {url}, last error: {error_detail}\")\n    raise CustomException(CustomError.DOWNLOAD_FILE_FAILED)\n\n\ndef _determine_file_path_with_extension(response: requests.Response, save_path: str) -> str:\n    \"\"\"\n    根据HTTP响应的Content-Type确定文件路径和扩展名\n    \n    Args:\n        response: HTTP响应对象\n        save_path: 原始保存路径\n    \n    Returns:\n        str: 带扩展名的文件路径\n    \"\"\"\n    content_type = response.headers.get('Content-Type', '').split(';')[0].strip()\n    extension = mimetypes.guess_extension(content_type)\n    \n    if extension:\n        return save_path + extension\n    return save_path\n\ndef _parse_api_response(response: requests.Response) -> Dict[str, Any]:\n    \"\"\"\n    解析API响应的JSON数据\n    \n    Args:\n        response: HTTP响应对象\n    \n    Returns:\n        Dict[str, Any]: 解析后的JSON数据\n    \n    Raises:\n        CustomException: JSON解析失败时\n    \"\"\"\n    try:\n        return response.json()\n    except ValueError:\n        logger.error(f\"Failed to parse API response as JSON: {response.text}\")\n        raise CustomException(CustomError.INTERNAL_SERVER_ERROR, detail=\"API response format error\")\n\ndef _validate_download_integrity_with_resume(\n    response: requests.Response, \n    save_path: str, \n    url: str, \n    is_resume: bool = False\n) -> None:\n    \"\"\"\n    验证下载文件的完整性（支持断点续传）\n    \n    Args:\n        response: HTTP响应对象\n        save_path: 文件保存路径\n        url: 文件URL（用于日志）\n        is_resume: 是否为断点续传\n    \n    Raises:\n        CustomException: 文件不完整时抛出\n    \"\"\"\n    actual_size = os.path.getsize(save_path)\n    \n    if is_resume:\n        # 断点续传时，检查Content-Range头\n        content_range = response.headers.get('Content-Range')\n        if content_range:\n            # Content-Range: bytes 1024-2047/2048\n            try:\n                range_info = content_range.split('/')[-1]\n                if range_info != '*':\n                    expected_total_size = int(range_info)\n                    if actual_size != expected_total_size:\n                        os.remove(save_path)\n                        logger.warning(\n                            f\"Resume download failed, url: {url}, \"\n                            f\"error: File download incomplete: expected {expected_total_size} bytes, \"\n                            f\"actual {actual_size} bytes\"\n                        )\n                        raise CustomException(CustomError.DOWNLOAD_FILE_FAILED)\n            except (ValueError, IndexError) as e:\n                logger.warning(f\"Failed to parse Content-Range header: {content_range}, error: {e}\")\n    else:\n        # 全新下载时，检查Content-Length头\n        content_length = response.headers.get('Content-Length')\n        if content_length:\n            expected_size = int(content_length)\n            if actual_size != expected_size:\n                os.remove(save_path)\n                logger.warning(\n                    f\"Download failed, url: {url}, \"\n                    f\"error: File download incomplete: expected {expected_size} bytes, \"\n                    f\"actual {actual_size} bytes\"\n                )\n                raise CustomException(CustomError.DOWNLOAD_FILE_FAILED)\n\n\ndef _safe_remove_file(file_path: str) -> None:\n    \"\"\"\n    安全删除文件，忽略删除错误\n    \n    Args:\n        file_path: 要删除的文件路径\n    \"\"\"\n    try:\n        if os.path.exists(file_path):\n            os.remove(file_path)\n            logger.debug(f\"Successfully removed file: {file_path}\")\n    except Exception as e:\n        logger.warning(f\"Failed to remove file {file_path}: {e}\")\n\n\ndef _assess_network_quality(url: str) -> str:\n    \"\"\"\n    评估网络质量（优化版）\n    \n    Args:\n        url: 测试URL\n    \n    Returns:\n        str: 网络质量 ('good', 'medium', 'poor')\n    \"\"\"\n    response = None\n    try:\n        # 兼容 pydantic HttpUrl 等对象，避免出现 decode 属性错误\n        url = str(url)\n        import urllib.parse\n        parsed_url = urllib.parse.urlparse(url)\n        test_url = f\"{parsed_url.scheme}://{parsed_url.netloc}\"\n        \n        start_time = time.time()\n        # 使用较短的超时时间快速测试\n        response = requests.head(\n            test_url,\n            timeout=(3, 5),  # 更短的超时测试\n            headers={'User-Agent': DOWNLOAD_HEADERS['User-Agent']},\n            allow_redirects=True\n        )\n        response_time = time.time() - start_time\n        \n        # 根据响应时间判断网络质量\n        if response_time < NETWORK_GOOD_THRESHOLD:\n            logger.debug(f\"Network quality: good ({response_time:.2f}s)\")\n            return 'good'\n        elif response_time < NETWORK_MEDIUM_THRESHOLD:\n            logger.debug(f\"Network quality: medium ({response_time:.2f}s)\")\n            return 'medium'\n        else:\n            logger.debug(f\"Network quality: poor ({response_time:.2f}s)\")\n            return 'poor'\n            \n    except Exception as e:\n        logger.info(f\"Failed to assess network quality, fallback to poor: {e}\")\n        return 'poor'  # 默认为较差的网络环境\n    finally:\n        if response is not None:\n            try:\n                response.close()\n            except Exception:\n                pass\n\n\ndef _check_range_support_with_retry(url: str, max_retries: int = 2) -> bool:\n    \"\"\"\n    带重试的范围请求支持检测\n    \n    某些服务器（如Pixabay CDN）对HEAD请求返回403，但对GET请求正常响应。\n    当HEAD请求失败时，尝试使用GET请求检测Range支持。\n    \n    Args:\n        url: 文件URL\n        max_retries: 最大重试次数\n    \n    Returns:\n        bool: 是否支持Range请求\n    \"\"\"\n    url = str(url)\n    # 首先尝试HEAD请求\n    for attempt in range(max_retries + 1):\n        response = None\n        try:\n            response = requests.head(\n                url, \n                timeout=(DEFAULT_CONNECT_TIMEOUT, DEFAULT_READ_TIMEOUT),\n                headers=DOWNLOAD_HEADERS\n            )\n            response.raise_for_status()\n            \n            accept_ranges = response.headers.get('Accept-Ranges', '').lower()\n            supports_ranges = accept_ranges == 'bytes'\n            \n            logger.info(f\"Range support check (HEAD) attempt {attempt + 1}: Accept-Ranges={accept_ranges}, supports={supports_ranges}\")\n            return supports_ranges\n            \n        except Exception as e:\n            if attempt < max_retries:\n                logger.info(f\"Range support check (HEAD) attempt {attempt + 1} failed: {e}, retrying...\")\n                time.sleep(1)\n            else:\n                logger.info(f\"HEAD request failed after {max_retries + 1} attempts: {e}, trying GET request...\")\n        finally:\n            if response is not None:\n                try:\n                    response.close()\n                except Exception:\n                    pass\n    \n    # HEAD请求失败，尝试使用GET请求检测（只读取响应头，不下载内容）\n    session = None\n    response = None\n    try:\n        session = _create_optimized_session()\n        session.headers.update(DOWNLOAD_HEADERS)\n        # 使用Range请求测试服务器是否支持断点续传\n        headers = DOWNLOAD_HEADERS.copy()\n        headers['Range'] = 'bytes=0-0'\n        \n        response = session.get(\n            url,\n            headers=headers,\n            stream=True,\n            timeout=(DEFAULT_CONNECT_TIMEOUT, DEFAULT_READ_TIMEOUT)\n        )\n        \n        # 如果返回206 Partial Content，说明支持Range请求\n        if response.status_code == 206:\n            logger.info(\"Range support check (GET): Server supports Range requests (status 206)\")\n            return True\n        elif response.status_code == 200:\n            # 返回200说明服务器忽略Range头，不支持断点续传\n            logger.info(\"Range support check (GET): Server does not support Range requests (status 200)\")\n            return False\n        else:\n            response.raise_for_status()\n            \n    except Exception as e:\n        logger.info(f\"Range support check (GET) failed: {e}, assuming no range support\")\n        return False\n    finally:\n        if response is not None:\n            try:\n                response.close()\n            except Exception:\n                pass\n        if session is not None:\n            try:\n                session.close()\n            except Exception:\n                pass\n    \n    return False\n\n\ndef _calculate_adaptive_timeouts(network_quality: str, base_timeout: int) -> dict:\n    \"\"\"\n    根据网络质量计算自适应超时参数（优化版）\n    \n    Args:\n        network_quality: 网络质量 ('good', 'medium', 'poor')\n        base_timeout: 基础超时时间\n    \n    Returns:\n        dict: 超时参数字典\n    \"\"\"\n    if network_quality == 'good':\n        # 网络良好，使用较短超时\n        connect_multiplier = 0.8\n        read_multiplier = 0.8\n        chunk_multiplier = 0.7\n    elif network_quality == 'medium':\n        # 网络中等，使用默认超时\n        connect_multiplier = 1.0\n        read_multiplier = 1.0\n        chunk_multiplier = 1.0\n    else:  # poor\n        # 网络较差，适度增加超时但不过大\n        connect_multiplier = 1.3\n        read_multiplier = 1.2\n        chunk_multiplier = 1.5\n    \n    return {\n        'connect_timeout': max(5, int(DEFAULT_CONNECT_TIMEOUT * connect_multiplier)),\n        'read_timeout': max(8, int(DEFAULT_READ_TIMEOUT * read_multiplier)),\n        'total_timeout': base_timeout,  # 保持90秒限制\n        'chunk_timeout': max(5, int(CHUNK_READ_TIMEOUT * chunk_multiplier))\n    }\n\n\ndef _create_optimized_session() -> requests.Session:\n    \"\"\"\n    创建优化的requests session，支持连接池和重试\n    \n    Returns:\n        requests.Session: 配置好的session对象\n    \"\"\"\n    session = requests.Session()\n    \n    # 设置重试适配器\n    from urllib3.util.retry import Retry\n    from requests.adapters import HTTPAdapter\n    \n    # 配置重试策略\n    retry_strategy = Retry(\n        total=0,  # 在session层级不做重试，由外层控制\n        backoff_factor=0.5,\n        status_forcelist=[429, 500, 502, 503, 504],\n        allowed_methods=[\"GET\", \"HEAD\"],\n        raise_on_status=False\n    )\n    \n    # 设置连接池\n    adapter = HTTPAdapter(\n        max_retries=retry_strategy,\n        pool_connections=CONNECTION_POOL_SIZE,\n        pool_maxsize=CONNECTION_POOL_MAXSIZE,\n        pool_block=False\n    )\n    \n    session.mount(\"http://\", adapter)\n    session.mount(\"https://\", adapter)\n    \n    return session\n\n\ndef _download_with_resume_enhanced(url: str, resume_pos: int, timeouts: dict) -> requests.Response:\n    \"\"\"\n    增强版的断点续传下载（优化HTTP协议）\n    \n    Args:\n        url: 文件URL\n        resume_pos: 断点续传的起始位置\n        timeouts: 超时参数字典\n    \n    Returns:\n        requests.Response: HTTP响应对象\n    \"\"\"\n    headers = DOWNLOAD_HEADERS.copy()\n    headers['Range'] = f'bytes={resume_pos}-'\n    \n    # 使用优化的session\n    session = _create_optimized_session()\n    session.headers.update(headers)\n    \n    # 快速重试机制（2次尝试）\n    for attempt in range(2):\n        try:\n            logger.debug(f\"Resume download attempt {attempt + 1}, position: {resume_pos}\")\n            response = session.get(\n                url,\n                stream=True,\n                timeout=(timeouts['connect_timeout'], timeouts['read_timeout'])\n            )\n            response._capcut_session = session\n            \n            if response.status_code == 206:\n                logger.info(f\"Resume download successful, status: {response.status_code}\")\n                return response\n            elif response.status_code == 200:\n                logger.warning(\"Server returned 200 instead of 206, treating as fresh download\")\n                return response\n            else:\n                response.raise_for_status()\n                \n        except (requests.exceptions.ConnectionError, requests.exceptions.Timeout) as e:\n            if attempt < 1:\n                logger.warning(f\"Resume download attempt {attempt + 1} failed: {e}, retrying...\")\n                time.sleep(CONNECTION_RETRY_DELAY)\n            else:\n                logger.error(f\"Resume download failed after {attempt + 1} attempts: {e}\")\n                session.close()\n                raise\n        except Exception as e:\n            logger.error(f\"Resume download unexpected error: {e}\")\n            session.close()\n            raise\n    \n    session.close()\n    raise requests.exceptions.RequestException(\"Failed to establish resume connection after retries\")\n\n\ndef _download_fresh_enhanced(url: str, timeouts: dict) -> requests.Response:\n    \"\"\"\n    增强版的全新下载（优化HTTP协议）\n    \n    Args:\n        url: 文件URL\n        timeouts: 超时参数字典\n    \n    Returns:\n        requests.Response: HTTP响应对象\n    \"\"\"\n    # 使用优化的session\n    session = _create_optimized_session()\n    session.headers.update(DOWNLOAD_HEADERS)\n    \n    # 快速重试机制（2次尝试）\n    for attempt in range(2):\n        try:\n            logger.debug(f\"Fresh download attempt {attempt + 1}\")\n            response = session.get(\n                url,\n                stream=True,\n                timeout=(timeouts['connect_timeout'], timeouts['read_timeout'])\n            )\n            response._capcut_session = session\n            response.raise_for_status()\n            logger.info(f\"Fresh download successful, status: {response.status_code}\")\n            return response\n            \n        except (requests.exceptions.ConnectionError, requests.exceptions.Timeout) as e:\n            if attempt < 1:\n                logger.warning(f\"Fresh download attempt {attempt + 1} failed: {e}, retrying...\")\n                time.sleep(CONNECTION_RETRY_DELAY)\n            else:\n                logger.error(f\"Fresh download failed after {attempt + 1} attempts: {e}\")\n                session.close()\n                raise\n        except Exception as e:\n            logger.error(f\"Fresh download unexpected error: {e}\")\n            session.close()\n            raise\n    \n    session.close()\n    raise requests.exceptions.RequestException(\"Failed to establish fresh connection after retries\")\n\n\ndef _download_file_with_enhanced_stability(\n    response: requests.Response, \n    save_path: str, \n    limit: int, \n    url: str, \n    timeouts: dict,\n    existing_size: int = 0,\n    is_resume: bool = False\n) -> None:\n    \"\"\"\n    增强稳定性的文件下载（优化版）\n    \n    Args:\n        response: HTTP响应对象\n        save_path: 文件保存路径\n        limit: 文件大小限制\n        url: 文件URL\n        timeouts: 超时参数字典\n        existing_size: 已存在的文件大小\n        is_resume: 是否为断点续传\n    \"\"\"\n    downloaded_size = existing_size\n    start_time = time.time()\n    last_chunk_time = start_time\n    last_progress_time = start_time\n    stall_count = 0  # 停滞计数器\n    \n    # 调试日志：打印超时配置\n    logger.info(f\"Download timeouts config: total={timeouts.get('total_timeout')}, \"\n                f\"connect={timeouts.get('connect_timeout')}, read={timeouts.get('read_timeout')}, \"\n                f\"chunk={timeouts.get('chunk_timeout')}\")\n    \n    file_mode = 'ab' if is_resume else 'wb'\n    \n    try:\n        with open(save_path, file_mode) as f:\n            for chunk in response.iter_content(chunk_size=CHUNK_SIZE):\n                current_time = time.time()\n                \n                # 检查总体超时（严格90秒限制）\n                if current_time - start_time > timeouts['total_timeout']:\n                    logger.error(f\"Download total timeout: {current_time - start_time:.1f}s > {timeouts['total_timeout']}s\")\n                    raise CustomException(\n                        CustomError.DOWNLOAD_FILE_FAILED, \n                        detail=f\"Download timeout, total time {current_time - start_time:.1f}s\"\n                    )\n                \n                # 检查单个块的读取超时（网络停滞检测）\n                chunk_interval = current_time - last_chunk_time\n                if chunk_interval > timeouts['chunk_timeout']:\n                    stall_count += 1\n                    logger.warning(f\"Network stall detected: {chunk_interval:.1f}s, count: {stall_count}\")\n                    \n                    # 连续停滞超过阈值则抛出异常\n                    if stall_count >= 3:\n                        raise CustomException(\n                            CustomError.DOWNLOAD_FILE_FAILED, \n                            detail=f\"Network connection unstable, multiple stalls detected\"\n                        )\n                \n                if chunk:\n                    f.write(chunk)\n                    downloaded_size += len(chunk)\n                    last_chunk_time = current_time\n                    \n                    # 重置停滞计数器\n                    if len(chunk) > 0:\n                        stall_count = 0\n                    \n                    # 检查文件大小是否超过限制\n                    if downloaded_size > limit:\n                        raise CustomException(\n                            CustomError.FILE_SIZE_LIMIT_EXCEEDED, \n                            detail=f\"{limit / 1024 / 1024:.2f} MB\"\n                        )\n                    \n                    # 更频繁的进度日志（15秒间隔）\n                    if current_time - last_progress_time >= 15:\n                        progress_percent = (downloaded_size / limit) * 100 if limit > 0 else 0\n                        speed_mbps = (downloaded_size - existing_size) / (current_time - start_time) / 1024 / 1024\n                        logger.info(\n                            f\"Download progress: {downloaded_size / 1024 / 1024:.1f}MB \"\n                            f\"({progress_percent:.1f}%), speed: {speed_mbps:.2f}MB/s, URL: {str(url)[:50]}...\"\n                        )\n                        last_progress_time = current_time\n                        \n    except requests.exceptions.ChunkedEncodingError as e:\n        raise CustomException(\n            CustomError.DOWNLOAD_FILE_FAILED, \n            detail=f\"Data transfer error: {str(e)}\"\n        )\n    except Exception as e:\n        if isinstance(e, CustomException):\n            raise e\n        raise CustomException(\n            CustomError.DOWNLOAD_FILE_FAILED, \n            detail=f\"Error occurred during download: {str(e)}\"\n        )\n\n\ndef _classify_download_error(error: Exception) -> str:\n    \"\"\"\n    分类下载错误类型\n    \n    Args:\n        error: 异常对象\n    \n    Returns:\n        str: 错误类型 ('network', 'server', 'fatal', 'unknown')\n    \"\"\"\n    if isinstance(error, CustomException):\n        if error.err == CustomError.FILE_SIZE_LIMIT_EXCEEDED:\n            return 'fatal'\n        elif error.err == CustomError.DOWNLOAD_FILE_FAILED:\n            return 'network'\n        else:\n            return 'server'\n    \n    if isinstance(error, (requests.exceptions.ConnectionError, \n                         requests.exceptions.Timeout,\n                         requests.exceptions.ChunkedEncodingError)):\n        return 'network'\n    \n    if isinstance(error, requests.exceptions.HTTPError):\n        status_code = getattr(error.response, 'status_code', None)\n        if status_code in [500, 502, 503, 504]:  # 服务器错误\n            return 'server'\n        elif status_code in [404, 403, 401]:  # 客户端错误\n            return 'fatal'\n        else:\n            return 'server'\n    \n    return 'unknown'\n\n\ndef _should_cleanup_on_error(error_category: str, supports_range: bool, consecutive_failures: int) -> bool:\n    \"\"\"\n    决定错误后是否清理文件\n    \n    Args:\n        error_category: 错误类型\n        supports_range: 是否支持断点续传\n        consecutive_failures: 连续失败次数\n    \n    Returns:\n        bool: 是否应该清理文件\n    \"\"\"\n    # 致命错误始终清理\n    if error_category == 'fatal':\n        return True\n    \n    # 不支持断点续传时清理\n    if not supports_range:\n        return True\n    \n    # 连续失败太多次时清理（可能是文件损坏）\n    if consecutive_failures >= 3:\n        return True\n    \n    # 网络和服务器错误保留文件\n    return False\n\n\ndef _calculate_retry_delay(attempt: int, error_category: str, consecutive_failures: int) -> int:\n    \"\"\"\n    计算重试等待时间（优化版，控制总时间在90秒内）\n    \n    Args:\n        attempt: 当前尝试次数\n        error_category: 错误类型\n        consecutive_failures: 连续失败次数\n    \n    Returns:\n        int: 等待时间（秒）\n    \"\"\"\n    # 更短的基础等待时间，确保90秒内完成\n    base_delays = [1, 2, 4]  # 递增延迟\n    base_delay = base_delays[min(attempt, len(base_delays) - 1)]\n    \n    # 根据错误类型调整（幅度更小）\n    if error_category == 'network':\n        # 网络错误需要稍微更长的等待时间\n        multiplier = 1.2\n    elif error_category == 'server':\n        # 服务器错误稍微等待\n        multiplier = 1.1\n    else:\n        multiplier = 1.0\n    \n    # 连续失败次数调整（幅度更小）\n    if consecutive_failures >= 2:\n        multiplier *= 1.1\n    \n    final_delay = min(int(base_delay * multiplier), MAX_RETRY_DELAY)\n    return max(final_delay, 1)  # 最少等待1秒"
  },
  {
    "path": "src/utils/draft_cache.py",
    "content": "from collections import OrderedDict\nimport src.pyJianYingDraft as draft\nfrom typing import Dict\n\n# Modify global variable, use OrderedDict to implement LRU cache, limit the maximum number to 10000\nDRAFT_CACHE: Dict[str, 'draft.ScriptFile'] = OrderedDict()  # Use Dict for type hinting\nMAX_CACHE_SIZE = 100\n\ndef update_cache(key: str, value: draft.ScriptFile) -> None:\n    \"\"\"Update LRU cache\"\"\"\n    if key in DRAFT_CACHE:\n        # 如果当前key已经存在，就删除旧的\n        DRAFT_CACHE.pop(key)\n    elif len(DRAFT_CACHE) >= MAX_CACHE_SIZE:\n        print(f\"{key}, Cache is full, deleting the least recently used item\")\n        # 如果缓存已满，就删除最近最少使用的项（即第一个项）\n        DRAFT_CACHE.popitem(last=False)\n    # 添加到缓存的末尾（最近使用的）\n    DRAFT_CACHE[key] = value"
  },
  {
    "path": "src/utils/draft_cleanup.py",
    "content": "\"\"\"\n草稿目录定期清理：超出数量上限时按创建时间从旧到新删除目录，并跳过受保护、\n已加锁、仍在内存缓存中的草稿，避免影响正常读写。\n\"\"\"\nfrom __future__ import annotations\n\nimport asyncio\nimport datetime\nimport os\nimport re\nimport shutil\nfrom typing import Iterable, Optional\n\nimport config\nfrom src.utils.draft_cache import DRAFT_CACHE\nfrom src.utils.draft_lock_manager import get_draft_lock_manager\nfrom src.utils.logger import logger\n\n# 草稿清理策略（本模块内定义；保留数量可由环境变量 DRAFT_CLEANUP_MAX_DRAFT_COUNT 覆盖，默认 1000）\nDRAFT_CLEANUP_MAX_DRAFT_COUNT = max(0, int(os.getenv(\"DRAFT_CLEANUP_MAX_DRAFT_COUNT\", \"1000\")))\nDRAFT_CLEANUP_INTERVAL_SECONDS = 3600\nDRAFT_CLEANUP_PROTECTED_DRAFT_IDS = frozenset(\n    {\n        \"20251204214904ccb1af38\",\n        \"2025120421372636a27729\",\n    }\n)\n\n_DRAFT_ID_RE = re.compile(r\"^\\d{14}[a-f0-9]{8}$\")\n\n\ndef is_draft_directory_name(name: str) -> bool:\n    return bool(_DRAFT_ID_RE.match(name))\n\n\ndef _draft_sort_key(draft_id: str) -> tuple[datetime.datetime, str]:\n    ts = draft_id[:14]\n    dt = datetime.datetime.strptime(ts, \"%Y%m%d%H%M%S\")\n    return dt, draft_id\n\n\ndef list_sorted_draft_ids(draft_dir: str) -> list[str]:\n    if not os.path.isdir(draft_dir):\n        return []\n    names: list[str] = []\n    with os.scandir(draft_dir) as it:\n        for ent in it:\n            if ent.is_dir() and is_draft_directory_name(ent.name):\n                names.append(ent.name)\n    names.sort(key=_draft_sort_key)\n    return names\n\n\ndef select_drafts_for_deletion(\n    sorted_oldest_first: list[str], max_keep: int, skip_ids: set[str]\n) -> list[str]:\n    n = len(sorted_oldest_first)\n    need = max(0, n - max_keep)\n    if need == 0:\n        return []\n    out: list[str] = []\n    for did in sorted_oldest_first:\n        if len(out) >= need:\n            break\n        if did in skip_ids:\n            continue\n        out.append(did)\n    return out\n\n\ndef delete_draft_folders(draft_dir: str, draft_ids: Iterable[str]) -> list[str]:\n    deleted: list[str] = []\n    for did in draft_ids:\n        path = os.path.join(draft_dir, did)\n        logger.info(\n            \"DRAFT_CLEANUP_DELETE draft_id=%s path=%s action=shutil.rmtree\",\n            did,\n            path,\n        )\n        try:\n            shutil.rmtree(path, ignore_errors=False)\n            deleted.append(did)\n            logger.info(\n                \"DRAFT_CLEANUP_DELETED draft_id=%s path=%s status=success\",\n                did,\n                path,\n            )\n        except OSError as e:\n            logger.warning(\n                \"DRAFT_CLEANUP_DELETE_FAILED draft_id=%s path=%s error=%s\",\n                did,\n                path,\n                e,\n            )\n    return deleted\n\n\ndef run_one_draft_cleanup(\n    draft_dir: Optional[str] = None,\n    max_keep: Optional[int] = None,\n    protected_ids: Optional[Iterable[str]] = None,\n    locked_ids: Optional[Iterable[str]] = None,\n    cached_ids: Optional[Iterable[str]] = None,\n) -> list[str]:\n    base = draft_dir if draft_dir is not None else config.DRAFT_DIR\n    limit = max_keep if max_keep is not None else DRAFT_CLEANUP_MAX_DRAFT_COUNT\n    protected = frozenset(\n        protected_ids\n        if protected_ids is not None\n        else DRAFT_CLEANUP_PROTECTED_DRAFT_IDS\n    )\n    locked = (\n        set(locked_ids)\n        if locked_ids is not None\n        else set(get_draft_lock_manager().get_all_locked_drafts())\n    )\n    cached = set(cached_ids) if cached_ids is not None else set(DRAFT_CACHE.keys())\n    skip = set(protected) | locked | cached\n    sorted_ids = list_sorted_draft_ids(base)\n    to_remove = select_drafts_for_deletion(sorted_ids, limit, skip)\n    if not to_remove:\n        reason = \"under_limit\" if len(sorted_ids) <= limit else \"all_excess_protected_or_active\"\n        logger.info(\n            \"DRAFT_CLEANUP_SKIP total_drafts=%s max_keep=%s skip_count=%s reason=%s\",\n            len(sorted_ids),\n            limit,\n            len(skip),\n            reason,\n        )\n        return []\n    logger.info(\n        \"DRAFT_CLEANUP_PLAN total_drafts=%s max_keep=%s to_delete=%s protected=%s locked=%s cached=%s\",\n        len(sorted_ids),\n        limit,\n        len(to_remove),\n        len(protected),\n        len(locked),\n        len(cached),\n    )\n    return delete_draft_folders(base, to_remove)\n\n\nasync def draft_cleanup_background_loop() -> None:\n    interval = DRAFT_CLEANUP_INTERVAL_SECONDS\n    while True:\n        try:\n            run_one_draft_cleanup()\n        except Exception:\n            logger.exception(\"DRAFT_CLEANUP_ERROR phase=run_one_draft_cleanup\")\n        await asyncio.sleep(interval)\n"
  },
  {
    "path": "src/utils/draft_downloader.py",
    "content": "\"\"\"\n草稿下载工具\n用于从API下载草稿文件并保存到指定目录\n\"\"\"\nimport os\nimport re\nimport json\nimport time\nimport requests\nfrom urllib.parse import urlparse, parse_qs\nfrom typing import Optional, Dict, Any, List\nfrom src.utils.logger import logger\nimport config\nimport subprocess\nimport os\n\n_REQUEST_CONNECT_TIMEOUT = 10\n_REQUEST_READ_TIMEOUT = 30\n_MAX_RETRIES = 5\n\n# 网关/上游暂不可用，适合退避重试（含用户关心的 503）\n_RETRYABLE_GATEWAY_HTTP_STATUSES = frozenset({502, 503, 504})\n\n\ndef _sleep_gateway_backoff(retry_no: int) -> None:\n    \"\"\"网关类错误退避：1s 起指数增长，上限 32s。retry_no 为从 1 开始的本次重试序号。\"\"\"\n    delay = min(2 ** (retry_no - 1), 32)\n    time.sleep(delay)\n\n\ndef safe_write_file(file_path: str, file_content: bytes, is_binary: bool = True):\n    \"\"\"\n    安全写入文件，使用 O_EXCL 标志确保原子创建\n    \n    Args:\n        file_path: 文件路径\n        file_content: 文件内容\n        is_binary: 是否为二进制内容\n    \"\"\"\n    # 使用 O_EXCL 标志确保原子创建\n    if is_binary:\n        flags = os.O_CREAT | os.O_EXCL | os.O_RDWR | getattr(os, \"O_BINARY\", 0)\n    else:\n        flags = os.O_CREAT | os.O_EXCL | os.O_RDWR\n    \n    try:\n        fd = os.open(file_path, flags)\n        \n        # 写入内容\n        if file_content:\n            if isinstance(file_content, str):\n                os.write(fd, file_content.encode('utf-8'))\n            else:\n                os.write(fd, file_content)\n        \n        # 强制同步到磁盘\n        os.fsync(fd)\n        \n        os.close(fd)\n    except FileExistsError:\n        # 如果文件已存在，先删除再重新创建\n        if os.path.exists(file_path):\n            os.remove(file_path)\n        fd = os.open(file_path, flags)\n        \n        # 写入内容\n        if file_content:\n            if isinstance(file_content, str):\n                os.write(fd, file_content.encode('utf-8'))\n            else:\n                os.write(fd, file_content)\n        \n        # 强制同步到磁盘\n        os.fsync(fd)\n        \n        os.close(fd)\n\n\ndef extract_draft_id_from_url(url: str) -> Optional[str]:\n    \"\"\"\n    从URL中提取draft_id参数\n    \n    Args:\n        url: 草稿URL\n        \n    Returns:\n        draft_id: 草稿ID，如果找不到则返回None\n    \"\"\"\n    try:\n        parsed_url = urlparse(url)\n        query_params = parse_qs(parsed_url.query)\n        draft_ids = query_params.get('draft_id', [])\n        return draft_ids[0] if draft_ids else None\n    except Exception as e:\n        logger.error(f\"Failed to parse URL: {url}, error: {e}\")\n        return None\n\n\ndef download_draft(draft_url: str, save_path: Optional[str] = None) -> bool:\n    \"\"\"\n    下载草稿文件到指定目录\n    \n    Args:\n        draft_url: 草稿URL\n        save_path: 保存路径，默认为config.DRAFT_SAVE_PATH\n        \n    Returns:\n        bool: 下载是否成功\n    \"\"\"\n    # 提取draft_id\n    draft_id = extract_draft_id_from_url(draft_url)\n    if not draft_id:\n        logger.error(f\"Cannot extract draft_id from URL: {draft_url}\")\n        return False\n    \n    # 设置保存路径\n    if save_path is None:\n        save_path = config.DRAFT_SAVE_PATH\n    \n    # 构建并创建目标目录\n    target_dir = prepare_target_directory(save_path, draft_id)\n    \n    logger.info(f\"Downloading draft {draft_id} to {target_dir}\")\n    \n    # 获取草稿文件列表\n    files = get_draft_files_list(draft_url)\n    if not files:\n        logger.error(f\"Cannot get draft file list: {draft_id}\")\n        return False\n    \n    # 下载所有文件\n    return download_all_files(files, target_dir, draft_id)\n\n\ndef get_draft_files_list(draft_url: str) -> list:\n    \"\"\"\n    获取草稿文件列表\n    \n    Args:\n        draft_url: 草稿URL\n        \n    Returns:\n        list: 文件URL列表\n    \"\"\"\n    for attempt in range(_MAX_RETRIES + 1):\n        try:\n            response = requests.get(\n                draft_url,\n                timeout=(_REQUEST_CONNECT_TIMEOUT, _REQUEST_READ_TIMEOUT),\n            )\n\n            if response.status_code != 200:\n                if (\n                    response.status_code in _RETRYABLE_GATEWAY_HTTP_STATUSES\n                    and attempt < _MAX_RETRIES\n                ):\n                    retry_no = attempt + 1\n                    logger.warning(\n                        \"Gateway HTTP %s while fetching draft file list, retry (%s/%s)\",\n                        response.status_code,\n                        retry_no,\n                        _MAX_RETRIES,\n                    )\n                    response.close()\n                    _sleep_gateway_backoff(retry_no)\n                    continue\n                logger.error(\n                    f\"Failed to get draft file list, HTTP status: {response.status_code}\"\n                )\n                response.close()\n                return []\n\n            # 解析JSON响应\n            try:\n                json_data = response.json()\n            except json.JSONDecodeError as e:\n                logger.error(f\"Failed to parse draft list JSON: {e}\")\n                return []\n\n            # 检查响应状态\n            if json_data.get('code') != 0:\n                logger.error(\n                    f\"Failed to get draft file list: {json_data.get('message', 'unknown error')}\"\n                )\n                return []\n\n            # 返回files列表\n            files = json_data.get('files', [])\n            logger.info(f\"Fetched {len(files)} draft file(s)\")\n            return files\n        except requests.exceptions.RequestException as e:\n            if attempt >= _MAX_RETRIES:\n                logger.error(\n                    f\"Network error while fetching draft file list after {_MAX_RETRIES} retries: {e}\"\n                )\n                return []\n\n            retry_no = attempt + 1\n            backoff_seconds = retry_no\n            logger.warning(\n                f\"Network error while fetching draft file list, retry ({retry_no}/{_MAX_RETRIES}): {e}\"\n            )\n            time.sleep(backoff_seconds)\n        except Exception as e:\n            logger.error(f\"Unexpected error while fetching draft file list: {e}\")\n            return []\n\n\ndef download_all_files(files: list, target_dir: str, draft_id: str) -> bool:\n    \"\"\"\n    下载所有草稿文件\n    \n    Args:\n        files: 文件URL列表\n        target_dir: 目标目录\n        draft_id: 草稿ID\n        \n    Returns:\n        bool: 是否全部下载成功\n    \"\"\"\n    success_count = 0\n    total_files = len(files)\n    \n    for file_url in files:\n        if download_single_file(file_url, target_dir):\n            success_count += 1\n        else:\n            logger.error(f\"Failed to download file: {file_url}\")\n\n    trigger_directory_scan_with_robocopy(target_dir)\n    \n    logger.info(\n        f\"Draft {draft_id} download finished: total={total_files}, \"\n        f\"ok={success_count}, failed={total_files - success_count}\"\n    )\n    return success_count == total_files\n\n\ndef download_single_file(file_url: str, target_dir: str) -> bool:\n    \"\"\"\n    下载单个文件并保持目录结构\n    \n    Args:\n        file_url: 文件URL\n        target_dir: 目标目录\n        \n    Returns:\n        bool: 是否下载成功\n    \"\"\"\n    max_retries = 5\n    retry_count = 0\n\n    # 仅从 URL 解析目标路径，避免请求挂起时无效等待；与原先路径规则一致\n    parsed_url = urlparse(file_url)\n    path_parts = parsed_url.path.split(\"/\")\n    url_draft_id = None\n    for part in path_parts:\n        if re.match(r\"^\\d{8,}.*$\", part) and len(part) >= 10:\n            url_draft_id = part\n            break\n    draft_id_index = -1\n    if url_draft_id:\n        for i, part in enumerate(path_parts):\n            if url_draft_id in part:\n                draft_id_index = i\n                break\n    if draft_id_index != -1:\n        rel_path_parts = path_parts[draft_id_index + 1:]\n        rel_path = os.path.join(*rel_path_parts)\n    else:\n        rel_path = os.path.join(*path_parts[1:])\n    full_file_path = os.path.join(target_dir, rel_path)\n\n    while retry_count <= max_retries:\n        try:\n            response = requests.get(\n                file_url,\n                timeout=(_REQUEST_CONNECT_TIMEOUT, _REQUEST_READ_TIMEOUT),\n                stream=True,\n            )\n            try:\n                if response.status_code != 200:\n                    if response.status_code in _RETRYABLE_GATEWAY_HTTP_STATUSES:\n                        retry_count += 1\n                        if retry_count > max_retries:\n                            logger.error(\n                                \"Gateway HTTP %s, download failed after %s retries, URL: %s\",\n                                response.status_code,\n                                max_retries,\n                                file_url,\n                            )\n                            return False\n                        logger.warning(\n                            \"Gateway HTTP %s, retry (%s/%s), URL: %s\",\n                            response.status_code,\n                            retry_count,\n                            max_retries,\n                            file_url,\n                        )\n                        _sleep_gateway_backoff(retry_count)\n                        continue\n                    logger.error(\n                        f\"Download failed, HTTP status: {response.status_code}, URL: {file_url}\"\n                    )\n                    return False\n\n                parent_dir = os.path.dirname(full_file_path)\n                if parent_dir:\n                    os.makedirs(parent_dir, exist_ok=True)\n\n                with open(full_file_path, \"wb\") as out:\n                    for chunk in response.iter_content(chunk_size=8192):\n                        if chunk:\n                            out.write(chunk)\n            finally:\n                response.close()\n\n            # draft_info / draft_content：路径重写与 URL 素材本地化；失败则本文件下载失败\n            if full_file_path.endswith((\"draft_info.json\", \"draft_content.json\")):\n                if not update_json_file_paths(full_file_path, target_dir, url_draft_id):\n                    return False\n\n            return True\n\n        except requests.exceptions.RequestException as e:\n            retry_count += 1\n            if retry_count > max_retries:\n                logger.error(\n                    f\"Network error, download failed after {max_retries} retries: {e}, URL: {file_url}\"\n                )\n                return False\n            else:\n                logger.warning(\n                    f\"Network error, retry ({retry_count}/{max_retries}): {e}, URL: {file_url}\"\n                )\n                time.sleep(1 * retry_count)  # 递增延迟\n        except OSError as e:\n            logger.error(f\"File write error, download failed: {e}, URL: {file_url}\")\n            return False\n        except Exception as e:\n            logger.error(f\"Unexpected error while downloading file: {e}, URL: {file_url}\")\n            return False\n\n\ndef update_json_file_paths(json_file_path: str, target_dir: str, draft_id: str) -> bool:\n    \"\"\"将服务端路径前缀换成本地，并下载 materials 中的 URL 素材；失败返回 False。\"\"\"\n    try:\n        # 读取JSON文件\n        with open(json_file_path, 'r', encoding='utf-8') as f:\n            data = json.load(f)\n        \n        # 构造替换路径\n        remote_prefix = f\"/app/output/draft/{draft_id}/\"\n        local_prefix = os.path.join(config.DRAFT_SAVE_PATH, draft_id).replace('/', os.sep) + os.sep\n        \n        # 更新数据中的路径（服务端草稿内本地路径 -> 客户端目标路径）\n        updated_data = update_material_paths(data, remote_prefix, local_prefix)\n\n        # materials 中仍为 URL 的 path：下载到本地并回写；任一失败则整稿失败且不写回\n        if not localize_remote_material_paths(updated_data, target_dir):\n            logger.error(\n                f\"Remote material localization failed after retries; skip JSON update: {json_file_path}\"\n            )\n            return False\n\n        # 写回 JSON\n        json_content = json.dumps(updated_data, ensure_ascii=False, indent=2)\n        safe_write_file(json_file_path, json_content, is_binary=False)\n        \n        logger.debug(f\"Updated paths in JSON file: {json_file_path}\")\n        return True\n    \n    except json.JSONDecodeError as e:\n        logger.error(f\"JSON decode error: {e}, file: {json_file_path}\")\n        return False\n    except Exception as e:\n        logger.error(f\"Failed to update JSON paths: {e}, file: {json_file_path}\")\n        return False\n\n\ndef update_material_paths(data, remote_prefix: str, local_prefix: str):\n    \"\"\"\n    更新材料路径，处理JSON中materials下的音频和视频路径\n    \n    Args:\n        data: JSON数据\n        remote_prefix: 远程路径前缀\n        local_prefix: 本地路径前缀\n        \n    Returns:\n        更新后的数据\n    \"\"\"\n    if isinstance(data, dict):\n        # 检查是否是materials结构\n        if 'materials' in data:\n            materials = data.get('materials', {})\n            if isinstance(materials, dict):\n                # 处理音频和视频路径\n                audios = materials.get('audios', [])\n                videos = materials.get('videos', [])\n                \n                # 更新音频路径\n                for audio in audios:\n                    if isinstance(audio, dict) and 'path' in audio:\n                        audio['path'] = update_single_path(audio['path'], remote_prefix, local_prefix)\n                \n                # 更新视频路径\n                for video in videos:\n                    if isinstance(video, dict) and 'path' in video:\n                        video['path'] = update_single_path(video['path'], remote_prefix, local_prefix)\n\n        # 递归处理其他键值\n        updated_dict = {}\n        for key, value in data.items():\n            updated_dict[key] = update_material_paths(value, remote_prefix, local_prefix)\n        return updated_dict\n    elif isinstance(data, list):\n        # 处理列表中的每个元素\n        return [update_material_paths(item, remote_prefix, local_prefix) for item in data]\n    elif isinstance(data, str):\n        # 检查是否是以远程路径开头的路径\n        if data.startswith(remote_prefix):\n            # 提取远程前缀后的相对路径部分\n            relative_path = data[len(remote_prefix):]\n            # 将相对路径部分从Linux风格转换为Windows风格\n            relative_path_windows = relative_path.replace('/', os.sep)\n            # 组合成本地路径\n            new_path = local_prefix + relative_path_windows\n            # 验证文件是否存在\n            if not os.path.exists(new_path):\n                logger.warning(f\"File missing after path rewrite: {new_path}\")\n            return new_path\n        return data\n    else:\n        # 其他类型的数据保持不变\n        return data\n\n\ndef update_single_path(path: str, remote_prefix: str, local_prefix: str) -> str:\n    \"\"\"\n    更新单个路径值\n    \n    Args:\n        path: 原始路径\n        remote_prefix: 远程路径前缀\n        local_prefix: 本地路径前缀\n        \n    Returns:\n        更新后的路径\n    \"\"\"\n    if isinstance(path, str) and path.startswith(remote_prefix):\n        # 提取远程前缀后的相对路径部分\n        relative_path = path[len(remote_prefix):]\n        # 将相对路径部分从Linux风格转换为Windows风格\n        relative_path_windows = relative_path.replace('/', os.sep)\n        # 组合成本地路径\n        new_path = local_prefix + relative_path_windows\n        return new_path\n    return path\n\n\ndef _is_http_url(value: Any) -> bool:\n    if not isinstance(value, str) or not value:\n        return False\n    parsed = urlparse(value)\n    return parsed.scheme in (\"http\", \"https\") and bool(parsed.netloc)\n\n\ndef _safe_name(name: str) -> str:\n    return re.sub(r'[\\\\/:*?\"<>|]+', \"_\", name).strip(\" .\") or \"material\"\n\n\ndef _infer_local_subdir(material_type: str, material: Dict[str, Any]) -> str:\n    if material_type == \"audios\":\n        return \"audios\"\n    if material_type == \"videos\":\n        return \"images\" if material.get(\"type\") == \"photo\" else \"videos\"\n    return \"misc\"\n\n\ndef _infer_ext_from_url(url: str, fallback: str) -> str:\n    try:\n        ext = os.path.splitext(urlparse(url).path)[1]\n        return ext if ext else fallback\n    except Exception:\n        return fallback\n\n\ndef _download_remote_file(file_url: str, local_path: str) -> bool:\n    \"\"\"下载单个 URL 素材；网络异常或非 200 时最多重试 _MAX_RETRIES 次。\"\"\"\n    for attempt in range(_MAX_RETRIES + 1):\n        try:\n            response = requests.get(\n                file_url,\n                timeout=(_REQUEST_CONNECT_TIMEOUT, _REQUEST_READ_TIMEOUT),\n                stream=True,\n            )\n            if response.status_code != 200:\n                if attempt >= _MAX_RETRIES:\n                    logger.error(\n                        f\"Remote material download failed (HTTP {response.status_code}) \"\n                        f\"after {_MAX_RETRIES} retries: {file_url}\"\n                    )\n                    return False\n                retry_no = attempt + 1\n                logger.warning(\n                    f\"Remote material download non-200, retry ({retry_no}/{_MAX_RETRIES}): {file_url}\"\n                )\n                if response.status_code in _RETRYABLE_GATEWAY_HTTP_STATUSES:\n                    _sleep_gateway_backoff(retry_no)\n                else:\n                    time.sleep(retry_no)\n                response.close()\n                continue\n\n            parent_dir = os.path.dirname(local_path)\n            if parent_dir:\n                os.makedirs(parent_dir, exist_ok=True)\n            with open(local_path, \"wb\") as f:\n                for chunk in response.iter_content(chunk_size=8192):\n                    if chunk:\n                        f.write(chunk)\n            return True\n        except requests.exceptions.RequestException as e:\n            if attempt >= _MAX_RETRIES:\n                logger.error(\n                    f\"Remote material download failed after {_MAX_RETRIES} retries: {file_url}, error: {e}\"\n                )\n                return False\n            retry_no = attempt + 1\n            logger.warning(\n                f\"Remote material download network error, retry ({retry_no}/{_MAX_RETRIES}): \"\n                f\"{file_url}, {e}\"\n            )\n            time.sleep(retry_no)\n        except OSError as e:\n            logger.error(f\"Failed to write remote material to disk: {local_path}, {e}\")\n            return False\n    return False\n\n\ndef localize_remote_material_paths(data: Dict[str, Any], target_dir: str) -> bool:\n    \"\"\"\n    将 materials 里仍为 URL 的 path 下载到本地并回写。\n    同一 URL 只拉取一次；任一 URL 重试仍失败则返回 False，且不写 JSON（由上层中止下载与导出）。\n    \"\"\"\n    materials = data.get(\"materials\", {}) if isinstance(data, dict) else {}\n    if not isinstance(materials, dict):\n        return True\n\n    url_cache: Dict[str, str] = {}\n    failed_urls: set = set()\n    target_lists: Dict[str, List[Dict[str, Any]]] = {\n        \"audios\": materials.get(\"audios\", []),\n        \"videos\": materials.get(\"videos\", []),\n    }\n\n    for material_type, items in target_lists.items():\n        if not isinstance(items, list):\n            continue\n        for item in items:\n            if not isinstance(item, dict):\n                continue\n            remote_path = item.get(\"path\")\n            if not _is_http_url(remote_path):\n                continue\n\n            if remote_path in failed_urls:\n                continue\n\n            if remote_path in url_cache:\n                item[\"path\"] = url_cache[remote_path]\n                continue\n\n            sub_dir = _infer_local_subdir(material_type, item)\n            fallback_ext = \".mp3\" if material_type == \"audios\" else \".mp4\"\n            ext = _infer_ext_from_url(remote_path, fallback_ext)\n            base_name = _safe_name(str(item.get(\"material_name\") or item.get(\"name\") or item.get(\"id\") or \"material\"))\n            filename = base_name if base_name.lower().endswith(ext.lower()) else f\"{base_name}{ext}\"\n            local_path = os.path.join(target_dir, \"assets\", sub_dir, filename)\n\n            if not _download_remote_file(remote_path, local_path):\n                failed_urls.add(remote_path)\n                logger.error(\n                    f\"Remote material localization failed (draft download will fail): {remote_path}\"\n                )\n                continue\n\n            logger.info(f\"Remote material saved and path updated: {remote_path} -> {local_path}\")\n            item[\"path\"] = local_path\n            url_cache[remote_path] = local_path\n\n    return len(failed_urls) == 0\n\ndef trigger_directory_scan_with_robocopy(target_dir: str):\n    \"\"\"\n    使用robocopy触发目录扫描，专门用于激活剪映的目录发现机制\n    \n    Args:\n        target_dir: 目录路径\n    \"\"\"\n    if target_dir and os.path.exists(target_dir):\n        # 使用robocopy复制目录以触发剪映的目录扫描机制\n        copy_with_robocopy(target_dir, target_dir + \".tmp\")\n        # 清理临时目录\n        tmp_dir = target_dir + \".tmp\"\n        if os.path.exists(tmp_dir):\n            try:\n                import shutil\n                shutil.rmtree(tmp_dir)\n            except Exception as e:\n                logger.warning(f\"Failed to remove temp directory {tmp_dir}: {e}\")\n\ndef copy_with_robocopy(src: str, dst: str, verbose: bool = False) -> bool:\n    \"\"\"\n    使用robocopy复制目录，参数已验证可用\n    \n    参数:\n        src: 源目录路径\n        dst: 目标目录路径\n        verbose: 是否显示详细输出，默认为False\n    \n    返回:\n        成功返回True，失败返回False\n    \n    robocopy参数说明:\n        /E: 复制所有子目录，包括空目录（递归复制）\n        /COPY:DAT: 复制数据、属性和时间戳（无需管理员权限）\n        /R:1: 失败重试1次\n        /W:1: 重试等待1秒\n        /NP: 不显示进度百分比（静默模式）\n        /NJH: 不显示作业头（静默模式）\n        /NJS: 不显示作业摘要（静默模式）\n    \"\"\"\n    \n    # 确保路径是字符串类型\n    src = str(src)\n    dst = str(dst)\n    \n    # 检查源目录是否存在\n    if not os.path.exists(src):\n        logger.error(f\"Source directory does not exist - {src}\")\n        return False\n    \n    # 构建robocopy命令 - 使用已验证的参数组合\n    cmd = [\n        \"robocopy\",\n        src,\n        dst,\n        \"/E\",          # 递归复制所有子目录\n        \"/COPY:DAT\",   # 复制数据、属性和时间戳（无需管理员权限）\n        \"/R:1\",        # 失败重试1次\n        \"/W:1\",        # 重试等待1秒\n        \"/NP\",         # 不显示进度百分比\n        \"/NJH\",        # 不显示作业头\n        \"/NJS\",        # 不显示作业摘要\n    ]\n    \n    if verbose:\n        logger.info(f\"Executing command: {' '.join(cmd)}\")\n        # 在verbose模式下，不添加静默参数，以便看到输出\n        cmd = cmd[:-3]  # 移除/NP, /NJH, /NJS参数\n    \n    try:\n        if verbose:\n            # 详细模式下，实时输出结果\n            logger.info(f\"Starting copy: {src} → {dst}\")\n            logger.info(\"-\" * 50)\n            \n            result = subprocess.run(\n                cmd, \n                capture_output=False,  # 实时显示输出\n                text=True, \n                check=False,\n                encoding='gbk'  # Windows命令行通常使用GBK编码\n            )\n            \n            # 获取返回码\n            return_code = result.returncode\n            \n            logger.info(\"-\" * 50)\n        else:\n            # 静默模式下，捕获输出但不显示\n            result = subprocess.run(\n                cmd, \n                capture_output=True, \n                text=True, \n                check=False,\n                encoding='gbk'\n            )\n            return_code = result.returncode\n            \n            # 即使静默模式，如果出错也要显示错误\n            if return_code >= 8:\n                logger.error(f\"Copy failed! Return code: {return_code}\")\n                if result.stderr:\n                    logger.error(f\"Error message: {result.stderr}\")\n                elif result.stdout:\n                    logger.error(f\"Output message: {result.stdout}\")\n        \n        # robocopy返回码处理:\n        # 0-7: 成功或部分成功（0=无变化，1-7=有文件操作）\n        # 8+: 严重错误\n        if return_code <= 7:\n            if verbose:\n                logger.info(f\"Copy completed! Return code: {return_code}\")\n                if return_code == 0:\n                    logger.info(\"Return code 0 means no files need to be copied (source and target are the same)\")\n                elif return_code == 1:\n                    logger.info(\"Return code 1 means some files were successfully copied\")\n                elif return_code == 2:\n                    logger.info(\"Return code 2 means some files were skipped (may be temporary files or inaccessible)\")\n                elif return_code == 3:\n                    logger.info(\"Return code 3 means some files were copied and some were skipped\")\n            return True\n        else:\n            # 返回码8+表示有严重错误\n            error_messages = {\n                8: \"Files/directories copy failed\",\n                9: \"Parameter error\",\n                10: \"Source directory does not exist or no access permission\",\n                11: \"Target directory creation failed\",\n                12: \"File is in use and cannot be copied\",\n                13: \"Insufficient disk space\",\n                14: \"Source is a file instead of a directory\",\n                15: \"Target is a file instead of a directory\",\n                16: \"General error\"\n            }\n            \n            error_msg = error_messages.get(return_code, f\"Unknown error (return code: {return_code})\")\n            logger.error(f\"Copy failed! {error_msg}\")\n            \n            # 显示更多信息（如果有）\n            if not verbose and result.stderr:\n                logger.error(f\"Detailed error: {result.stderr}\")\n                \n            return False\n            \n    except FileNotFoundError:\n        logger.error(\"Error: robocopy command not found. Please ensure running on Windows system.\")\n        logger.info(\"Hint: robocopy is a built-in tool for Windows Vista and later versions.\")\n        return False\n    except Exception as e:\n        logger.error(f\"An unknown error occurred during execution: {e}\")\n        return False\n\n\n\ndef prepare_target_directory(save_path: str, draft_id: str) -> str:\n    \"\"\"\n    准备目标下载目录\n    \n    Args:\n        save_path: 基础保存路径\n        draft_id: 草稿ID\n        \n    Returns:\n        str: 目标目录路径\n    \"\"\"\n    target_dir = os.path.join(save_path, draft_id)\n    os.makedirs(target_dir, exist_ok=True)\n    return target_dir\n\n\ndef execute_download(draft_url: str, target_dir: str, draft_id: str) -> bool:\n    \"\"\"\n    执行下载操作\n    \n    Args:\n        draft_url: 草稿URL\n        target_dir: 目标目录\n        draft_id: 草稿ID\n        \n    Returns:\n        bool: 下载是否成功\n    \"\"\"\n    try:\n        response = requests.get(\n            draft_url,\n            timeout=(_REQUEST_CONNECT_TIMEOUT, _REQUEST_READ_TIMEOUT),\n            stream=True,\n        )\n        try:\n            if response.status_code != 200:\n                logger.error(f\"Draft download failed: {draft_id}, HTTP status: {response.status_code}\")\n                return False\n\n            file_path = get_file_path(response, target_dir, draft_id)\n\n            parent_dir = os.path.dirname(file_path)\n            if parent_dir:\n                os.makedirs(parent_dir, exist_ok=True)\n            with open(file_path, \"wb\") as out:\n                for chunk in response.iter_content(chunk_size=8192):\n                    if chunk:\n                        out.write(chunk)\n\n            logger.info(f\"Draft downloaded: {file_path}\")\n            return True\n        finally:\n            response.close()\n\n    except requests.exceptions.RequestException as e:\n        logger.error(f\"Network error, draft download failed: {draft_id}, error: {e}\")\n        return False\n    except IOError as e:\n        logger.error(f\"File write error, draft download failed: {draft_id}, error: {e}\")\n        return False\n    except Exception as e:\n        logger.error(f\"Unexpected error, draft download failed: {draft_id}, error: {e}\")\n        return False\n\n\ndef get_file_path(response: requests.Response, target_dir: str, draft_id: str) -> str:\n    \"\"\"\n    根据响应头或默认规则确定文件路径\n    \n    Args:\n        response: HTTP响应对象\n        target_dir: 目标目录\n        draft_id: 草稿ID\n        \n    Returns:\n        str: 完整的文件路径\n    \"\"\"\n    filename = extract_filename_from_response(response, draft_id)\n    filename = sanitize_filename(filename)\n    return os.path.join(target_dir, filename)\n\n\ndef extract_filename_from_response(response: requests.Response, draft_id: str) -> str:\n    \"\"\"\n    从HTTP响应头中提取文件名\n    \n    Args:\n        response: HTTP响应对象\n        draft_id: 草稿ID\n        \n    Returns:\n        str: 文件名\n    \"\"\"\n    content_disposition = response.headers.get('content-disposition', '')\n    \n    if content_disposition:\n        import re\n        fname_match = re.search(r'filename[^;=\\n]*=(([\\'\\\"]).*?\\2|[^;\\n]*)', content_disposition)\n        if fname_match:\n            return fname_match.group(1).strip('\\'\"')\n    \n    # 如果没有从响应头获取到文件名，使用默认名称\n    return f\"{draft_id}.draft\"\n\n\ndef sanitize_filename(filename: str) -> str:\n    \"\"\"\n    清理文件名，移除不安全的字符\n    \n    Args:\n        filename: 原始文件名\n        \n    Returns:\n        str: 清理后的文件名\n    \"\"\"\n    # 替换不安全的字符\n    unsafe_chars = ['<', '>', ':', '\"', '|', '?', '*']\n    safe_filename = filename\n    for char in unsafe_chars:\n        safe_filename = safe_filename.replace(char, '_')\n    \n    # 移除开头和结尾的空格和点号\n    safe_filename = safe_filename.strip(' .')\n    \n    return safe_filename\n\n\ndef batch_download_drafts(draft_urls: list, save_path: Optional[str] = None) -> dict:\n    \"\"\"\n    批量下载草稿\n    \n    Args:\n        draft_urls: 草稿URL列表\n        save_path: 保存路径\n        \n    Returns:\n        dict: 包含成功和失败统计的字典\n    \"\"\"\n    results = initialize_batch_results()\n    \n    for url in draft_urls:\n        process_single_draft(url, save_path, results)\n    \n    finalize_batch_results(results, draft_urls)\n    return results\n\n\ndef initialize_batch_results() -> dict:\n    \"\"\"\n    初始化批量下载结果字典\n    \n    Returns:\n        dict: 初始化的结果字典\n    \"\"\"\n    return {\n        'success': [],\n        'failure': [],\n        'summary': {}\n    }\n\n\ndef process_single_draft(url: str, save_path: Optional[str], results: dict) -> None:\n    \"\"\"\n    处理单个草稿下载\n    \n    Args:\n        url: 草稿URL\n        save_path: 保存路径\n        results: 结果统计字典\n    \"\"\"\n    draft_id = extract_draft_id_from_url(url)\n    if draft_id and download_draft(url, save_path):\n        results['success'].append(draft_id)\n        logger.info(f\"Batch download succeeded: {draft_id}\")\n    else:\n        results['failure'].append({'url': url, 'draft_id': draft_id})\n        logger.error(f\"Batch download failed: {draft_id or url}\")\n\n\ndef finalize_batch_results(results: dict, draft_urls: list) -> None:\n    \"\"\"\n    完成批量下载结果统计\n    \n    Args:\n        results: 结果统计字典\n        draft_urls: 草稿URL列表\n    \"\"\"\n    total = len(draft_urls)\n    success_count = len(results['success'])\n    failure_count = len(results['failure'])\n    \n    results['summary'] = {\n        'total': total,\n        'success': success_count,\n        'failure': failure_count\n    }\n    \n    logger.info(\n        f\"Batch download finished: total={total}, ok={success_count}, failed={failure_count}\"\n    )\n\n\n"
  },
  {
    "path": "src/utils/draft_lock_manager.py",
    "content": "\"\"\"\n草稿并发锁管理器\n用于防止同一草稿的并发写操作导致文件损坏\n\"\"\"\nimport asyncio\nimport time\nfrom typing import Dict, Optional\nfrom src.utils.logger import logger\n\n\nclass DraftLockManager:\n    \"\"\"\n    草稿锁管理器 - 单例模式\n    \n    功能：\n    1. 为每个草稿 ID 维护一个独立的锁\n    2. 支持异步获取和释放锁\n    3. 自动清理已释放的锁以节省内存\n    4. 提供锁状态查询功能\n    \n    使用场景：\n    - add_videos: 防止并发写入同一草稿文件\n    - add_audios: 防止并发修改同一草稿配置\n    - save_draft: 防止并发保存导致数据丢失\n    \"\"\"\n    \n    _instance = None\n    _init_lock = asyncio.Lock()\n    \n    def __new__(cls):\n        \"\"\"确保单例模式\"\"\"\n        if cls._instance is None:\n            cls._instance = super().__new__(cls)\n        return cls._instance\n    \n    def __init__(self):\n        \"\"\"初始化管理器\"\"\"\n        # 如果已经初始化过，则跳过\n        if hasattr(self, '_initialized') and self._initialized:\n            return\n        \n        # 存储每个草稿的锁：{draft_id: asyncio.Lock}\n        self._locks: Dict[str, asyncio.Lock] = {}\n        # 存储每个锁的持有者数量（用于引用计数）\n        self._lock_counts: Dict[str, int] = {}\n        # 诊断信息：记录最近持有者与持锁开始时间（用于定位“为什么会等满timeout”）\n        self._lock_owner: Dict[str, str] = {}\n        self._lock_acquired_at: Dict[str, float] = {}\n        # 初始化锁（用于保护_locks 字典的修改）\n        self._manager_lock = asyncio.Lock()\n        # 标记初始化完成\n        self._initialized = True\n        \n        logger.info(\"DraftLockManager initialized\")\n    \n    async def acquire_lock(self, draft_id: str, timeout: Optional[float] = None) -> bool:\n        \"\"\"\n        获取指定草稿的锁\n        \n        Args:\n            draft_id: 草稿 ID\n            timeout: 超时时间（秒），None 表示无限等待\n        \n        Returns:\n            bool: 是否成功获取锁\n        \n        Raises:\n            asyncio.TimeoutError: 等待超时时抛出\n        \n        Example:\n            >>> lock_manager = DraftLockManager()\n            >>> success = await lock_manager.acquire_lock(\"2025092811473036584258\", timeout=5.0)\n            >>> if success:\n            ...     try:\n            ...         # 执行草稿写操作\n            ...         pass\n            ...     finally:\n            ...         await lock_manager.release_lock(\"2025092811473036584258\")\n        \"\"\"\n        async with self._manager_lock:\n            # 如果草稿 ID 没有锁，则创建新锁\n            if draft_id not in self._locks:\n                self._locks[draft_id] = asyncio.Lock()\n                self._lock_counts[draft_id] = 0\n            \n            lock = self._locks[draft_id]\n        \n        # 尝试获取锁（带超时）\n        wait_started_at = time.monotonic()\n        try:\n            if timeout is not None:\n                # 使用 wait_for 实现超时\n                await asyncio.wait_for(lock.acquire(), timeout=timeout)\n            else:\n                # 无限等待\n                await lock.acquire()\n            \n            # 增加引用计数\n            async with self._manager_lock:\n                self._lock_counts[draft_id] = self._lock_counts.get(draft_id, 0) + 1\n                task = asyncio.current_task()\n                task_name = task.get_name() if task and hasattr(task, \"get_name\") else None\n                self._lock_owner[draft_id] = task_name or \"unknown\"\n                self._lock_acquired_at[draft_id] = time.monotonic()\n            \n            waited = time.monotonic() - wait_started_at\n            logger.info(\n                f\"Lock acquired for draft_id: {draft_id}, waited: {waited:.3f}s, count: {self._lock_counts[draft_id]}\"\n            )\n            return True\n            \n        except asyncio.TimeoutError:\n            waited = time.monotonic() - wait_started_at\n            async with self._manager_lock:\n                owner = self._lock_owner.get(draft_id)\n                acquired_at = self._lock_acquired_at.get(draft_id)\n                held_for = (time.monotonic() - acquired_at) if acquired_at else None\n                count = self._lock_counts.get(draft_id, 0)\n                locked = self._locks.get(draft_id).locked() if draft_id in self._locks else False\n            if held_for is not None:\n                logger.warning(\n                    f\"Timeout waiting for lock on draft_id: {draft_id}, waited: {waited:.3f}s, \"\n                    f\"locked: {locked}, holders: {count}, owner: {owner}, held_for: {held_for:.3f}s\"\n                )\n            else:\n                logger.warning(\n                    f\"Timeout waiting for lock on draft_id: {draft_id}, waited: {waited:.3f}s, \"\n                    f\"locked: {locked}, holders: {count}, owner: {owner}\"\n                )\n            raise\n    \n    async def release_lock(self, draft_id: str) -> None:\n        \"\"\"\n        释放指定草稿的锁\n        \n        Args:\n            draft_id: 草稿 ID\n        \n        Raises:\n            RuntimeError: 当尝试释放未持有的锁时抛出\n            KeyError: 当草稿 ID 不存在时抛出\n        \n        Example:\n            >>> lock_manager = DraftLockManager()\n            >>> await lock_manager.acquire_lock(\"draft-123\")\n            >>> try:\n            ...     # 执行写操作\n            ...     pass\n            ... finally:\n            ...     await lock_manager.release_lock(\"draft-123\")\n        \"\"\"\n        async with self._manager_lock:\n            if draft_id not in self._locks:\n                raise KeyError(f\"No lock found for draft_id: {draft_id}\")\n            \n            lock = self._locks[draft_id]\n            self._lock_counts[draft_id] = max(0, self._lock_counts.get(draft_id, 0) - 1)\n            acquired_at = self._lock_acquired_at.get(draft_id)\n            owner = self._lock_owner.get(draft_id)\n        \n        # 释放锁（在 manager_lock 之外，避免死锁）\n        try:\n            lock.release()\n            held_for = (time.monotonic() - acquired_at) if acquired_at else None\n            logger.info(\n                f\"Lock released for draft_id: {draft_id}, held_for: {held_for:.3f}s, owner: {owner}\"\n                if held_for is not None else\n                f\"Lock released for draft_id: {draft_id}, owner: {owner}\"\n            )\n        except RuntimeError as e:\n            logger.error(f\"Failed to release lock for draft_id {draft_id}: {str(e)}\")\n            raise\n        finally:\n            async with self._manager_lock:\n                # 无持有者、未锁定、且无等待者时回收锁对象，避免 draft_id 维度常驻增长\n                lock_obj = self._locks.get(draft_id)\n                if lock_obj is not None:\n                    waiters = getattr(lock_obj, \"_waiters\", None)\n                    has_waiters = bool(waiters) if waiters is not None else False\n                    if (\n                        self._lock_counts.get(draft_id, 0) <= 0\n                        and not lock_obj.locked()\n                        and not has_waiters\n                    ):\n                        self._locks.pop(draft_id, None)\n                        self._lock_counts.pop(draft_id, None)\n                self._lock_owner.pop(draft_id, None)\n                self._lock_acquired_at.pop(draft_id, None)\n\n    def is_locked(self, draft_id: str) -> bool:\n        \"\"\"\n        检查指定草稿是否被锁定\n        \n        Args:\n            draft_id: 草稿 ID\n        \n        Returns:\n            bool: 如果草稿被锁定返回 True，否则返回 False\n        \n        Example:\n            >>> lock_manager = DraftLockManager()\n            >>> await lock_manager.acquire_lock(\"draft-123\")\n            >>> print(lock_manager.is_locked(\"draft-123\"))  # True\n            >>> await lock_manager.release_lock(\"draft-123\")\n            >>> print(lock_manager.is_locked(\"draft-123\"))  # False\n        \"\"\"\n        if draft_id not in self._locks:\n            return False\n        \n        return self._locks[draft_id].locked()\n    \n    def get_lock_count(self, draft_id: str) -> int:\n        \"\"\"\n        获取指定草稿的锁持有计数\n        \n        Args:\n            draft_id: 草稿 ID\n        \n        Returns:\n            int: 锁持有次数（重入次数）\n        \n        Example:\n            >>> lock_manager = DraftLockManager()\n            >>> await lock_manager.acquire_lock(\"draft-123\")\n            >>> print(lock_manager.get_lock_count(\"draft-123\"))  # 1\n        \"\"\"\n        return self._lock_counts.get(draft_id, 0)\n    \n    def get_all_locked_drafts(self) -> list:\n        \"\"\"\n        获取所有当前被锁定的草稿 ID 列表\n        \n        Returns:\n            list: 被锁定的草稿 ID 列表\n        \n        Example:\n            >>> lock_manager = DraftLockManager()\n            >>> await lock_manager.acquire_lock(\"draft-123\")\n            >>> locked = lock_manager.get_all_locked_drafts()\n            >>> print(locked)  # [\"draft-123\"]\n        \"\"\"\n        return [\n            draft_id for draft_id, lock in self._locks.items()\n            if lock.locked()\n        ]\n    \n    async def clear_all_locks(self) -> None:\n        \"\"\"\n        清除所有锁（仅在紧急情况下使用）\n        \n        Warning: 此方法会强制释放所有锁，可能导致数据不一致\n        仅应在系统异常或死锁检测时使用\n        \n        Example:\n            >>> lock_manager = DraftLockManager()\n            >>> # 检测到死锁时\n            >>> await lock_manager.clear_all_locks()\n        \"\"\"\n        async with self._manager_lock:\n            released_count = len(self._locks)\n            self._locks.clear()\n            self._lock_counts.clear()\n            \n        if released_count > 0:\n            logger.warning(f\"Cleared all locks, released {released_count} locks\")\n    \n    def get_stats(self) -> dict:\n        \"\"\"\n        获取锁管理器统计信息\n        \n        Returns:\n            dict: 包含锁统计信息的字典\n        \n        Example:\n            >>> lock_manager = DraftLockManager()\n            >>> stats = lock_manager.get_stats()\n            >>> print(stats)  # {\"total_locks\": 5, \"locked_drafts\": 2}\n        \"\"\"\n        locked_count = sum(1 for lock in self._locks.values() if lock.locked())\n        return {\n            \"total_locks\": len(self._locks),\n            \"locked_drafts\": locked_count,\n            \"total_holders\": sum(self._lock_counts.values())\n        }\n\n\n# 全局单例\n_draf_lock_manager: Optional[DraftLockManager] = None\n\n\ndef get_draft_lock_manager() -> DraftLockManager:\n    \"\"\"\n    获取全局草稿锁管理器实例\n    \n    Returns:\n        DraftLockManager: 单例锁管理器实例\n    \n    Example:\n        >>> lock_manager = get_draft_lock_manager()\n        >>> await lock_manager.acquire_lock(\"draft-123\")\n    \"\"\"\n    global _draf_lock_manager\n    if _draf_lock_manager is None:\n        _draf_lock_manager = DraftLockManager()\n    return _draf_lock_manager\n"
  },
  {
    "path": "src/utils/helper.py",
    "content": "from urllib.parse import urlparse, parse_qs\nimport os\nimport requests\nimport mimetypes\nimport datetime\nimport uuid\nfrom pathlib import Path\nfrom src.utils.logger import logger\nfrom exceptions import CustomException, CustomError\nimport config\n\n\ndef get_url_param(url: str, key: str, default=None):\n    \"\"\"\n    从 URL 中提取指定查询参数的值（返回第一个值）。\n    若参数不存在，返回 default。\n    \"\"\"\n    query = parse_qs(urlparse(url).query)\n    return query.get(key, [default])[0]\n\ndef gen_unique_id() -> str:\n    \"\"\"\n    生成唯一ID\n    \"\"\"\n    timestamp = datetime.datetime.now().strftime(\"%Y%m%d%H%M%S\")\n    unique_id = uuid.uuid4().hex[:8]\n\n    return f\"{timestamp}{unique_id}\"\n\ndef get_all_files(dir: str) -> list:\n    \"\"\"\n    使用 pathlib.Path.rglob() 递归获取目录下所有文件的路径列表。\n\n    参数:\n        dir (str): 要遍历的目录路径。\n\n    返回:\n        list: 包含所有文件完整路径的列表。\n    \"\"\"\n    path_obj = Path(dir)\n    \n    # 检查目录是否存在\n    if not path_obj.exists():\n        return []\n    \n    # 使用 rglob('*') 递归匹配所有条目，并用 is_file() 过滤出文件\n    file_list = [str(file_path) for file_path in path_obj.rglob('*') if file_path.is_file()]\n    return file_list\n\n"
  },
  {
    "path": "src/utils/keyframe_value.py",
    "content": "\"\"\"关键帧属性值的归一化工具（与 pyJianYingDraft / keyframes_infos 约定一致）。\"\"\"\n\nPOSITION_X = \"KFTypePositionX\"\nPOSITION_Y = \"KFTypePositionY\"\n\n# |value| <= 1 视为已归一化（剪映半画布单位）；> 1 视为像素位移（与 transform_x 一致）\n_NORMALIZED_POSITION_MAX = 1.0\n\n\ndef normalize_keyframe_value(\n    ctype: str,\n    value: float,\n    width: int | None = None,\n    height: int | None = None,\n    *,\n    assume_pixel: bool = False,\n) -> float:\n    \"\"\"\n    将关键帧属性值转换为剪映草稿内部单位。\n\n    位置类关键帧（KFTypePositionX/Y）在剪映中为「UI 显示像素值 / 画布宽(高)」，\n    与 add_videos/add_images 中 transform_x / draft_width 的换算一致。\n\n    Args:\n        assume_pixel: True 时只要提供了 width/height 就按像素换算（keyframes_infos）；\n            False 时仅当 |value| > 1 时按像素换算（add_keyframes，兼容已归一化的 -1~1）。\n    \"\"\"\n    if ctype == POSITION_X and width is not None and width > 0:\n        if assume_pixel or abs(value) > _NORMALIZED_POSITION_MAX:\n            return value / width\n    elif ctype == POSITION_Y and height is not None and height > 0:\n        if assume_pixel or abs(value) > _NORMALIZED_POSITION_MAX:\n            return value / height\n    return value\n"
  },
  {
    "path": "src/utils/logger.py",
    "content": "from logging.config import dictConfig\nfrom typing import Optional\nimport logging\nimport os\nimport config\n\n\nLOG_DIR = config.LOG_DIR\nLOG_FILE = os.path.join(LOG_DIR, \"capcut-mate.log\")\nLOG_MAX_BYTES = 20 * 1024 * 1024  # 20MB\nLOG_BACKUP_COUNT = 10\n\nos.makedirs(os.path.dirname(LOG_FILE), exist_ok=True)\n\n\nclass SkipGenVideoStatusAccessLogFilter(logging.Filter):\n    \"\"\"Drop uvicorn access lines for gen_video_status (high-frequency polling floods the console).\"\"\"\n\n    _PATH_FRAGMENT = \"/gen_video_status\"\n\n    def filter(self, record: logging.LogRecord) -> bool:\n        return self._PATH_FRAGMENT not in record.getMessage()\n\n\nclass RelativePathFormatter(logging.Formatter):\n    def __init__(self, *args, project_root: Optional[str] = None, **kwargs):\n        super().__init__(*args, **kwargs)\n        # 把项目根目录传进来\n        self.project_root = project_root or os.getcwd()\n\n    def format(self, record: logging.LogRecord) -> str:\n        record.rel_path = os.path.relpath(record.pathname, self.project_root)\n        return super().format(record)\n\nLOGGING_CONFIG = {\n    \"version\": 1,\n    \"disable_existing_loggers\": False,\n    \"formatters\": {\n        \"default\": {\n            \"()\": RelativePathFormatter,\n            \"fmt\": \"%(asctime)s.%(msecs)03d | %(levelname)s | %(trace_id)s | %(name)s | %(rel_path)s:%(lineno)d | %(message)s\",\n            \"datefmt\": \"%Y-%m-%d %H:%M:%S\",\n        },\n    },\n    \"handlers\": {\n        \"default\": {\n            \"formatter\": \"default\",\n            \"class\": \"logging.StreamHandler\",\n            \"stream\": \"ext://sys.stdout\",\n        },\n        \"file\": {\n            \"formatter\": \"default\",\n            \"class\": \"logging.handlers.RotatingFileHandler\",\n            \"filename\": LOG_FILE,\n            \"maxBytes\": LOG_MAX_BYTES,\n            \"backupCount\": LOG_BACKUP_COUNT,\n            \"encoding\": \"utf-8\",\n        },\n    },\n    \"loggers\": {\n        \"uvicorn\": {\"handlers\": [\"default\", \"file\"], \"level\": \"INFO\", \"propagate\": False},\n        \"uvicorn.error\": {\"handlers\": [\"default\", \"file\"], \"level\": \"INFO\", \"propagate\": False},\n        \"uvicorn.access\": {\"handlers\": [\"default\", \"file\"], \"level\": \"INFO\", \"propagate\": False},\n        \"src.utils.logger\": {\"handlers\": [\"default\", \"file\"], \"level\": \"INFO\", \"propagate\": False}\n    },\n}\n\ndictConfig(LOGGING_CONFIG)\n\n\ndef _install_trace_context_filters() -> None:\n    \"\"\"dictConfig 之后注册，避免字符串解析 Filter 时在包未加载完的情况下循环导入。\"\"\"\n    from src.utils.trace_context import TraceContextFilter\n\n    filt = TraceContextFilter()\n    for log_name in (\"uvicorn\", \"uvicorn.error\", \"uvicorn.access\", \"src.utils.logger\"):\n        for h in logging.getLogger(log_name).handlers:\n            h.addFilter(filt)\n\n\n_install_trace_context_filters()\n\nlogging.getLogger(\"uvicorn.access\").addFilter(SkipGenVideoStatusAccessLogFilter())\n\nlogger = logging.getLogger(__name__)\n"
  },
  {
    "path": "src/utils/media.py",
    "content": "import subprocess\nimport os\nfrom typing import Optional\nfrom src.utils.logger import logger\n\n\ndef get_media_duration(file_path: str) -> Optional[int]:\n    \"\"\"\n    获取音视频文件的时长，返回微秒数\n    \n    Args:\n        file_path (str): 音视频文件的路径\n        \n    Returns:\n        Optional[int]: 文件时长（微秒），如果获取失败则返回 None\n        \n    Example:\n        duration_us = get_media_duration(\"test.mp3\")\n        if duration_us:\n            print(f\"文件时长: {duration_us} 微秒\")\n    \"\"\"\n    try:\n        # 检查文件是否存在\n        if not os.path.exists(file_path):\n            logger.warning(f\"文件不存在: {file_path}\")\n            return None\n            \n        # 使用 ffprobe 获取媒体信息\n        cmd = [\n            \"ffprobe\",\n            \"-v\", \"error\",\n            \"-show_entries\", \"format=duration\",\n            \"-of\", \"default=noprint_wrappers=1:nokey=1\",\n            file_path\n        ]\n        \n        # 执行命令并获取输出\n        result = subprocess.run(\n            cmd,\n            stdout=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n            text=True,\n            timeout=30  # 设置超时时间\n        )\n        \n        # 检查命令执行是否成功\n        if result.returncode != 0:\n            logger.error(f\"ffprobe 执行失败: {result.stderr}\")\n            return None\n            \n        # 解析输出\n        duration_str = result.stdout.strip()\n        if not duration_str:\n            logger.warning(f\"未能获取到文件时长: {file_path}\")\n            return None\n            \n        # 转换为浮点数（秒）\n        duration_seconds = float(duration_str)\n        \n        # 转换为微秒\n        duration_microseconds = int(duration_seconds * 1_000_000)\n        \n        logger.info(f\"文件 {file_path} 的时长: {duration_microseconds} 微秒\")\n        return duration_microseconds\n        \n    except subprocess.TimeoutExpired:\n        logger.error(f\"ffprobe 执行超时: {file_path}\")\n        return None\n    except ValueError as e:\n        logger.error(f\"解析时长失败: {e}, 输出内容: {result.stdout if 'result' in locals() else 'N/A'}\")\n        return None\n    except Exception as e:\n        logger.error(f\"获取媒体文件时长时发生未知错误: {e}\")\n        return None\n\n\ndef get_media_duration_formatted(file_path: str) -> Optional[str]:\n    \"\"\"\n    获取音视频文件的时长，返回格式化的字符串 (HH:MM:SS.mmm)\n    \n    Args:\n        file_path (str): 音视频文件的路径\n        \n    Returns:\n        Optional[str]: 格式化的时长字符串，如果获取失败则返回 None\n    \"\"\"\n    duration_us = get_media_duration(file_path)\n    if duration_us is None:\n        return None\n        \n    # 转换为秒和毫秒\n    total_seconds = duration_us / 1_000_000\n    hours = int(total_seconds // 3600)\n    minutes = int((total_seconds % 3600) // 60)\n    seconds = int(total_seconds % 60)\n    milliseconds = int((total_seconds % 1) * 1000)\n    \n    return f\"{hours:02d}:{minutes:02d}:{seconds:02d}.{milliseconds:03d}\""
  },
  {
    "path": "src/utils/oss.py",
    "content": "# 实现阿里云对象存储（OSS）的上传功能\nimport datetime\nimport os\nimport time\nfrom typing import Optional\n\nimport config\nfrom exceptions import CustomError, CustomException\nfrom src.utils.logger import logger\nfrom src.utils.storage_upload_retry import run_with_storage_retry\n\n# oss2.resumable_upload：大于 1MB 走 Multipart（与 COS upload_file 默认 PartSize=1 行为一致：≤1MB 仍为单次 PutObject）\n_OSS_MULTIPART_THRESHOLD_BYTES = 1024 * 1024 + 1\n# 弱网可适当保留 2；并发过高易触发超时则改为 1\n_OSS_MULTIPART_NUM_THREADS = 2\n\n\ndef oss_upload_file(file_path: str, expire_days: Optional[int] = None) -> str:\n    \"\"\"\n    上传文件到 OSS，返回带签名的临时URL，链接在指定天数后失效（见 config.VIDEO_GEN_RETENTION_DAYS）。\n    使用 oss2.resumable_upload：大于 1MB 时用分片（Multipart）上传并支持断点续传；≤1MB 仍为单次 PutObject。\n\n    Args:\n        file_path: 文件路径\n        expire_days: URL 有效期天数；为 None 时使用 config.VIDEO_GEN_RETENTION_DAYS（视频生成任务默认）\n\n    Returns:\n        str: 带签名的临时下载URL（有效期为 expire_days 天）\n\n    Raises:\n        CustomException: 上传失败\n    \"\"\"\n    if expire_days is None:\n        expire_days = config.VIDEO_GEN_RETENTION_DAYS\n\n    try:\n        import oss2\n        from oss2 import make_upload_store, resumable_upload\n    except ImportError as e:\n        logger.error(f\"OSS SDK import failed: {e}\")\n        raise CustomException(CustomError.INTERNAL_SERVER_ERROR, \"OSS SDK not installed\")\n\n    now = datetime.datetime.now()\n    current_date = now.strftime(\"%Y-%m-%d\")\n    current_hour = now.strftime(\"%H\")\n    filename = os.path.basename(file_path)\n    key = f\"{current_date}/{current_hour}/{filename}\"\n\n    def do_upload() -> str:\n        expire_time = datetime.datetime.now() + datetime.timedelta(days=expire_days)\n        expire_time_str = expire_time.strftime(\"%Y-%m-%dT%H:%M:%S.000Z\")\n\n        auth = oss2.Auth(config.OSS_ACCESS_KEY_ID, config.OSS_ACCESS_KEY_SECRET)\n        bucket = oss2.Bucket(auth, config.OSS_ENDPOINT, config.OSS_BUCKET_NAME)\n\n        os.makedirs(config.TEMP_DIR, exist_ok=True)\n        ckpt = make_upload_store(root=config.TEMP_DIR, dir=\"oss_multipart_ckpt\")\n\n        response = resumable_upload(\n            bucket,\n            key,\n            file_path,\n            store=ckpt,\n            multipart_threshold=_OSS_MULTIPART_THRESHOLD_BYTES,\n            part_size=None,\n            num_threads=_OSS_MULTIPART_NUM_THREADS,\n        )\n        logger.info(f\"OSS upload success, key: {key}, expire time: {expire_time_str}, status: {response.status}\")\n\n        signed_url = bucket.sign_url(\n            method=\"GET\",\n            key=key,\n            expires=expire_days * 24 * 3600,\n        )\n        logger.info(f\"Generated OSS signed URL valid for {expire_days} day(s), URL: {signed_url[:100]}...\")\n        return signed_url\n\n    _t0 = time.perf_counter()\n    success = False\n    try:\n        result = run_with_storage_retry(do_upload, context=\"OSS\")\n        success = True\n        return result\n    except Exception as e:\n        logger.error(f\"OSS upload failed: {e}\")\n        raise CustomException(CustomError.INTERNAL_SERVER_ERROR, \"OSS upload failed\")\n    finally:\n        elapsed = time.perf_counter() - _t0\n        logger.info(\n            \"OSS upload %s, file=%s, key=%s, total_duration_sec=%.3f\",\n            \"success\" if success else \"failed\",\n            file_path,\n            key,\n            elapsed,\n        )\n"
  },
  {
    "path": "src/utils/points.py",
    "content": "from typing import Dict, Any, Optional\nimport time\n\nfrom exceptions import CustomException, CustomError\nfrom src.utils.logger import logger\nimport requests\n\n# 常量定义\nPOINTS_API_BASE_URL = \"https://jcaigc.cn/openapi/v1/user/points\"\nAPI_HEADERS = {\n    'User-Agent': 'CapcutMate/1.0',\n    'Accept': 'application/json',\n    'Content-Type': 'application/json'\n}\nDEFAULT_API_TIMEOUT = 30  # 默认API超时时间为30秒\nUSER_API_RETRY_ATTEMPTS = 3  # 连接失败或超时后额外重试次数（首次 + 3 次重试，最多 4 次请求）\nUSER_API_RETRY_INTERVAL_SEC = 1\n\ndef get_user_points(api_key: str) -> float:\n    \"\"\"\n    根据API Key获取用户积分\n    \n    Args:\n        api_key: 用户的API Key\n    \n    Returns:\n        float: 用户当前积分\n    \n    Raises:\n        CustomException: 当获取积分失败时\n    \"\"\"\n    try:\n        # 调用获取积分API\n        params = {'apiKey': api_key}\n        result = _call_user_api('GET', '', params=params)\n        \n        # 检查响应码并处理结果\n        code = result.get('code', -1)\n        \n        if code == 0:\n            points = _extract_points_from_response(result)\n            logger.info(f\"Successfully retrieved user points: {points} for API key: {api_key[:8]}***\")\n            return points\n        elif code == 10007:  # API Key无效\n            logger.error(f\"Invalid API key, result: {result}, code: {code}\")\n            raise CustomException(CustomError.INVALID_APIKEY, detail=f\"{api_key}\")\n        else:\n            logger.error(f\"Failed to get user points: {result}, code: {code}\")\n            raise CustomException(CustomError.UNKNOWN_ERROR, detail=f\"Unknown error occurred while getting user points: {result}, code: {code}\")\n            \n    except CustomException:\n        raise\n    except Exception as e:\n        logger.error(f\"Unexpected error getting user points for API key {api_key[:8]}***: {str(e)}\")\n        raise CustomException(CustomError.UNKNOWN_ERROR, detail=f\"Unknown error occurred while getting user points: {str(e)}\")\n\n\ndef deduct_user_points(api_key: str, points: float, desc: str) -> bool:\n    \"\"\"\n    根据API Key减少用户积分\n    \n    Args:\n        api_key: 用户的API Key\n        points: 要减少的积分数量（必须为正数）\n        desc: 减少积分的原因描述\n    \n    Returns:\n        bool: True表示扣减成功，False表示失败\n    Raises:\n        CustomException: 仅当apiKey无效时抛出异常\n    \"\"\"\n    try:\n        # 调用扣减积分API\n        json_data = {\n            'apiKey': api_key,\n            'points': float(points),\n            'desc': desc.strip()\n        }\n        \n        result = _call_user_api('POST', '/deduct', json_data=json_data)\n        code = result.get('code', -1)\n        \n        if code == 0:\n            logger.info(f\"Successfully deducted {points} points for API key {api_key[:8]}***, reason: {desc}\")\n            return True\n        elif code == 10007:  # API Key无效\n            logger.error(f\"Invalid API key for deduct points: {result}, code: {code}\")\n            raise CustomException(CustomError.INVALID_APIKEY, detail=f\"{api_key}\")\n        else:\n            logger.error(f\"Failed to deduct points: {result}, code: {code}\")\n            return False\n    except CustomException as e:\n        logger.warning(f\"Deduct points failed, API key: {api_key[:8]}***, error: {str(e)}\")\n        return False\n    except Exception as e:\n        logger.error(f\"Unexpected error deducting points for API key {api_key[:8]}***: {str(e)}\")\n        return False\n\n\ndef _extract_points_from_response(result: Dict[str, Any]) -> float:\n    \"\"\"\n    从响应中提取积分数据\n    \n    Args:\n        result: API响应数据\n    \n    Returns:\n        float: 积分值\n    \n    Raises:\n        CustomException: 积分数据格式错误时\n    \"\"\"\n    try:\n        points = result.get('data', {}).get('points', 0.0)\n        return float(points)\n    except (ValueError, TypeError):\n        logger.error(f\"Invalid points format in API response, result: {result}\")\n        raise CustomException(CustomError.INTERNAL_SERVER_ERROR, detail=\"Points format error\")\n\n\ndef _parse_api_response(response: requests.Response) -> Dict[str, Any]:\n    \"\"\"\n    解析API响应的JSON数据\n    \n    Args:\n        response: HTTP响应对象\n    \n    Returns:\n        Dict[str, Any]: 解析后的JSON数据\n    \n    Raises:\n        CustomException: JSON解析失败时\n    \"\"\"\n    try:\n        return response.json()\n    except ValueError:\n        logger.error(f\"Failed to parse API response as JSON: {response.text}\")\n        raise CustomException(CustomError.INTERNAL_SERVER_ERROR, detail=\"API response format error\")\n\ndef _call_user_api(method: str, endpoint: str, params: Optional[dict] = None, json_data: Optional[dict] = None, timeout: int = DEFAULT_API_TIMEOUT) -> Dict[str, Any]:\n    \"\"\"\n    调用用户积分相关API的通用方法\n    \n    Args:\n        method: HTTP方法 ('GET' 或 'POST')\n        endpoint: API端点路径\n        params: 查询参数（用于GET请求）\n        json_data: JSON数据（用于POST请求）\n        timeout: 请求超时时间（秒）\n    \n    Returns:\n        Dict[str, Any]: API响应的JSON数据\n    \n    Raises:\n        CustomException: 当API调用失败或返回错误时\n    \"\"\"\n    url = f\"{POINTS_API_BASE_URL}{endpoint}\"\n    max_attempts = USER_API_RETRY_ATTEMPTS + 1\n\n    for attempt in range(max_attempts):\n        try:\n            if attempt == 0:\n                logger.info(f\"Calling user API: {method} {url}\")\n            else:\n                logger.info(f\"Calling user API: {method} {url} (attempt {attempt + 1}/{max_attempts})\")\n\n            # 根据方法类型发送请求\n            if method.upper() == 'GET':\n                response = requests.get(url, params=params, headers=API_HEADERS, timeout=timeout)\n            elif method.upper() == 'POST':\n                response = requests.post(url, json=json_data, headers=API_HEADERS, timeout=timeout)\n            else:\n                raise ValueError(f\"Unsupported HTTP method: {method}\")\n\n            response.raise_for_status()\n\n            # 解析JSON响应\n            return _parse_api_response(response)\n\n        except (requests.exceptions.Timeout, requests.exceptions.ConnectionError) as e:\n            if attempt < USER_API_RETRY_ATTEMPTS:\n                logger.warning(\n                    f\"User API {type(e).__name__}, will retry ({attempt + 1}/{USER_API_RETRY_ATTEMPTS}) \"\n                    f\"after {USER_API_RETRY_INTERVAL_SEC}s: {method} {url}\"\n                )\n                time.sleep(USER_API_RETRY_INTERVAL_SEC)\n                continue\n\n            if isinstance(e, requests.exceptions.Timeout):\n                logger.error(f\"User API timeout after {max_attempts} attempts: {method} {url}\")\n                raise CustomException(CustomError.INTERNAL_SERVER_ERROR, detail=\"User API call timeout\")\n            logger.error(f\"User API connection error after {max_attempts} attempts: {method} {url}\")\n            raise CustomException(CustomError.INTERNAL_SERVER_ERROR, detail=\"Unable to connect to user API service\")\n\n        except requests.exceptions.RequestException as e:\n            logger.error(f\"User API request failed: {method} {url}, error: {str(e)}\")\n            raise CustomException(CustomError.INTERNAL_SERVER_ERROR, detail=f\"User API request failed: {str(e)}\")\n        except CustomException:\n            raise\n        except Exception as e:\n            logger.error(f\"Unexpected error in user API call: {method} {url}, error: {str(e)}\")\n            raise CustomException(CustomError.UNKNOWN_ERROR, detail=f\"Unknown error occurred while calling user API: {str(e)}\")\n"
  },
  {
    "path": "src/utils/storage_upload_retry.py",
    "content": "# 对象存储上传：可重试错误识别与退避重试（独立模块，供 cos/oss 使用，避免与 upload_file 相向依赖）\nimport errno\nimport random\nimport time\nfrom collections.abc import Callable\nfrom typing import Iterator, TypeVar\n\nimport requests\nimport urllib3.exceptions\nfrom qcloud_cos.cos_exception import CosClientError, CosServiceError\n\nfrom src.utils.logger import logger\n\ntry:\n    import oss2.exceptions as oss_exc\nexcept ImportError:  # pragma: no cover\n    oss_exc = None  # type: ignore[assignment]\n\n# 业务层整次重试（与 COS SDK 内重试等叠加）\n_STORAGE_UPLOAD_MAX_ATTEMPTS = 5\n_STORAGE_UPLOAD_BASE_DELAY_SEC = 1.0\n_STORAGE_UPLOAD_MAX_DELAY_SEC = 30.0\n\nT = TypeVar(\"T\")\n\n_RETRYABLE_ERRNOS = frozenset(\n    {\n        errno.ECONNRESET,\n        errno.ETIMEDOUT,\n        errno.EPIPE,\n        errno.ECONNABORTED,\n        errno.ENETUNREACH,\n        errno.EHOSTUNREACH,\n        10053,\n        10054,\n    }\n)\n\n\ndef _iter_exception_chain(exc: BaseException) -> Iterator[BaseException]:\n    seen: set[int] = set()\n    e: BaseException | None = exc\n    while e is not None and id(e) not in seen:\n        yield e\n        seen.add(id(e))\n        nxt = e.__cause__ or e.__context__\n        e = nxt if nxt is not e else None\n\n\ndef is_retryable_storage_error(exc: BaseException) -> bool:\n    \"\"\"\n    判断是否为“整次重试”可能恢复的错误：网络/超时/连接类、云端临时性 5xx 等。\n    非幂等或确定性的客户端错误（4xx 业务、鉴权等）返回 False。\n    \"\"\"\n    for e in _iter_exception_chain(exc):\n        if isinstance(\n            e,\n            (\n                requests.exceptions.ConnectionError,\n                requests.exceptions.Timeout,\n                requests.exceptions.ChunkedEncodingError,\n                urllib3.exceptions.ConnectTimeoutError,\n                urllib3.exceptions.ReadTimeoutError,\n                urllib3.exceptions.NewConnectionError,\n                urllib3.exceptions.ProtocolError,\n            ),\n        ):\n            return True\n        if isinstance(e, OSError) and getattr(e, \"errno\", None) in _RETRYABLE_ERRNOS:\n            return True\n        if isinstance(e, CosClientError):\n            return True\n        if isinstance(e, CosServiceError):\n            try:\n                code = e.get_status_code()\n            except Exception:\n                code = None\n            if code is not None and int(code) >= 500:\n                return True\n            return False\n        if oss_exc is not None:\n            if isinstance(e, oss_exc.RequestError):\n                return True\n            if isinstance(e, oss_exc.OssError):\n                st = getattr(e, \"status\", None)\n                if st == oss_exc.OSS_REQUEST_ERROR_STATUS:\n                    return True\n                if isinstance(st, int) and st >= 500:\n                    return True\n                if isinstance(st, int) and st == 408:\n                    return True\n    return False\n\n\ndef run_with_storage_retry(operation: Callable[[], T], *, context: str = \"\") -> T:\n    \"\"\"对上传/签名等操作做有限次重试，指数退避 + 全抖动。\"\"\"\n    max_attempts = max(1, _STORAGE_UPLOAD_MAX_ATTEMPTS)\n    base = max(0.05, _STORAGE_UPLOAD_BASE_DELAY_SEC)\n    cap = max(base, _STORAGE_UPLOAD_MAX_DELAY_SEC)\n\n    prefix = f\"{context} \" if context else \"\"\n    last: BaseException | None = None\n    for attempt in range(max_attempts):\n        try:\n            return operation()\n        except Exception as e:\n            last = e\n            if attempt >= max_attempts - 1 or not is_retryable_storage_error(e):\n                raise\n            upper = min(cap, base * (2**attempt))\n            delay = random.uniform(0.0, upper)\n            logger.warning(\n                \"%sstorage upload attempt %d/%d failed: %s; retrying in %.2fs\",\n                prefix,\n                attempt + 1,\n                max_attempts,\n                e,\n                delay,\n            )\n            time.sleep(delay)\n    assert last is not None\n    raise last\n"
  },
  {
    "path": "src/utils/trace_context.py",
    "content": "\"\"\"\n分布式追踪上下文（W3C Trace Context + 常见 Request-ID）。\n\n- 入站：优先解析 `traceparent`（W3C），否则 `X-Request-ID` / `X-Trace-Id`；\n- 出站响应：`traceparent`、`X-Request-ID`（与 trace-id 对齐）；\n- 运行态：`contextvars` 供任意代码通过 `get_trace_id()` 读取，并由 Logging Filter 写入每条日志。\n\"\"\"\nfrom __future__ import annotations\n\nimport contextvars\nimport hashlib\nimport logging\nimport secrets\nimport uuid\nfrom typing import Optional, Tuple\n\n# --- W3C Trace Context: https://www.w3.org/TR/trace-context/\n\nTRACEPARENT_HEADER = \"traceparent\"\nREQUEST_ID_HEADERS = (\"x-request-id\", \"x-trace-id\")\n\ntrace_id_var: contextvars.ContextVar[Optional[str]] = contextvars.ContextVar(\n    \"trace_id\", default=None\n)\nspan_id_var: contextvars.ContextVar[Optional[str]] = contextvars.ContextVar(\n    \"span_id\", default=None\n)\n\n\ndef get_trace_id() -> Optional[str]:\n    return trace_id_var.get()\n\n\ndef get_span_id() -> Optional[str]:\n    return span_id_var.get()\n\n\ndef _gen_trace_id() -> str:\n    return uuid.uuid4().hex\n\n\ndef _gen_span_id() -> str:\n    return secrets.token_hex(8)\n\n\ndef parse_traceparent(value: str) -> Optional[Tuple[str, str]]:\n    \"\"\"\n    解析 traceparent，成功返回 (trace_id, parent_span_id)，均为小写十六进制字符串。\n    trace-id 全 0 视为无效。\n    \"\"\"\n    parts = value.strip().split(\"-\")\n    if len(parts) != 4:\n        return None\n    _ver, tid, pid, _flags = parts\n    if len(tid) != 32 or len(pid) != 16:\n        return None\n    tid_l, pid_l = tid.lower(), pid.lower()\n    hex32 = set(\"0123456789abcdef\")\n    if not all(c in hex32 for c in tid_l) or not all(c in hex32 for c in pid_l):\n        return None\n    if tid_l == \"0\" * 32:\n        return None\n    return tid_l, pid_l\n\n\ndef build_traceparent(trace_id: str, span_id: str, sampled: bool = True) -> str:\n    \"\"\"组装标准 traceparent（version 00）。\"\"\"\n    flags = \"01\" if sampled else \"00\"\n    return f\"00-{trace_id}-{span_id}-{flags}\"\n\n\ndef _normalize_custom_request_id(raw: str) -> str:\n    \"\"\"将客户端 Request-ID 规范为 32 位 hex trace-id；无法解析则稳定哈希到 32 hex。\"\"\"\n    s = raw.strip()\n    if not s:\n        return _gen_trace_id()\n    no_dash = s.replace(\"-\", \"\").lower()\n    hexset = set(\"0123456789abcdef\")\n    if len(no_dash) == 32 and all(c in hexset for c in no_dash):\n        return no_dash\n    return hashlib.sha256(s.encode(\"utf-8\")).hexdigest()[:32]\n\n\ndef resolve_trace_from_headers(header_getter) -> Tuple[str, str]:\n    \"\"\"\n    从请求头解析或生成 (trace_id, span_id)。\n    header_getter: 与 Starlette Headers 兼容，如 headers.get(name)。\n    \"\"\"\n    tp = header_getter(TRACEPARENT_HEADER)\n    if tp:\n        parsed = parse_traceparent(tp)\n        if parsed:\n            tid, _parent = parsed\n            return tid, _gen_span_id()\n\n    for name in REQUEST_ID_HEADERS:\n        v = header_getter(name)\n        if v and str(v).strip():\n            return _normalize_custom_request_id(str(v)), _gen_span_id()\n\n    return _gen_trace_id(), _gen_span_id()\n\n\nclass TraceContextFilter(logging.Filter):\n    \"\"\"为 LogRecord 增加 trace_id 字段，供 Formatter 使用。\"\"\"\n\n    def filter(self, record: logging.LogRecord) -> bool:\n        tid = get_trace_id()\n        record.trace_id = tid if tid else \"-\"\n        return True\n"
  },
  {
    "path": "src/utils/upload_file.py",
    "content": "# 对象存储统一上传入口（配置判断 + 路由分发；具体上传与重试在 cos.py / oss.py + storage_upload_retry）\nfrom typing import Optional\n\nimport config\nfrom exceptions import CustomError, CustomException\nfrom src.utils.logger import logger\nfrom src.utils.cos import cos_upload_file\nfrom src.utils.oss import oss_upload_file\n\n\ndef _is_valid_storage_config(value: str) -> bool:\n    \"\"\"判断存储配置项是否有效（空串和占位符视为未配置）。\"\"\"\n    normalized = (value or \"\").strip()\n    return normalized != \"\" and normalized.lower() != \"xxx\"\n\n\ndef _is_cos_configured() -> bool:\n    \"\"\"判断 COS 配置是否完整有效。\"\"\"\n    return all(\n        _is_valid_storage_config(item)\n        for item in (config.COS_SECRET_ID, config.COS_SECRET_KEY, config.COS_BUCKET_NAME, config.COS_REGION)\n    )\n\n\ndef _is_oss_configured() -> bool:\n    \"\"\"判断 OSS 配置是否完整有效。\"\"\"\n    return all(\n        _is_valid_storage_config(item)\n        for item in (\n            config.OSS_ACCESS_KEY_ID,\n            config.OSS_ACCESS_KEY_SECRET,\n            config.OSS_BUCKET_NAME,\n            config.OSS_ENDPOINT,\n        )\n    )\n\n\ndef upload_file(file_path: str, expire_days: Optional[int] = None) -> str:\n    \"\"\"\n    上传文件到对象存储并返回带签名的临时URL。\n\n    选择策略：\n    1. 若 COS 配置完整，优先使用 COS\n    2. 否则若 OSS 配置完整，使用 OSS\n    3. 都未配置时抛出异常\n    \"\"\"\n    if expire_days is None:\n        expire_days = config.VIDEO_GEN_RETENTION_DAYS\n\n    try:\n        if _is_cos_configured():\n            logger.info(\"Detected COS config, using COS upload\")\n            return cos_upload_file(file_path=file_path, expire_days=expire_days)\n\n        if _is_oss_configured():\n            logger.info(\"COS config not found, fallback to OSS upload\")\n            return oss_upload_file(file_path=file_path, expire_days=expire_days)\n\n        raise CustomException(\n            CustomError.INTERNAL_SERVER_ERROR,\n            \"Neither COS nor OSS storage config is available\"\n        )\n    except Exception as e:\n        if isinstance(e, CustomException):\n            raise\n        logger.error(f\"Storage upload failed: {e}\")\n        raise CustomException(CustomError.INTERNAL_SERVER_ERROR, \"Storage upload failed\")\n"
  },
  {
    "path": "src/utils/video_task_manager.py",
    "content": "\"\"\" \n视频生成异步任务队列管理器\n支持任务排队、状态跟踪和结果查询\n\"\"\"\nimport asyncio\nimport queue\nimport threading\nfrom concurrent.futures import ThreadPoolExecutor\nfrom datetime import datetime\nfrom enum import Enum\nfrom typing import Dict, Optional, Tuple, Any\nfrom dataclasses import dataclass\nfrom src.utils.logger import logger\nfrom src.utils import helper\nfrom src.utils.video_task_store import (\n    get_completed_by_draft_id,\n    prune_if_needed,\n    save_completed_result,\n)\nimport src.pyJianYingDraft as draft\nimport config\nimport os\nimport shutil\nimport sys\nimport subprocess\nimport json\n\n# draft_content.json 中 duration 为微秒；低于 3 秒视为空草稿，不进入剪映导出\nMIN_DRAFT_EXPORT_DURATION_US = 3 * 1_000_000\n\n# gen_video：同时下载草稿的最大并发，超出部分在 _download_executor 队列中排队\nDRAFT_DOWNLOAD_MAX_CONCURRENT = 3\n\n# gen_video：上传到对象存储的最大并发，超出部分在 _upload_executor 队列中排队\nOBJECT_STORAGE_UPLOAD_MAX_CONCURRENT = 2\n\n# 如果是Linux系统，则不导入uiautomation，并避免执行相关代码\ntry:\n    from uiautomation import UIAutomationInitializerInThread  # type: ignore\nexcept ImportError:\n    # 在缺少依赖的系统上创建一个占位符\n    class UIAutomationInitializerInThread:  # type: ignore\n        def __enter__(self):\n            pass\n        def __exit__(self, *args):\n            pass\n\n\nclass TaskStatus(Enum):\n    \"\"\"任务状态枚举\"\"\"\n    PENDING = \"pending\"      # 等待中\n    PROCESSING = \"processing\"  # 处理中\n    COMPLETED = \"completed\"   # 已完成\n    FAILED = \"failed\"        # 失败\n\n\n@dataclass\nclass VideoGenTask:\n    \"\"\"视频生成任务数据类\"\"\"\n    draft_url: str\n    draft_id: str\n    status: TaskStatus\n    created_at: datetime\n    started_at: Optional[datetime] = None\n    completed_at: Optional[datetime] = None\n    video_url: str = \"\"\n    error_message: str = \"\"\n    progress: int = 0  # 进度百分比 0-100\n    api_key: Optional[str] = None  # 存储API密钥用于计费\n    outfile: str = \"\"  # 导出目标路径，在下载阶段生成\n\n\nclass VideoGenTaskManager:\n    \"\"\"视频生成任务管理器 - 单例模式\n\n    每个任务在独立协程中执行：草稿下载由专用线程池执行，并发上限为\n    DRAFT_DOWNLOAD_MAX_CONCURRENT，超出部分在线程池队列中排队；\n    剪映 RPA 导出由 export_video_lock 全局串行；COS/OSS 上传在独立线程池中执行，\n    并发上限为 OBJECT_STORAGE_UPLOAD_MAX_CONCURRENT。\n    \"\"\"\n    \n    _instance = None\n    _lock = threading.Lock()\n    \n    def __new__(cls):\n        if cls._instance is None:\n            with cls._lock:\n                if cls._instance is None:\n                    cls._instance = super().__new__(cls)\n        return cls._instance\n    \n    def __init__(self):\n        if hasattr(self, '_initialized'):\n            return\n        self._initialized = True\n        \n        # 任务存储：{draft_url: VideoGenTask}\n        self.tasks: Dict[str, VideoGenTask] = {}\n        # 跨线程任务队列（HTTP 线程 put、worker 线程 get）。不能用 asyncio.Queue：其在 __init__\n        # 时绑定的 loop 与 worker 内 new_event_loop() 不一致，会触发 “bound to a different event loop”。\n        self.task_queue: queue.Queue = queue.Queue()\n        _download_workers = DRAFT_DOWNLOAD_MAX_CONCURRENT\n        _upload_workers = OBJECT_STORAGE_UPLOAD_MAX_CONCURRENT\n        self._download_executor = ThreadPoolExecutor(\n            max_workers=_download_workers,\n            thread_name_prefix=\"draft_dl\",\n        )\n        self._upload_executor = ThreadPoolExecutor(\n            max_workers=_upload_workers,\n            thread_name_prefix=\"cos_upload\",\n        )\n        # 导出视频专用锁（确保任何时候只有一个线程执行剪映 RPA 导出）\n        self.export_video_lock = threading.Lock()\n        # 有多少个线程已进入「仅导出」阶段（含在 export_video_lock 上阻塞等待），用于对照默认线程池挤占\n        self._export_metrics_lock = threading.Lock()\n        self._export_phase_active = 0\n        # 工作线程\n        self.worker_thread: Optional[threading.Thread] = None\n        # 停止标志\n        self.stop_flag = threading.Event()\n\n        _default_asyncio_pool = min(32, (os.cpu_count() or 1) + 4)\n        logger.info(\n            \"VideoGenTaskManager initialized: draft_dl max_workers=%s (queued beyond that), \"\n            \"cos_upload max_workers=%s (queued beyond that). Jianying export uses run_in_executor(None) \"\n            \"and shares the asyncio default thread pool with sync FastAPI routes \"\n            \"(typical cap min(32, cpu+4)=%s). When export-phase concurrency reaches that level, \"\n            \"synchronous HTTP handlers may stall.\",\n            _download_workers,\n            _upload_workers,\n            _default_asyncio_pool,\n        )\n    \n    def submit_task(self, draft_url: str, api_key: str = None) -> None:\n        \"\"\"\n        提交视频生成任务\n        \n        Args:\n            draft_url: 草稿URL\n            api_key: API密钥，用于计费\n        \"\"\"\n        # 提取草稿ID\n        draft_id = helper.get_url_param(draft_url, \"draft_id\")\n        if not draft_id:\n            raise ValueError(\"无效的草稿URL\")\n        \n        # 检查是否已有相同草稿的任务在进行\n        if draft_url in self.tasks:\n            existing_task = self.tasks[draft_url]\n            if existing_task.status in [TaskStatus.PENDING, TaskStatus.PROCESSING]:\n                logger.info(f\"Task already exists for draft_url: {draft_url}\")\n                return\n        \n        # 创建新任务\n        task = VideoGenTask(\n            draft_url=draft_url,\n            draft_id=draft_id,\n            status=TaskStatus.PENDING,\n            created_at=datetime.now(),\n            api_key=api_key  # 存储API密钥用于计费\n        )\n        \n        # 存储任务\n        self.tasks[draft_url] = task\n        \n        self._add_task_to_queue_sync(task)\n        \n        # 启动工作线程（如果还没启动）\n        self._ensure_worker_running()\n        \n        logger.info(f\"Task submitted for draft_url: {draft_url}\")\n    \n    def _add_task_to_queue_sync(self, task: VideoGenTask) -> None:\n        \"\"\"Thread-safe enqueue from FastAPI worker threads (or any thread).\"\"\"\n        self.task_queue.put(task)\n        logger.info(f\"Task added to queue: {task.draft_url}\")\n    \n    def get_task_status(self, draft_url: str) -> Optional[Dict[str, Any]]:\n        \"\"\"\n        根据草稿URL获取任务状态\n        \n        Args:\n            draft_url: 草稿URL\n            \n        Returns:\n            任务状态信息，如果不存在返回None\n        \"\"\"\n        # 热路径：本进程内提交过的任务始终在内存，避免每次轮询都抢 SQLite 全局锁\n        task = self.tasks.get(draft_url)\n        if task:\n            return {\n                \"draft_url\": task.draft_url,\n                \"status\": task.status.value,\n                \"progress\": task.progress,\n                \"video_url\": task.video_url,\n                \"error_message\": task.error_message,\n                \"created_at\": task.created_at.isoformat(),\n                \"started_at\": task.started_at.isoformat() if task.started_at else None,\n                \"completed_at\": task.completed_at.isoformat() if task.completed_at else None,\n            }\n\n        prune_if_needed()\n        draft_id = helper.get_url_param(draft_url, \"draft_id\")\n        return get_completed_by_draft_id(draft_id)\n\n    def get_active_render_count(self) -> int:\n        \"\"\"\n        当前进行中的云渲染草稿数量：排队(pending) + 渲染中(processing)。\n        不含已完成(completed)、失败(failed)。\n        \"\"\"\n        active = (TaskStatus.PENDING, TaskStatus.PROCESSING)\n        return sum(1 for t in self.tasks.values() if t.status in active)\n\n    def _ensure_worker_running(self):\n        \"\"\"确保工作线程正在运行\"\"\"\n        if self.worker_thread is None or not self.worker_thread.is_alive():\n            self.stop_flag.clear()\n            self.worker_thread = threading.Thread(target=self._worker_loop, daemon=True)\n            self.worker_thread.start()\n            logger.info(\"Worker thread started\")\n    \n    def _worker_loop(self):\n        \"\"\"工作线程主循环\"\"\"\n        logger.info(\"Worker loop started\")\n        \n        # 在工作线程中创建新的事件循环\n        loop = asyncio.new_event_loop()\n        asyncio.set_event_loop(loop)\n        \n        try:\n            loop.run_until_complete(self._async_worker_loop())\n        finally:\n            loop.close()\n    \n    async def _async_worker_loop(self):\n        \"\"\"从队列取任务并启动独立协程；下载/上传并发受各自线程池限制，导出串行。\"\"\"\n        while not self.stop_flag.is_set():\n            try:\n                # Blocking get with timeout on thread pool — queue is thread-safe, not loop-bound.\n                task = await asyncio.to_thread(self.task_queue.get, True, 1.0)\n                t = asyncio.create_task(self._process_task(task))\n                t.add_done_callback(self._log_async_task_done)\n            except queue.Empty:\n                continue\n            except Exception as e:\n                logger.error(f\"Worker loop error: {e}\")\n                await asyncio.sleep(1)\n\n    def _log_async_task_done(self, fut: asyncio.Task) -> None:\n        try:\n            fut.result()\n        except asyncio.CancelledError:\n            pass\n        except Exception as e:\n            logger.exception(f\"Async task finished with error: {e}\")\n\n    def _persist_terminal_task(self, task: VideoGenTask) -> None:\n        \"\"\"将已完成或失败的任务写入 SQLite（仅终态）。\"\"\"\n        if task.status not in (TaskStatus.COMPLETED, TaskStatus.FAILED):\n            return\n        task.completed_at = datetime.now()\n        try:\n            save_completed_result(\n                draft_id=task.draft_id,\n                draft_url=task.draft_url,\n                status=task.status.value,\n                progress=task.progress,\n                video_url=task.video_url,\n                error_message=task.error_message,\n                created_at=task.created_at,\n                started_at=task.started_at,\n                completed_at=task.completed_at,\n            )\n        except Exception as persist_err:\n            logger.exception(\n                \"Failed to persist video gen task result: %s\", persist_err\n            )\n\n    async def _run_upload_and_finalize(self, task: VideoGenTask) -> None:\n        \"\"\"导出成功后的上传与落库；上传受 _upload_executor 并发上限约束，绑定本 task 的 outfile/draft_id。\"\"\"\n        loop = asyncio.get_running_loop()\n        try:\n            video_url, error_message = await loop.run_in_executor(\n                self._upload_executor,\n                self._phase_cos_upload_finalize,\n                task,\n            )\n            if video_url:\n                task.status = TaskStatus.COMPLETED\n                task.video_url = video_url\n                task.progress = 100\n                logger.info(f\"Task completed successfully: {task.draft_url}\")\n            else:\n                task.status = TaskStatus.FAILED\n                task.error_message = error_message\n                task.progress = 0\n                logger.error(f\"Task failed: {task.draft_url}, error: {error_message}\")\n        except Exception as e:\n            task.status = TaskStatus.FAILED\n            task.error_message = str(e)\n            task.progress = 0\n            logger.exception(f\"Upload/finalize exception: {task.draft_url}, error: {e}\")\n            self._cleanup_files(getattr(task, \"outfile\", \"\") or \"\", task.draft_id)\n        finally:\n            self._persist_terminal_task(task)\n\n    async def _process_task(self, task: VideoGenTask):\n        \"\"\"\n        单任务流水线：下载阶段受 _download_executor 并发上限约束；导出串行（export_video_lock）；\n        成功后上传统一异步且不阻塞本循环（上传受 _upload_executor 限制）。\n        \"\"\"\n        logger.info(f\"Processing task: {task.draft_url}\")\n\n        task.status = TaskStatus.PROCESSING\n        task.started_at = datetime.now()\n        task.progress = 10\n\n        loop = asyncio.get_running_loop()\n\n        try:\n            prep_error = await loop.run_in_executor(\n                self._download_executor,\n                self._phase_download_and_prepare,\n                task,\n            )\n            if prep_error:\n                task.status = TaskStatus.FAILED\n                task.error_message = prep_error\n                task.progress = 0\n                logger.error(f\"Task failed: {task.draft_url}, error: {prep_error}\")\n                self._cleanup_files(task.outfile, task.draft_id)\n                self._persist_terminal_task(task)\n                return\n\n            export_error = await loop.run_in_executor(\n                None,\n                self._phase_export_only,\n                task,\n            )\n            if export_error:\n                task.status = TaskStatus.FAILED\n                task.error_message = export_error\n                task.progress = 0\n                logger.error(f\"Task failed: {task.draft_url}, error: {export_error}\")\n                self._cleanup_files(task.outfile, task.draft_id)\n                self._persist_terminal_task(task)\n                return\n\n            ut = asyncio.create_task(self._run_upload_and_finalize(task))\n            ut.add_done_callback(self._log_async_task_done)\n\n        except Exception as e:\n            task.status = TaskStatus.FAILED\n            task.error_message = str(e)\n            task.progress = 0\n            logger.exception(f\"Task exception: {task.draft_url}, error: {e}\")\n            self._cleanup_files(getattr(task, \"outfile\", \"\") or \"\", task.draft_id)\n            self._persist_terminal_task(task)\n    \n    def _check_draft_duration(self, task: VideoGenTask) -> bool:\n        \"\"\"\n        检查草稿中的视频时长是否满足导出要求（draft_content.duration 单位为微秒）。\n        时长不大于 0 或小于 3 秒均视为无效。\n\n        Returns:\n            bool: 是否允许继续导出\n        \"\"\"\n        try:\n            # 构建草稿内容文件路径\n            draft_content_path = os.path.join(config.DRAFT_SAVE_PATH, task.draft_id, \"draft_content.json\")\n            \n            # 检查文件是否存在\n            if not os.path.exists(draft_content_path):\n                logger.error(\n                    \"draft_content.json not found: path=%s draft_id=%s\",\n                    draft_content_path,\n                    task.draft_id,\n                )\n                return False\n            \n            # 读取并解析JSON文件\n            with open(draft_content_path, 'r', encoding='utf-8') as f:\n                draft_content = json.load(f)\n            \n            # 获取时长\n            duration = draft_content.get(\"duration\", 0)\n            \n            if duration <= 0:\n                logger.error(\n                    \"draft duration invalid (<=0): duration_us=%s draft_id=%s\",\n                    duration,\n                    task.draft_id,\n                )\n                return False\n\n            if duration < MIN_DRAFT_EXPORT_DURATION_US:\n                logger.error(\n                    \"draft duration below minimum export length (<3s): duration_us=%s \"\n                    \"draft_id=%s\",\n                    duration,\n                    task.draft_id,\n                )\n                return False\n            \n            logger.info(\n                \"draft duration check passed: duration_us=%s draft_id=%s\",\n                duration,\n                task.draft_id,\n            )\n            return True\n            \n        except json.JSONDecodeError as e:\n            logger.error(\n                \"failed to parse draft_content.json: %s draft_id=%s\",\n                e,\n                task.draft_id,\n            )\n            return False\n        except Exception as e:\n            logger.error(\n                \"draft duration check error: %s draft_id=%s\",\n                e,\n                task.draft_id,\n            )\n            return False\n\n    def _phase_download_and_prepare(self, task: VideoGenTask) -> str:\n        \"\"\"\n        下载草稿并校验时长（可并发执行）。\n\n        Returns:\n            错误信息，成功时返回空字符串。\n        \"\"\"\n        try:\n            task.progress = 20\n            task.outfile = os.path.join(config.DRAFT_DIR, f\"{helper.gen_unique_id()}.mp4\")\n\n            if not sys.platform.startswith(\"win\"):\n                return \"视频生成功能仅在Windows系统上可用\"\n\n            task.progress = 30\n\n            if not self._download_draft(task):\n                logger.error(\"draft download failed: draft_url=%s\", task.draft_url)\n                return f\"草稿下载失败: {task.draft_url}\"\n\n            if not self._check_draft_duration(task):\n                logger.error(\n                    \"draft duration check failed (empty or too short): draft_id=%s\",\n                    task.draft_id,\n                )\n                return f\"草稿中视频时长不大于3秒，请检查草稿内容: {task.draft_id}\"\n\n            task.progress = 40\n            return \"\"\n        except Exception as exc:\n            logger.exception(\n                f\"Export draft failed: draft_id={task.draft_id}, error={exc}\"\n            )\n            return f\"导出草稿失败: {exc}\"\n\n    def _phase_export_only(self, task: VideoGenTask) -> str:\n        \"\"\"\n        仅执行剪映导出（在 export_video_lock 内，全局串行）。\n\n        Returns:\n            错误信息，成功时返回空字符串。\n        \"\"\"\n        with self._export_metrics_lock:\n            self._export_phase_active += 1\n            export_phase_concurrent = self._export_phase_active\n        logger.info(\n            \"Export phase entered (waiting for lock or exporting): \"\n            \"concurrent=%s draft_id=%s\",\n            export_phase_concurrent,\n            task.draft_id,\n        )\n        try:\n            try:\n                if not self._export_video(task, task.outfile):\n                    return \"导出草稿失败\"\n                return \"\"\n            except Exception as exc:\n                logger.exception(\n                    f\"Export draft failed: draft_id={task.draft_id}, error={exc}\"\n                )\n                return f\"导出草稿失败: {exc}\"\n        finally:\n            with self._export_metrics_lock:\n                self._export_phase_active -= 1\n                export_phase_concurrent = self._export_phase_active\n            logger.info(\n                \"Export phase exited: concurrent=%s draft_id=%s\",\n                export_phase_concurrent,\n                task.draft_id,\n            )\n\n    def _phase_cos_upload_finalize(self, task: VideoGenTask) -> Tuple[str, str]:\n        \"\"\"\n        COS 上传、扣费与清理（与其它任务的上传共享线程池，最多 2 路并发）。\n        草稿目录与本地导出 mp4 在 finally 中清理，避免上传/扣费任一环节抛错导致残留。\n        \"\"\"\n        try:\n            task.progress = 95\n            upload_url, upload_failed = self._upload_video_to_cos(task.outfile)\n            self._calculate_and_charge(task, task.outfile)\n            return self._handle_result(upload_url, upload_failed)\n        except Exception as exc:\n            logger.exception(\n                f\"Export draft failed: draft_id={task.draft_id}, error={exc}\"\n            )\n            return \"\", f\"导出草稿失败: {exc}\"\n        finally:\n            self._cleanup_files(task.outfile, task.draft_id)\n    \n    def _download_draft(self, task: VideoGenTask) -> bool:\n        \"\"\"\n        下载草稿\n        \n        Args:\n            task: 视频生成任务\n        \n        Returns:\n            bool: 下载是否成功\n        \"\"\"\n        logger.info(f\"Start downloading draft before export: {task.draft_url}\")\n        from src.utils.draft_downloader import download_draft\n        download_success = download_draft(task.draft_url)\n        \n        if download_success:\n            logger.info(f\"Draft downloaded successfully: {task.draft_url}\")\n        else:\n            logger.error(f\"Failed to download draft: {task.draft_url}\")\n        \n        return download_success\n    \n    def _export_video(self, task: VideoGenTask, outfile: str) -> bool:\n        \"\"\"\n        导出视频\n        \n        Args:\n            task: 视频生成任务\n            outfile: 输出文件路径\n        \n        Returns:\n            bool: 导出是否成功\n        \"\"\"\n        # 使用专用锁确保任何时候只有一个线程执行导出视频操作\n        logger.info(\n            \"Waiting for export_video_lock: draft_id=%s\",\n            task.draft_id,\n        )\n        with self.export_video_lock:\n            logger.info(f\"Begin to export draft: {task.draft_id} -> {outfile}\")\n            \n            # 更新进度\n            task.progress = 50\n            \n            # 检查JianyingController是否可用\n            if draft.JianyingController is None:\n                if sys.platform != \"win32\":\n                    error_msg = \"剪映自动导出功能仅在Windows平台可用\"\n                    logger.error(\n                        \"JianyingController unavailable: requires Windows platform\"\n                    )\n                else:\n                    error_msg = \"缺少Windows依赖，请安装: pip install capcut-mate[windows]\"\n                    logger.error(\n                        \"JianyingController unavailable: install windows extras \"\n                        \"(pip install capcut-mate[windows])\"\n                    )\n                raise RuntimeError(error_msg)\n            \n            with UIAutomationInitializerInThread():\n                # 此前需要将剪映打开，并位于目录页\n                ctrl = draft.JianyingController()\n\n                # 更新进度\n                task.progress = 70\n\n                # 导出指定名称的草稿\n                ctrl.export_draft(task.draft_id, outfile)\n\n            # 检查文件是否生成\n            if not os.path.exists(outfile):\n                # 个别版本剪映不会抛异常，但文件未生成\n                logger.error(\n                    \"export finished but output file missing (check disk space / \"\n                    \"Jianying version): path=%s\",\n                    outfile,\n                )\n                return False\n\n            logger.info(f\"Export draft success: {outfile}\")\n            return True\n    \n    def _upload_video_to_cos(self, outfile: str) -> Tuple[str, bool]:\n        \"\"\"\n        上传视频到对象存储（优先COS，兜底OSS）\n        \n        Args:\n            outfile: 输出文件路径\n        \n        Returns:\n            (upload_url, upload_failed): 上传后的URL和是否上传失败\n        \"\"\"\n        upload_url = \"\"\n        upload_failed = False\n        \n        try:\n            from src.utils.upload_file import upload_file\n            logger.info(f\"Uploading video to object storage: {outfile}\")\n            upload_url = upload_file(outfile, expire_days=config.VIDEO_GEN_RETENTION_DAYS)\n            logger.info(f\"Video uploaded to object storage successfully: {upload_url}\")\n        except Exception as upload_error:\n            logger.error(f\"Failed to upload video to object storage: {upload_error}\")\n            upload_failed = True\n        \n        return upload_url, upload_failed\n    \n    def _calculate_and_charge(self, task: VideoGenTask, outfile: str) -> None:\n        \"\"\"\n        计算并扣除费用（必需执行但不关心结果）\n        \n        Args:\n            task: 视频生成任务\n            outfile: 输出文件路径\n        \n        Returns:\n            None: 无返回值\n        \"\"\"\n        if config.ENABLE_APIKEY and task.api_key:\n            try:\n                # 导入获取媒体时长的函数\n                from src.utils.media import get_media_duration\n                \n                # 获取视频时长（返回的是微秒）\n                duration_us = get_media_duration(outfile)\n                \n                if duration_us and duration_us > 0:\n                    # 将微秒转换为秒\n                    video_duration = duration_us / 1_000_000  # 微秒转秒\n                    \n                    # 计算费用：0.01积分/秒\n                    cost = video_duration * 0.01\n                    \n                    # 导入扣费函数\n                    from src.utils.points import deduct_user_points\n                    \n                    # 扣除用户积分（必需执行但不关心结果）\n                    charge_success = deduct_user_points(\n                        api_key=task.api_key,\n                        points=cost,\n                        desc=f\"剪映草稿导出视频，时长{video_duration:.2f}秒，费用{cost:.2f}积分\"\n                    )\n                    \n                    if charge_success:\n                        logger.info(f\"Successfully charged {cost:.2f} points for video duration {video_duration:.2f}s, API key: {task.api_key[:8]}***\")\n                    else:\n                        logger.warning(f\"Failed to charge {cost:.2f} points for video duration {video_duration:.2f}s, API key: {task.api_key[:8]}***\")\n                else:\n                    logger.warning(f\"Could not determine video duration for charging: {outfile}\")\n            except Exception as charge_error:\n                logger.error(f\"Error calculating or charging for video duration: {charge_error}\")\n    \n    def _cleanup_files(self, outfile: str, draft_id: str) -> None:\n        \"\"\"\n        清理临时文件\n        \n        Args:\n            outfile: 输出文件路径\n            draft_id: 草稿ID\n        \"\"\"\n        try:\n            # 清理本地视频文件\n            if os.path.exists(outfile):\n                os.remove(outfile)\n                logger.info(f\"Cleaned up local video file: {outfile}\")\n            \n            # 清理下载的草稿文件\n            draft_path = os.path.join(config.DRAFT_SAVE_PATH, draft_id)\n            if os.path.exists(draft_path):\n                shutil.rmtree(draft_path)\n                logger.info(f\"Cleaned up draft directory: {draft_path}\")\n        except Exception as cleanup_error:\n            logger.warning(f\"Failed to clean up files: {cleanup_error}\")\n    \n    def _handle_result(self, upload_url: str, upload_failed: bool) -> Tuple[str, str]:\n        \"\"\"\n        处理最终结果\n        \n        Args:\n            upload_url: 上传后的URL\n            upload_failed: 上传是否失败\n        \n        Returns:\n            (video_url, error_message): 视频URL和错误信息\n        \"\"\"\n        # 如果上传失败，返回错误信息；扣费结果不关心\n        if upload_failed:\n            return \"\", \"视频上传失败\"\n        \n        # 返回上传后的URL，扣费结果不阻塞视频生成\n        return upload_url, \"\"\n    \n    def stop(self):\n        \"\"\"停止任务管理器\"\"\"\n        logger.info(\"Stopping VideoGenTaskManager\")\n        self.stop_flag.set()\n        if self.worker_thread and self.worker_thread.is_alive():\n            self.worker_thread.join(timeout=5)\n        self._download_executor.shutdown(wait=False)\n        self._upload_executor.shutdown(wait=False)\n        logger.info(\"VideoGenTaskManager stopped\")\n\n\n# 全局任务管理器实例\ntask_manager = VideoGenTaskManager()"
  },
  {
    "path": "src/utils/video_task_store.py",
    "content": "\"\"\"\n视频生成任务完成结果持久化（SQLite）。\n进行中的任务仅存在于内存，完成（成功或失败）后写入本模块。\n\"\"\"\nfrom __future__ import annotations\n\nimport os\nimport sqlite3\nimport threading\nimport time\nfrom datetime import datetime\nfrom typing import Any, Dict, Optional\n\nimport config\nfrom src.utils.logger import logger\n\n_MAX_ROWS = 100_000\n_PRUNE_BATCH = 1_000\n# 高并发下避免每次状态查询都跑 COUNT/竞争锁；超过间隔才真正检查是否需清理\n_PRUNE_MIN_INTERVAL_SEC = 60.0\n_last_prune_at: Optional[float] = None\n\n_lock = threading.Lock()\n\n\ndef _connect() -> sqlite3.Connection:\n    path = config.VIDEO_GEN_TASK_DB_PATH\n    os.makedirs(os.path.dirname(path), exist_ok=True)\n    conn = sqlite3.connect(path, check_same_thread=False)\n    conn.row_factory = sqlite3.Row\n    return conn\n\n\ndef _init_schema(conn: sqlite3.Connection) -> None:\n    conn.execute(\n        \"\"\"\n        CREATE TABLE IF NOT EXISTS video_gen_task_results (\n            draft_id TEXT PRIMARY KEY NOT NULL,\n            draft_url TEXT NOT NULL,\n            status TEXT NOT NULL,\n            progress INTEGER NOT NULL,\n            video_url TEXT NOT NULL DEFAULT '',\n            error_message TEXT NOT NULL DEFAULT '',\n            created_at TEXT,\n            started_at TEXT,\n            completed_at TEXT NOT NULL\n        )\n        \"\"\"\n    )\n    conn.execute(\n        \"\"\"\n        CREATE INDEX IF NOT EXISTS idx_vgtr_completed_at\n        ON video_gen_task_results(completed_at)\n        \"\"\"\n    )\n    conn.commit()\n\n\ndef _ensure_schema() -> None:\n    with _lock:\n        conn = _connect()\n        try:\n            _init_schema(conn)\n        finally:\n            conn.close()\n\n\n_ensure_schema()\n\n\ndef prune_if_needed() -> None:\n    \"\"\"\n    若表中记录数超过 10 万，按 completed_at 最旧优先删除 1000 条。\n    在查询已落库任务前可调用；高并发下通过时间间隔节流，避免每次请求都 COUNT(*)。\n    \"\"\"\n    global _last_prune_at\n    now = time.monotonic()\n    if _last_prune_at is not None and now - _last_prune_at < _PRUNE_MIN_INTERVAL_SEC:\n        return\n    with _lock:\n        now2 = time.monotonic()\n        if _last_prune_at is not None and now2 - _last_prune_at < _PRUNE_MIN_INTERVAL_SEC:\n            return\n        _last_prune_at = now2\n        conn = _connect()\n        try:\n            (cnt,) = conn.execute(\n                \"SELECT COUNT(*) FROM video_gen_task_results\"\n            ).fetchone()\n            if cnt <= _MAX_ROWS:\n                return\n            conn.execute(\n                \"\"\"\n                DELETE FROM video_gen_task_results WHERE rowid IN (\n                    SELECT rowid FROM video_gen_task_results\n                    ORDER BY completed_at ASC, draft_id ASC\n                    LIMIT ?\n                )\n                \"\"\",\n                (_PRUNE_BATCH,),\n            )\n            conn.commit()\n            logger.info(\n                \"video_gen_task_results pruned %s rows (count was %s)\",\n                _PRUNE_BATCH,\n                cnt,\n            )\n        finally:\n            conn.close()\n\n\ndef save_completed_result(\n    draft_id: str,\n    draft_url: str,\n    status: str,\n    progress: int,\n    video_url: str,\n    error_message: str,\n    created_at: datetime,\n    started_at: Optional[datetime],\n    completed_at: datetime,\n) -> None:\n    \"\"\"持久化已完成任务（成功或失败）。不在此保存进行中的任务。\"\"\"\n    with _lock:\n        conn = _connect()\n        try:\n            conn.execute(\n                \"\"\"\n                INSERT OR REPLACE INTO video_gen_task_results (\n                    draft_id, draft_url, status, progress,\n                    video_url, error_message,\n                    created_at, started_at, completed_at\n                ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n                \"\"\",\n                (\n                    draft_id,\n                    draft_url,\n                    status,\n                    progress,\n                    video_url,\n                    error_message,\n                    created_at.isoformat(),\n                    started_at.isoformat() if started_at else None,\n                    completed_at.isoformat(),\n                ),\n            )\n            conn.commit()\n        finally:\n            conn.close()\n\n\ndef get_completed_by_draft_id(draft_id: str) -> Optional[Dict[str, Any]]:\n    \"\"\"按 draft_id 读取已持久化的任务结果；无记录则返回 None。\"\"\"\n    if not draft_id:\n        return None\n    with _lock:\n        conn = _connect()\n        try:\n            row = conn.execute(\n                \"\"\"\n                SELECT draft_url, status, progress, video_url, error_message,\n                       created_at, started_at, completed_at\n                FROM video_gen_task_results\n                WHERE draft_id = ?\n                \"\"\",\n                (draft_id,),\n            ).fetchone()\n            if not row:\n                return None\n            return {\n                \"draft_url\": row[\"draft_url\"],\n                \"status\": row[\"status\"],\n                \"progress\": row[\"progress\"],\n                \"video_url\": row[\"video_url\"] or \"\",\n                \"error_message\": row[\"error_message\"] or \"\",\n                \"created_at\": row[\"created_at\"],\n                \"started_at\": row[\"started_at\"],\n                \"completed_at\": row[\"completed_at\"],\n            }\n        finally:\n            conn.close()\n"
  },
  {
    "path": "template/default/draft_agency_config.json",
    "content": "{\n    \"marterials\": null,\n    \"use_converter\": false,\n    \"video_resolution\": 720\n}"
  },
  {
    "path": "template/default/draft_info.json",
    "content": "{\n    \"canvas_config\": {\n        \"height\": 0,\n        \"ratio\": \"original\",\n        \"width\": 0\n    },\n    \"color_space\": -1,\n    \"config\": {\n        \"adjust_max_index\": 1,\n        \"combination_max_index\": 1,\n        \"export_range\": null,\n        \"extract_audio_last_index\": 1,\n        \"lyrics_recognition_id\": \"\",\n        \"lyrics_sync\": true,\n        \"lyrics_taskinfo\": [],\n        \"maintrack_adsorb\": true,\n        \"material_save_mode\": 0,\n        \"original_sound_last_index\": 1,\n        \"record_audio_last_index\": 1,\n        \"sticker_max_index\": 1,\n        \"subtitle_recognition_id\": \"\",\n        \"subtitle_sync\": true,\n        \"subtitle_taskinfo\": [],\n        \"video_mute\": false\n    },\n    \"cover\": null,\n    \"create_time\": 0,\n    \"duration\": 0,\n    \"extra_info\": null,\n    \"fps\": 30.0,\n    \"group_container\": null,\n    \"id\": \"1E7B473A-7C58-4FF5-AF38-620EDBEE66DE\",\n    \"keyframes\": {\n        \"adjusts\": [],\n        \"audios\": [],\n        \"filters\": [],\n        \"handwrites\": [],\n        \"stickers\": [],\n        \"texts\": [],\n        \"videos\": []\n    },\n    \"last_modified_platform\": {\n        \"app_id\": 3704,\n        \"app_version\": \"3.1.0-beta7\",\n        \"os\": \"mac\",\n        \"os_version\": \"15.6.1\"\n    },\n    \"materials\": {\n        \"audio_balances\": [],\n        \"audio_effects\": [],\n        \"audio_fades\": [],\n        \"audios\": [],\n        \"beats\": [],\n        \"canvases\": [],\n        \"chromas\": [],\n        \"color_curves\": [],\n        \"drafts\": [],\n        \"effects\": [],\n        \"handwrites\": [],\n        \"hsl\": [],\n        \"images\": [],\n        \"log_color_wheels\": [],\n        \"masks\": [],\n        \"material_animations\": [],\n        \"placeholders\": [],\n        \"primary_color_wheels\": [],\n        \"realtime_denoises\": [],\n        \"speeds\": [],\n        \"stickers\": [],\n        \"tail_leaders\": [],\n        \"text_templates\": [],\n        \"texts\": [],\n        \"transitions\": [],\n        \"video_effects\": [],\n        \"video_trackings\": [],\n        \"videos\": []\n    },\n    \"mutable_config\": null,\n    \"name\": \"\",\n    \"new_version\": \"52.0.0\",\n    \"platform\": {\n        \"app_id\": 3704,\n        \"app_version\": \"3.1.0-beta7\",\n        \"os\": \"mac\",\n        \"os_version\": \"15.6.1\"\n    },\n    \"relationships\": [],\n    \"render_index_track_mode_on\": true,\n    \"tracks\": [],\n    \"update_time\": 0,\n    \"version\": 360000\n}"
  },
  {
    "path": "template/default/draft_info.json.bak",
    "content": "{\n    \"canvas_config\": {\n        \"height\": 0,\n        \"ratio\": \"original\",\n        \"width\": 0\n    },\n    \"color_space\": -1,\n    \"config\": {\n        \"adjust_max_index\": 1,\n        \"combination_max_index\": 1,\n        \"export_range\": null,\n        \"extract_audio_last_index\": 1,\n        \"lyrics_recognition_id\": \"\",\n        \"lyrics_sync\": true,\n        \"lyrics_taskinfo\": [\n        ],\n        \"maintrack_adsorb\": true,\n        \"material_save_mode\": 0,\n        \"original_sound_last_index\": 1,\n        \"record_audio_last_index\": 1,\n        \"sticker_max_index\": 1,\n        \"subtitle_recognition_id\": \"\",\n        \"subtitle_sync\": true,\n        \"subtitle_taskinfo\": [\n        ],\n        \"video_mute\": false\n    },\n    \"cover\": null,\n    \"create_time\": 0,\n    \"duration\": 0,\n    \"extra_info\": null,\n    \"fps\": 30.0,\n    \"group_container\": null,\n    \"id\": \"1E7B473A-7C58-4FF5-AF38-620EDBEE66DE\",\n    \"keyframes\": {\n        \"adjusts\": [\n        ],\n        \"audios\": [\n        ],\n        \"filters\": [\n        ],\n        \"handwrites\": [\n        ],\n        \"stickers\": [\n        ],\n        \"texts\": [\n        ],\n        \"videos\": [\n        ]\n    },\n    \"last_modified_platform\": {\n        \"app_id\": 3704,\n        \"app_version\": \"3.1.0-beta7\",\n        \"os\": \"mac\",\n        \"os_version\": \"15.6.1\"\n    },\n    \"materials\": {\n        \"audio_balances\": [\n        ],\n        \"audio_effects\": [\n        ],\n        \"audio_fades\": [\n        ],\n        \"audios\": [\n        ],\n        \"beats\": [\n        ],\n        \"canvases\": [\n        ],\n        \"chromas\": [\n        ],\n        \"color_curves\": [\n        ],\n        \"drafts\": [\n        ],\n        \"effects\": [\n        ],\n        \"handwrites\": [\n        ],\n        \"hsl\": [\n        ],\n        \"images\": [\n        ],\n        \"log_color_wheels\": [\n        ],\n        \"masks\": [\n        ],\n        \"material_animations\": [\n        ],\n        \"placeholders\": [\n        ],\n        \"primary_color_wheels\": [\n        ],\n        \"realtime_denoises\": [\n        ],\n        \"speeds\": [\n        ],\n        \"stickers\": [\n        ],\n        \"tail_leaders\": [\n        ],\n        \"text_templates\": [\n        ],\n        \"texts\": [\n        ],\n        \"transitions\": [\n        ],\n        \"video_effects\": [\n        ],\n        \"video_trackings\": [\n        ],\n        \"videos\": [\n        ]\n    },\n    \"mutable_config\": null,\n    \"name\": \"\",\n    \"new_version\": \"52.0.0\",\n    \"platform\": {\n        \"app_id\": 3704,\n        \"app_version\": \"3.1.0-beta7\",\n        \"os\": \"mac\",\n        \"os_version\": \"15.6.1\"\n    },\n    \"relationships\": [\n    ],\n    \"render_index_track_mode_on\": true,\n    \"tracks\": [\n    ],\n    \"update_time\": 0,\n    \"version\": 360000\n}"
  },
  {
    "path": "template/default/draft_meta_info.json",
    "content": "{\n    \"draft_cloud_last_action_download\": false,\n    \"draft_cloud_purchase_info\": \"\",\n    \"draft_cloud_tutorial_info\": \"\",\n    \"draft_cover\": \"\",\n    \"draft_fold_path\": \"\",\n    \"draft_id\": \"F8B72D13-7BB1-430B-89F1-BBECD092E08D\",\n    \"draft_materials\": [\n        {\n            \"type\": 0,\n            \"value\": []\n        },\n        {\n            \"type\": 1,\n            \"value\": []\n        },\n        {\n            \"type\": 2,\n            \"value\": []\n        },\n        {\n            \"type\": 3,\n            \"value\": []\n        },\n        {\n            \"type\": 6,\n            \"value\": []\n        },\n        {\n            \"type\": 7,\n            \"value\": []\n        },\n        {\n            \"type\": 8,\n            \"value\": []\n        }\n    ],\n    \"draft_materials_copied_info\": [],\n    \"draft_name\": \"\",\n    \"draft_removable_storage_device\": \"\",\n    \"draft_root_path\": \"\",\n    \"draft_segment_extra_info\": [],\n    \"draft_timeline_materials_size_\": 1524,\n    \"tm_draft_cloud_completed\": \"\",\n    \"tm_draft_cloud_modified\": 0,\n    \"tm_draft_create\": 1767007847131339,\n    \"tm_draft_modified\": 1767007866760103,\n    \"tm_duration\": 0\n}"
  },
  {
    "path": "template/default/draft_settings",
    "content": "[General]\ncloud_last_modify_platform=mac\n"
  },
  {
    "path": "template/default/template.tmp",
    "content": "{\n    \"canvas_config\": {\n        \"height\": 0,\n        \"ratio\": \"original\",\n        \"width\": 0\n    },\n    \"color_space\": -1,\n    \"config\": {\n        \"adjust_max_index\": 1,\n        \"combination_max_index\": 1,\n        \"export_range\": null,\n        \"extract_audio_last_index\": 1,\n        \"lyrics_recognition_id\": \"\",\n        \"lyrics_sync\": true,\n        \"lyrics_taskinfo\": [\n        ],\n        \"maintrack_adsorb\": true,\n        \"material_save_mode\": 0,\n        \"original_sound_last_index\": 1,\n        \"record_audio_last_index\": 1,\n        \"sticker_max_index\": 1,\n        \"subtitle_recognition_id\": \"\",\n        \"subtitle_sync\": true,\n        \"subtitle_taskinfo\": [\n        ],\n        \"video_mute\": false\n    },\n    \"cover\": null,\n    \"create_time\": 0,\n    \"duration\": 0,\n    \"extra_info\": null,\n    \"fps\": 30.0,\n    \"group_container\": null,\n    \"id\": \"1E7B473A-7C58-4FF5-AF38-620EDBEE66DE\",\n    \"keyframes\": {\n        \"adjusts\": [\n        ],\n        \"audios\": [\n        ],\n        \"filters\": [\n        ],\n        \"handwrites\": [\n        ],\n        \"stickers\": [\n        ],\n        \"texts\": [\n        ],\n        \"videos\": [\n        ]\n    },\n    \"last_modified_platform\": {\n        \"app_id\": 3704,\n        \"app_version\": \"3.1.0-beta7\",\n        \"os\": \"mac\",\n        \"os_version\": \"15.6.1\"\n    },\n    \"materials\": {\n        \"audio_balances\": [\n        ],\n        \"audio_effects\": [\n        ],\n        \"audio_fades\": [\n        ],\n        \"audios\": [\n        ],\n        \"beats\": [\n        ],\n        \"canvases\": [\n        ],\n        \"chromas\": [\n        ],\n        \"color_curves\": [\n        ],\n        \"drafts\": [\n        ],\n        \"effects\": [\n        ],\n        \"handwrites\": [\n        ],\n        \"hsl\": [\n        ],\n        \"images\": [\n        ],\n        \"log_color_wheels\": [\n        ],\n        \"masks\": [\n        ],\n        \"material_animations\": [\n        ],\n        \"placeholders\": [\n        ],\n        \"primary_color_wheels\": [\n        ],\n        \"realtime_denoises\": [\n        ],\n        \"speeds\": [\n        ],\n        \"stickers\": [\n        ],\n        \"tail_leaders\": [\n        ],\n        \"text_templates\": [\n        ],\n        \"texts\": [\n        ],\n        \"transitions\": [\n        ],\n        \"video_effects\": [\n        ],\n        \"video_trackings\": [\n        ],\n        \"videos\": [\n        ]\n    },\n    \"mutable_config\": null,\n    \"name\": \"\",\n    \"new_version\": \"52.0.0\",\n    \"platform\": {\n        \"app_id\": 3704,\n        \"app_version\": \"3.1.0-beta7\",\n        \"os\": \"mac\",\n        \"os_version\": \"15.6.1\"\n    },\n    \"relationships\": [\n    ],\n    \"render_index_track_mode_on\": true,\n    \"tracks\": [\n    ],\n    \"update_time\": 0,\n    \"version\": 360000\n}"
  },
  {
    "path": "template/default2/attachment_pc_common.json",
    "content": "{\n    \"pc_feature_flag\": 0,\n    \"template_item_infos\": [],\n    \"unlock_template_ids\": []\n}"
  },
  {
    "path": "template/default2/draft_agency_config.json",
    "content": "{\n    \"marterials\": null,\n    \"use_converter\": false,\n    \"video_resolution\": 720\n}"
  },
  {
    "path": "template/default2/draft_content.json",
    "content": "{\n    \"canvas_config\": {\n        \"height\": 1920,\n        \"ratio\": \"original\",\n        \"width\": 1080\n    },\n    \"color_space\": -1,\n    \"config\": {\n        \"adjust_max_index\": 1,\n        \"attachment_info\": [],\n        \"combination_max_index\": 1,\n        \"export_range\": null,\n        \"extract_audio_last_index\": 1,\n        \"lyrics_recognition_id\": \"\",\n        \"lyrics_sync\": true,\n        \"lyrics_taskinfo\": [],\n        \"maintrack_adsorb\": false,\n        \"material_save_mode\": 0,\n        \"multi_language_current\": \"none\",\n        \"multi_language_list\": [],\n        \"multi_language_main\": \"none\",\n        \"multi_language_mode\": \"none\",\n        \"original_sound_last_index\": 1,\n        \"record_audio_last_index\": 1,\n        \"sticker_max_index\": 1,\n        \"subtitle_keywords_config\": null,\n        \"subtitle_recognition_id\": \"\",\n        \"subtitle_sync\": true,\n        \"subtitle_taskinfo\": [],\n        \"system_font_list\": [],\n        \"video_mute\": false,\n        \"zoom_info_params\": null\n    },\n    \"cover\": null,\n    \"create_time\": 0,\n    \"duration\": 0,\n    \"extra_info\": null,\n    \"fps\": 30,\n    \"free_render_index_mode_on\": false,\n    \"group_container\": null,\n    \"id\": \"a45b7687-c846-4296-a35d-e4f0e18e28dc\",\n    \"is_drop_frame_timecode\": false,\n    \"keyframe_graph_list\": [],\n    \"keyframes\": {\n        \"adjusts\": [],\n        \"audios\": [],\n        \"effects\": [],\n        \"filters\": [],\n        \"handwrites\": [],\n        \"stickers\": [],\n        \"texts\": [],\n        \"videos\": []\n    },\n    \"lyrics_effects\": [],\n    \"materials\": {\n        \"ai_translates\": [],\n        \"audio_balances\": [],\n        \"audio_effects\": [],\n        \"audio_fades\": [],\n        \"audio_track_indexes\": [],\n        \"audios\": [],\n        \"beats\": [],\n        \"canvases\": [],\n        \"chromas\": [],\n        \"color_curves\": [],\n        \"masks\": [],\n        \"digital_humans\": [],\n        \"drafts\": [],\n        \"effects\": [],\n        \"flowers\": [],\n        \"green_screens\": [],\n        \"handwrites\": [],\n        \"hsl\": [],\n        \"huazi\": [],\n        \"images\": [],\n        \"log_color_wheels\": [],\n        \"loudnesses\": [],\n        \"manual_deformations\": [],\n        \"material_animations\": [],\n        \"material_colors\": [],\n        \"multi_language_refs\": [],\n        \"placeholder_infos\": [],\n        \"placeholders\": [],\n        \"plugin_effects\": [],\n        \"primary_color_wheels\": [],\n        \"realtime_denoises\": [],\n        \"shapes\": [],\n        \"smart_crops\": [],\n        \"smart_relights\": [],\n        \"sound_channel_mappings\": [],\n        \"speeds\": [],\n        \"stickers\": [],\n        \"tail_leaders\": [],\n        \"text_templates\": [],\n        \"texts\": [],\n        \"time_marks\": [],\n        \"transitions\": [],\n        \"video_effects\": [],\n        \"video_trackings\": [],\n        \"videos\": [],\n        \"vocal_beautifys\": [],\n        \"vocal_separations\": []\n    },\n    \"mutable_config\": null,\n    \"name\": \"\",\n    \"new_version\": \"110.0.0\",\n    \"path\": \"\",\n    \"relationships\": [],\n    \"render_index_track_mode_on\": true,\n    \"retouch_cover\": null,\n    \"source\": \"default\",\n    \"static_cover_image_path\": \"\",\n    \"time_marks\": null,\n    \"tracks\": [\n        {\n            \"attribute\": 0,\n            \"flag\": 0,\n            \"id\": \"2D0629D7-BC55-4A90-867A-C078CFEEE0D2\",\n            \"name\": \"main_track\",\n            \"segments\": [],\n            \"type\": \"video\"\n        }\n    ],\n    \"update_time\": 0,\n    \"version\": 360000,\n    \"platform\": {\n        \"app_id\": 3704,\n        \"app_source\": \"lv\",\n        \"app_version\": \"5.9.0\",\n        \"device_id\": \"9d624d7e23dc4e43a0ed4020b8e3e90e\",\n        \"hard_disk_id\": \"f242a67014ec01ecdc2a9280da37adb1\",\n        \"mac_address\": \"0c233adaa327abd93e3d6b5dae6d75e2\",\n        \"os\": \"mac\",\n        \"os_version\": \"14.5\"\n    },\n    \"last_modified_platform\": {\n        \"app_id\": 3704,\n        \"app_source\": \"cc\",\n        \"app_version\": \"5.9.0\",\n        \"device_id\": \"9d624d7e23dc4e43a0ed4020b8e3e90e\",\n        \"hard_disk_id\": \"f242a67014ec01ecdc2a9280da37adb1\",\n        \"mac_address\": \"0c233adaa327abd93e3d6b5dae6d75e2\",\n        \"os\": \"mac\",\n        \"os_version\": \"14.5\"\n    }\n}"
  },
  {
    "path": "template/default2/draft_info.json",
    "content": "{\n    \"canvas_config\": {\n        \"height\": 1920,\n        \"ratio\": \"original\",\n        \"width\": 1080\n    },\n    \"color_space\": -1,\n    \"config\": {\n        \"adjust_max_index\": 1,\n        \"attachment_info\": [],\n        \"combination_max_index\": 1,\n        \"export_range\": null,\n        \"extract_audio_last_index\": 1,\n        \"lyrics_recognition_id\": \"\",\n        \"lyrics_sync\": true,\n        \"lyrics_taskinfo\": [],\n        \"maintrack_adsorb\": false,\n        \"material_save_mode\": 0,\n        \"multi_language_current\": \"none\",\n        \"multi_language_list\": [],\n        \"multi_language_main\": \"none\",\n        \"multi_language_mode\": \"none\",\n        \"original_sound_last_index\": 1,\n        \"record_audio_last_index\": 1,\n        \"sticker_max_index\": 1,\n        \"subtitle_keywords_config\": null,\n        \"subtitle_recognition_id\": \"\",\n        \"subtitle_sync\": true,\n        \"subtitle_taskinfo\": [],\n        \"system_font_list\": [],\n        \"video_mute\": false,\n        \"zoom_info_params\": null\n    },\n    \"cover\": null,\n    \"create_time\": 0,\n    \"duration\": 0,\n    \"extra_info\": null,\n    \"fps\": 30,\n    \"free_render_index_mode_on\": false,\n    \"group_container\": null,\n    \"id\": \"a45b7687-c846-4296-a35d-e4f0e18e28dc\",\n    \"is_drop_frame_timecode\": false,\n    \"keyframe_graph_list\": [],\n    \"keyframes\": {\n        \"adjusts\": [],\n        \"audios\": [],\n        \"effects\": [],\n        \"filters\": [],\n        \"handwrites\": [],\n        \"stickers\": [],\n        \"texts\": [],\n        \"videos\": []\n    },\n    \"lyrics_effects\": [],\n    \"materials\": {\n        \"ai_translates\": [],\n        \"audio_balances\": [],\n        \"audio_effects\": [],\n        \"audio_fades\": [],\n        \"audio_track_indexes\": [],\n        \"audios\": [],\n        \"beats\": [],\n        \"canvases\": [],\n        \"chromas\": [],\n        \"color_curves\": [],\n        \"masks\": [],\n        \"digital_humans\": [],\n        \"drafts\": [],\n        \"effects\": [],\n        \"flowers\": [],\n        \"green_screens\": [],\n        \"handwrites\": [],\n        \"hsl\": [],\n        \"huazi\": [],\n        \"images\": [],\n        \"log_color_wheels\": [],\n        \"loudnesses\": [],\n        \"manual_deformations\": [],\n        \"material_animations\": [],\n        \"material_colors\": [],\n        \"multi_language_refs\": [],\n        \"placeholder_infos\": [],\n        \"placeholders\": [],\n        \"plugin_effects\": [],\n        \"primary_color_wheels\": [],\n        \"realtime_denoises\": [],\n        \"shapes\": [],\n        \"smart_crops\": [],\n        \"smart_relights\": [],\n        \"sound_channel_mappings\": [],\n        \"speeds\": [],\n        \"stickers\": [],\n        \"tail_leaders\": [],\n        \"text_templates\": [],\n        \"texts\": [],\n        \"time_marks\": [],\n        \"transitions\": [],\n        \"video_effects\": [],\n        \"video_trackings\": [],\n        \"videos\": [],\n        \"vocal_beautifys\": [],\n        \"vocal_separations\": []\n    },\n    \"mutable_config\": null,\n    \"name\": \"\",\n    \"new_version\": \"110.0.0\",\n    \"path\": \"\",\n    \"relationships\": [],\n    \"render_index_track_mode_on\": true,\n    \"retouch_cover\": null,\n    \"source\": \"default\",\n    \"static_cover_image_path\": \"\",\n    \"time_marks\": null,\n    \"tracks\": [\n        {\n            \"attribute\": 0,\n            \"flag\": 0,\n            \"id\": \"2D0629D7-BC55-4A90-867A-C078CFEEE0D2\",\n            \"segments\": [],\n            \"name\": \"main_track\",\n            \"type\": \"video\"\n        }\n    ],\n    \"update_time\": 0,\n    \"version\": 360000,\n    \"platform\": {\n        \"app_id\": 3704,\n        \"app_source\": \"lv\",\n        \"app_version\": \"5.9.0\",\n        \"device_id\": \"9d624d7e23dc4e43a0ed4020b8e3e90e\",\n        \"hard_disk_id\": \"f242a67014ec01ecdc2a9280da37adb1\",\n        \"mac_address\": \"0c233adaa327abd93e3d6b5dae6d75e2\",\n        \"os\": \"mac\",\n        \"os_version\": \"14.5\"\n    },\n    \"last_modified_platform\": {\n        \"app_id\": 3704,\n        \"app_source\": \"cc\",\n        \"app_version\": \"5.9.0\",\n        \"device_id\": \"9d624d7e23dc4e43a0ed4020b8e3e90e\",\n        \"hard_disk_id\": \"f242a67014ec01ecdc2a9280da37adb1\",\n        \"mac_address\": \"0c233adaa327abd93e3d6b5dae6d75e2\",\n        \"os\": \"mac\",\n        \"os_version\": \"14.5\"\n    }\n}"
  },
  {
    "path": "template/default2/draft_meta_info.json",
    "content": "{\n    \"cloud_package_completed_time\": \"\",\n    \"draft_cloud_capcut_purchase_info\": \"\",\n    \"draft_cloud_last_action_download\": false,\n    \"draft_cloud_materials\": [],\n    \"draft_cloud_purchase_info\": \"\",\n    \"draft_cloud_template_id\": \"\",\n    \"draft_cloud_tutorial_info\": \"\",\n    \"draft_cloud_videocut_purchase_info\": \"\",\n    \"draft_cover\": \"draft_cover.jpg\",\n    \"draft_deeplink_url\": \"\",\n    \"draft_enterprise_info\": {\n        \"draft_enterprise_extra\": \"\",\n        \"draft_enterprise_id\": \"\",\n        \"draft_enterprise_name\": \"\",\n        \"enterprise_material\": []\n    },\n    \"draft_fold_path\": \"C:/Users/1/AppData/Local/JianyingPro/User Data/Projects/com.lveditor.draft/035ae208-ec69-4068-b479-777cb3bab17a\",\n    \"draft_id\": \"9977D3AA-CA25-4c52-B049-0D135322A1B8\",\n    \"draft_is_ai_packaging_used\": false,\n    \"draft_is_ai_shorts\": false,\n    \"draft_is_ai_translate\": false,\n    \"draft_is_article_video_draft\": false,\n    \"draft_is_from_deeplink\": \"false\",\n    \"draft_is_invisible\": false,\n    \"draft_materials\": [\n        {\n            \"type\": 0,\n            \"value\": []\n        },\n        {\n            \"type\": 1,\n            \"value\": []\n        },\n        {\n            \"type\": 2,\n            \"value\": []\n        },\n        {\n            \"type\": 3,\n            \"value\": []\n        },\n        {\n            \"type\": 6,\n            \"value\": []\n        },\n        {\n            \"type\": 7,\n            \"value\": []\n        },\n        {\n            \"type\": 8,\n            \"value\": []\n        }\n    ],\n    \"draft_materials_copied_info\": [],\n    \"draft_name\": \"035ae208-ec69-4068-b479-777cb3bab17a\",\n    \"draft_new_version\": \"\",\n    \"draft_removable_storage_device\": \"\",\n    \"draft_root_path\": \"C:\\\\Users\\\\1\\\\AppData\\\\Local\\\\JianyingPro\\\\User Data\\\\Projects\\\\com.lveditor.draft\",\n    \"draft_segment_extra_info\": [],\n    \"draft_timeline_materials_size_\": 2075,\n    \"draft_type\": \"\",\n    \"tm_draft_cloud_completed\": \"\",\n    \"tm_draft_cloud_modified\": 0,\n    \"tm_draft_create\": 1686707414251596,\n    \"tm_draft_modified\": 2686707417166183,\n    \"tm_draft_removed\": 0,\n    \"tm_duration\": 0\n}"
  },
  {
    "path": "template/default2/template.tmp",
    "content": "{\n    \"canvas_config\": {\n        \"height\": 0,\n        \"ratio\": \"original\",\n        \"width\": 0\n    },\n    \"color_space\": -1,\n    \"config\": {\n        \"adjust_max_index\": 1,\n        \"attachment_info\": [\n        ],\n        \"combination_max_index\": 1,\n        \"export_range\": null,\n        \"extract_audio_last_index\": 1,\n        \"lyrics_recognition_id\": \"\",\n        \"lyrics_sync\": true,\n        \"lyrics_taskinfo\": [\n        ],\n        \"maintrack_adsorb\": true,\n        \"material_save_mode\": 0,\n        \"original_sound_last_index\": 1,\n        \"record_audio_last_index\": 1,\n        \"sticker_max_index\": 1,\n        \"subtitle_recognition_id\": \"\",\n        \"subtitle_sync\": true,\n        \"subtitle_taskinfo\": [\n        ],\n        \"video_mute\": false,\n        \"zoom_info_params\": null\n    },\n    \"cover\": null,\n    \"create_time\": 0,\n    \"duration\": 0,\n    \"extra_info\": null,\n    \"fps\": 30,\n    \"free_render_index_mode_on\": false,\n    \"group_container\": null,\n    \"id\": \"4c9ea46a-49f4-4e88-b028-363dbcfffcac\",\n    \"keyframes\": {\n        \"adjusts\": [\n        ],\n        \"audios\": [\n        ],\n        \"effects\": [\n        ],\n        \"filters\": [\n        ],\n        \"handwrites\": [\n        ],\n        \"stickers\": [\n        ],\n        \"texts\": [\n        ],\n        \"videos\": [\n        ]\n    },\n    \"last_modified_platform\": {\n        \"app_id\": 3704,\n        \"app_source\": \"lv\",\n        \"app_version\": \"3.9.0\",\n        \"device_id\": \"ece93fefa6d73d0879f6cf6251e212fd\",\n        \"hard_disk_id\": \"da04071d52c1f66c291bc2f5b1f0e87f\",\n        \"mac_address\": \"864b94efa06c9456b10992695eba19c4\",\n        \"os\": \"mac\",\n        \"os_version\": \"12.5.1\"\n    },\n    \"materials\": {\n        \"audio_balances\": [\n        ],\n        \"audio_effects\": [\n        ],\n        \"audio_fades\": [\n        ],\n        \"audios\": [\n        ],\n        \"beats\": [\n        ],\n        \"canvases\": [\n        ],\n        \"chromas\": [\n        ],\n        \"color_curves\": [\n        ],\n        \"drafts\": [\n        ],\n        \"effects\": [\n        ],\n        \"handwrites\": [\n        ],\n        \"hsl\": [\n        ],\n        \"images\": [\n        ],\n        \"log_color_wheels\": [\n        ],\n        \"manual_deformations\": [\n        ],\n        \"masks\": [\n        ],\n        \"material_animations\": [\n        ],\n        \"placeholders\": [\n        ],\n        \"plugin_effects\": [\n        ],\n        \"primary_color_wheels\": [\n        ],\n        \"realtime_denoises\": [\n        ],\n        \"sound_channel_mappings\": [\n        ],\n        \"speeds\": [\n        ],\n        \"stickers\": [\n        ],\n        \"tail_leaders\": [\n        ],\n        \"text_templates\": [\n        ],\n        \"texts\": [\n        ],\n        \"transitions\": [\n        ],\n        \"video_effects\": [\n        ],\n        \"video_trackings\": [\n        ],\n        \"videos\": [\n        ]\n    },\n    \"mutable_config\": null,\n    \"name\": \"\",\n    \"new_version\": \"69.0.0\",\n    \"platform\": {\n        \"app_id\": 3704,\n        \"app_source\": \"lv\",\n        \"app_version\": \"3.9.0\",\n        \"device_id\": \"ece93fefa6d73d0879f6cf6251e212fd\",\n        \"hard_disk_id\": \"da04071d52c1f66c291bc2f5b1f0e87f\",\n        \"mac_address\": \"864b94efa06c9456b10992695eba19c4\",\n        \"os\": \"mac\",\n        \"os_version\": \"12.5.1\"\n    },\n    \"relationships\": [\n    ],\n    \"render_index_track_mode_on\": false,\n    \"retouch_cover\": null,\n    \"source\": \"default\",\n    \"static_cover_image_path\": \"\",\n    \"tracks\": [\n    ],\n    \"update_time\": 0,\n    \"version\": 360000\n}"
  },
  {
    "path": "template/readme.md",
    "content": "## default\n此模板在新版本剪映上兼容性较好，但在5.9上，缩放关键帧不生效\n\n## default2\n解决在5.9上缩放关键帧不生效的问题"
  },
  {
    "path": "tests/__init__.py",
    "content": "\n# 空文件，标识tests为Python包\n"
  },
  {
    "path": "tests/manual_test_audio_infos.py",
    "content": "import json\n\ndef audio_infos(\n    mp3_urls: list,\n    timelines: list,\n    audio_effect: str = None,\n    volume: float = None\n) -> str:\n    \"\"\"\n    根据音频URL和时间线生成音频信息JSON字符串\n    \"\"\"\n    # 检查参数长度是否匹配\n    if len(mp3_urls) != len(timelines):\n        raise ValueError(f\"mp3_urls length ({len(mp3_urls)}) does not match timelines length ({len(timelines)})\")\n    \n    # 构建音频信息列表\n    infos = []\n    for i, (audio_url, timeline) in enumerate(zip(mp3_urls, timelines)):\n        info = {\n            \"audio_url\": audio_url,\n            \"start\": timeline[\"start\"],\n            \"end\": timeline[\"end\"]\n        }\n        \n        # 添加可选参数\n        if audio_effect is not None:\n            info[\"audio_effect\"] = audio_effect\n            \n        if volume is not None:\n            info[\"volume\"] = volume\n            \n        infos.append(info)\n    \n    # 转换为JSON字符串\n    infos_json = json.dumps(infos, ensure_ascii=False)\n    \n    return infos_json\n\n\ndef test_audio_infos():\n    \"\"\"测试音频信息生成功能\"\"\"\n    # 测试基本功能\n    print(\"测试基本功能:\")\n    mp3_urls = [\n        \"https://assets.jcaigc.cn/test1.mp3\",\n        \"https://assets.jcaigc.cn/test2.mp3\"\n    ]\n    \n    timelines = [\n        {\"start\": 0, \"end\": 284891428},\n        {\"start\": 284891428, \"end\": 579578774}\n    ]\n    \n    audio_effect = \"教堂\"\n    volume = 1.0\n    \n    infos_json = audio_infos(mp3_urls, timelines, audio_effect, volume)\n    print(f\"Infos JSON: {infos_json}\")\n    \n    # 解析JSON验证内容\n    infos = json.loads(infos_json)\n    print(f\"Parsed infos: {infos}\")\n    \n    # 验证内容\n    assert len(infos) == 2\n    assert infos[0][\"audio_url\"] == \"https://assets.jcaigc.cn/test1.mp3\"\n    assert infos[0][\"start\"] == 0\n    assert infos[0][\"end\"] == 284891428\n    assert infos[0][\"audio_effect\"] == \"教堂\"\n    assert infos[0][\"volume\"] == 1.0\n    \n    assert infos[1][\"audio_url\"] == \"https://assets.jcaigc.cn/test2.mp3\"\n    assert infos[1][\"start\"] == 284891428\n    assert infos[1][\"end\"] == 579578774\n    assert infos[1][\"audio_effect\"] == \"教堂\"\n    assert infos[1][\"volume\"] == 1.0\n    \n    print(\"基本功能测试通过\")\n    \n    # 测试可选参数为None的情况\n    print(\"\\n测试可选参数为None的情况:\")\n    infos_json_no_optional = audio_infos(mp3_urls, timelines)\n    infos_no_optional = json.loads(infos_json_no_optional)\n    print(f\"Infos without optional params: {infos_no_optional}\")\n    \n    # 验证可选参数不存在\n    assert \"audio_effect\" not in infos_no_optional[0]\n    assert \"volume\" not in infos_no_optional[0]\n    assert \"audio_effect\" not in infos_no_optional[1]\n    assert \"volume\" not in infos_no_optional[1]\n    \n    print(\"可选参数测试通过\")\n    \n    print(\"\\n所有测试通过!\")\n\n\nif __name__ == \"__main__\":\n    test_audio_infos()"
  },
  {
    "path": "tests/manual_test_caption_infos.py",
    "content": "import json\n\ndef caption_infos(\n    texts: list,\n    timelines: list,\n    font_size: int = None,\n    keyword_color: str = None,\n    keyword_font_size: int = None,\n    keywords: list = None,\n    in_animation: str = None,\n    in_animation_duration: int = None,\n    loop_animation: str = None,\n    loop_animation_duration: int = None,\n    out_animation: str = None,\n    out_animation_duration: int = None,\n    transition: str = None,\n    transition_duration: int = None\n) -> str:\n    \"\"\"\n    根据文本和时间线生成字幕信息JSON字符串\n    \"\"\"\n    # 检查参数长度是否匹配\n    if len(texts) != len(timelines):\n        raise ValueError(f\"texts length ({len(texts)}) does not match timelines length ({len(timelines)})\")\n    \n    # 检查keywords长度是否匹配\n    if keywords is not None and len(keywords) != len(texts):\n        raise ValueError(f\"keywords length ({len(keywords)}) does not match texts length ({len(texts)})\")\n    \n    # 构建字幕信息列表\n    infos = []\n    for i, (text, timeline) in enumerate(zip(texts, timelines)):\n        info = {\n            \"start\": timeline[\"start\"],\n            \"end\": timeline[\"end\"],\n            \"text\": text\n        }\n        \n        # 添加关键词信息\n        if keywords is not None:\n            info[\"keyword\"] = keywords[i]\n            \n        # 添加可选参数\n        if keyword_color is not None:\n            info[\"keyword_color\"] = keyword_color\n            \n        if keyword_font_size is not None:\n            info[\"keyword_font_size\"] = keyword_font_size\n            \n        if font_size is not None:\n            info[\"font_size\"] = font_size\n            \n        if in_animation is not None:\n            info[\"in_animation\"] = in_animation\n            \n        if in_animation_duration is not None:\n            info[\"in_animation_duration\"] = in_animation_duration\n            \n        if loop_animation is not None:\n            info[\"loop_animation\"] = loop_animation\n            \n        if loop_animation_duration is not None:\n            info[\"loop_animation_duration\"] = loop_animation_duration\n            \n        if out_animation is not None:\n            info[\"out_animation\"] = out_animation\n            \n        if out_animation_duration is not None:\n            info[\"out_animation_duration\"] = out_animation_duration\n            \n        if transition is not None:\n            info[\"transition\"] = transition\n            \n        if transition_duration is not None:\n            info[\"transition_duration\"] = transition_duration\n            \n        infos.append(info)\n    \n    # 转换为JSON字符串\n    infos_json = json.dumps(infos, ensure_ascii=False)\n    \n    return infos_json\n\n\ndef test_caption_infos():\n    \"\"\"测试字幕信息生成功能\"\"\"\n    # 测试基本功能\n    print(\"测试基本功能:\")\n    texts = [\n        \"床前明月光\",\n        \"明天我发光\"\n    ]\n    \n    timelines = [\n        {\"start\": 0, \"end\": 284891428},\n        {\"start\": 284891428, \"end\": 579578774}\n    ]\n    \n    font_size = 15\n    keyword_color = \"#ff0000\"\n    keyword_font_size = 15\n    keywords = [\"明月\", \"明天\"]\n    in_animation = \"展开\"\n    in_animation_duration = 1\n    loop_animation = \"分身\"\n    loop_animation_duration = 2\n    out_animation = \"闪现\"\n    out_animation_duration = 3\n    transition = \"推近\"\n    transition_duration = 1\n    \n    infos_json = caption_infos(\n        texts, timelines, font_size, keyword_color, keyword_font_size, keywords,\n        in_animation, in_animation_duration, loop_animation, loop_animation_duration,\n        out_animation, out_animation_duration, transition, transition_duration\n    )\n    print(f\"Infos JSON: {infos_json}\")\n    \n    # 解析JSON验证内容\n    infos = json.loads(infos_json)\n    print(f\"Parsed infos: {infos}\")\n    \n    # 验证内容\n    assert len(infos) == 2\n    assert infos[0][\"start\"] == 0\n    assert infos[0][\"end\"] == 284891428\n    assert infos[0][\"text\"] == \"床前明月光\"\n    assert infos[0][\"keyword\"] == \"明月\"\n    assert infos[0][\"keyword_color\"] == \"#ff0000\"\n    assert infos[0][\"keyword_font_size\"] == 15\n    assert infos[0][\"font_size\"] == 15\n    assert infos[0][\"in_animation\"] == \"展开\"\n    assert infos[0][\"in_animation_duration\"] == 1\n    assert infos[0][\"loop_animation\"] == \"分身\"\n    assert infos[0][\"loop_animation_duration\"] == 2\n    assert infos[0][\"out_animation\"] == \"闪现\"\n    assert infos[0][\"out_animation_duration\"] == 3\n    assert infos[0][\"transition\"] == \"推近\"\n    assert infos[0][\"transition_duration\"] == 1\n    \n    assert infos[1][\"start\"] == 284891428\n    assert infos[1][\"end\"] == 579578774\n    assert infos[1][\"text\"] == \"明天我发光\"\n    assert infos[1][\"keyword\"] == \"明天\"\n    assert infos[1][\"keyword_color\"] == \"#ff0000\"\n    assert infos[1][\"keyword_font_size\"] == 15\n    assert infos[1][\"font_size\"] == 15\n    assert infos[1][\"in_animation\"] == \"展开\"\n    assert infos[1][\"in_animation_duration\"] == 1\n    assert infos[1][\"loop_animation\"] == \"分身\"\n    assert infos[1][\"loop_animation_duration\"] == 2\n    assert infos[1][\"out_animation\"] == \"闪现\"\n    assert infos[1][\"out_animation_duration\"] == 3\n    assert infos[1][\"transition\"] == \"推近\"\n    assert infos[1][\"transition_duration\"] == 1\n    \n    print(\"基本功能测试通过\")\n    \n    # 测试可选参数为None的情况\n    print(\"\\n测试可选参数为None的情况:\")\n    infos_json_no_optional = caption_infos(texts, timelines)\n    infos_no_optional = json.loads(infos_json_no_optional)\n    print(f\"Infos without optional params: {infos_no_optional}\")\n    \n    # 验证可选参数不存在\n    optional_params = [\n        \"keyword_color\", \"keyword_font_size\", \"font_size\", \"in_animation\", \n        \"in_animation_duration\", \"loop_animation\", \"loop_animation_duration\", \n        \"out_animation\", \"out_animation_duration\", \"transition\", \"transition_duration\"\n    ]\n    \n    for param in optional_params:\n        assert param not in infos_no_optional[0]\n        assert param not in infos_no_optional[1]\n        \n    # 验证没有keyword参数时不会添加keyword字段\n    assert \"keyword\" not in infos_no_optional[0]\n    assert \"keyword\" not in infos_no_optional[1]\n    \n    print(\"可选参数测试通过\")\n    \n    print(\"\\n所有测试通过!\")\n\n\nif __name__ == \"__main__\":\n    test_caption_infos()"
  },
  {
    "path": "tests/manual_test_effect_infos.py",
    "content": "import json\n\n\ndef effect_infos(\n    effects: list,\n    timelines: list\n) -> str:\n    \"\"\"\n    根据特效名称和时间线生成特效信息JSON字符串\n    \"\"\"\n    # 检查参数长度是否匹配\n    if len(effects) != len(timelines):\n        raise ValueError(f\"effects length ({len(effects)}) does not match timelines length ({len(timelines)})\")\n    \n    # 构建特效信息列表\n    infos = []\n    for i, (effect, timeline) in enumerate(zip(effects, timelines)):\n        info = {\n            \"effect_title\": effect,\n            \"start\": timeline[\"start\"],\n            \"end\": timeline[\"end\"]\n        }\n        \n        infos.append(info)\n    \n    # 转换为JSON字符串\n    infos_json = json.dumps(infos, ensure_ascii=False)\n    \n    return infos_json\n\n\ndef test_effect_infos():\n    \"\"\"测试特效信息生成功能\"\"\"\n    # 测试基本功能\n    print(\"测试基本功能:\")\n    effects = [\n        \"红包来了\",\n        \"雪花\"\n    ]\n    \n    timelines = [\n        {\"start\": 0, \"end\": 284891428},\n        {\"start\": 284891428, \"end\": 579578774}\n    ]\n    \n    infos_json = effect_infos(effects, timelines)\n    print(f\"Infos JSON: {infos_json}\")\n    \n    # 解析JSON验证内容\n    infos = json.loads(infos_json)\n    print(f\"Parsed infos: {infos}\")\n    \n    # 验证内容\n    assert len(infos) == 2\n    assert infos[0][\"effect_title\"] == \"红包来了\"\n    assert infos[0][\"start\"] == 0\n    assert infos[0][\"end\"] == 284891428\n    \n    assert infos[1][\"effect_title\"] == \"雪花\"\n    assert infos[1][\"start\"] == 284891428\n    assert infos[1][\"end\"] == 579578774\n    \n    print(\"基本功能测试通过\")\n    \n    print(\"\\n所有测试通过!\")\n\n\nif __name__ == \"__main__\":\n    test_effect_infos()"
  },
  {
    "path": "tests/manual_test_imgs_infos.py",
    "content": "import json\n\ndef imgs_infos(\n    imgs: list,\n    timelines: list,\n    height: int = None,\n    width: int = None,\n    in_animation: str = None,\n    in_animation_duration: int = None,\n    loop_animation: str = None,\n    loop_animation_duration: int = None,\n    out_animation: str = None,\n    out_animation_duration: int = None,\n    transition: str = None,\n    transition_duration: int = None\n) -> str:\n    \"\"\"\n    根据图片URL和时间线生成图片信息JSON字符串\n    \"\"\"\n    # 检查参数长度是否匹配\n    if len(imgs) != len(timelines):\n        raise ValueError(f\"imgs length ({len(imgs)}) does not match timelines length ({len(timelines)})\")\n    \n    # 构建图片信息列表\n    infos = []\n    for i, (img_url, timeline) in enumerate(zip(imgs, timelines)):\n        info = {\n            \"image_url\": img_url,\n            \"start\": timeline[\"start\"],\n            \"end\": timeline[\"end\"]\n        }\n        \n        # 添加可选参数\n        if height is not None:\n            info[\"height\"] = height\n            \n        if width is not None:\n            info[\"width\"] = width\n            \n        if in_animation is not None:\n            info[\"in_animation\"] = in_animation\n            \n        if in_animation_duration is not None:\n            info[\"in_animation_duration\"] = in_animation_duration\n            \n        if loop_animation is not None:\n            info[\"loop_animation\"] = loop_animation\n            \n        if loop_animation_duration is not None:\n            info[\"loop_animation_duration\"] = loop_animation_duration\n            \n        if out_animation is not None:\n            info[\"out_animation\"] = out_animation\n            \n        if out_animation_duration is not None:\n            info[\"out_animation_duration\"] = out_animation_duration\n            \n        if transition is not None:\n            info[\"transition\"] = transition\n            \n        if transition_duration is not None:\n            info[\"transition_duration\"] = transition_duration\n            \n        infos.append(info)\n    \n    # 转换为JSON字符串\n    infos_json = json.dumps(infos, ensure_ascii=False)\n    \n    return infos_json\n\n\ndef test_imgs_infos():\n    \"\"\"测试图片信息生成功能\"\"\"\n    # 测试基本功能\n    print(\"测试基本功能:\")\n    imgs = [\n        \"https://assets.jcaigc.cn/demo.png\",\n        \"https://assets.jcaigc.cn/demo1.png\"\n    ]\n    \n    timelines = [\n        {\"start\": 0, \"end\": 284891428},\n        {\"start\": 284891428, \"end\": 579578774}\n    ]\n    \n    height = 1080\n    width = 1920\n    in_animation = \"展开\"\n    in_animation_duration = 1\n    loop_animation = \"分身\"\n    loop_animation_duration = 2\n    out_animation = \"闪现\"\n    out_animation_duration = 3\n    transition = \"推近\"\n    transition_duration = 1\n    \n    infos_json = imgs_infos(\n        imgs, timelines, height, width, in_animation, in_animation_duration,\n        loop_animation, loop_animation_duration, out_animation, out_animation_duration,\n        transition, transition_duration\n    )\n    print(f\"Infos JSON: {infos_json}\")\n    \n    # 解析JSON验证内容\n    infos = json.loads(infos_json)\n    print(f\"Parsed infos: {infos}\")\n    \n    # 验证内容\n    assert len(infos) == 2\n    assert infos[0][\"image_url\"] == \"https://assets.jcaigc.cn/demo.png\"\n    assert infos[0][\"start\"] == 0\n    assert infos[0][\"end\"] == 284891428\n    assert infos[0][\"height\"] == 1080\n    assert infos[0][\"width\"] == 1920\n    assert infos[0][\"in_animation\"] == \"展开\"\n    assert infos[0][\"in_animation_duration\"] == 1\n    assert infos[0][\"loop_animation\"] == \"分身\"\n    assert infos[0][\"loop_animation_duration\"] == 2\n    assert infos[0][\"out_animation\"] == \"闪现\"\n    assert infos[0][\"out_animation_duration\"] == 3\n    assert infos[0][\"transition\"] == \"推近\"\n    assert infos[0][\"transition_duration\"] == 1\n    \n    assert infos[1][\"image_url\"] == \"https://assets.jcaigc.cn/demo1.png\"\n    assert infos[1][\"start\"] == 284891428\n    assert infos[1][\"end\"] == 579578774\n    assert infos[1][\"height\"] == 1080\n    assert infos[1][\"width\"] == 1920\n    assert infos[1][\"in_animation\"] == \"展开\"\n    assert infos[1][\"in_animation_duration\"] == 1\n    assert infos[1][\"loop_animation\"] == \"分身\"\n    assert infos[1][\"loop_animation_duration\"] == 2\n    assert infos[1][\"out_animation\"] == \"闪现\"\n    assert infos[1][\"out_animation_duration\"] == 3\n    assert infos[1][\"transition\"] == \"推近\"\n    assert infos[1][\"transition_duration\"] == 1\n    \n    print(\"基本功能测试通过\")\n    \n    # 测试可选参数为None的情况\n    print(\"\\n测试可选参数为None的情况:\")\n    infos_json_no_optional = imgs_infos(imgs, timelines)\n    infos_no_optional = json.loads(infos_json_no_optional)\n    print(f\"Infos without optional params: {infos_no_optional}\")\n    \n    # 验证可选参数不存在\n    optional_params = [\n        \"height\", \"width\", \"in_animation\", \"in_animation_duration\",\n        \"loop_animation\", \"loop_animation_duration\", \"out_animation\",\n        \"out_animation_duration\", \"transition\", \"transition_duration\"\n    ]\n    \n    for param in optional_params:\n        assert param not in infos_no_optional[0]\n        assert param not in infos_no_optional[1]\n    \n    print(\"可选参数测试通过\")\n    \n    print(\"\\n所有测试通过!\")\n\n\nif __name__ == \"__main__\":\n    test_imgs_infos()"
  },
  {
    "path": "tests/manual_test_keyframes_infos.py",
    "content": "import json\n\n\ndef keyframes_infos(\n    ctype: str,\n    offsets: str,\n    values: str,\n    segment_infos: list,\n    height: int = None,\n    width: int = None\n) -> str:\n    \"\"\"\n    根据关键帧类型、位置比例和值生成关键帧信息JSON字符串\n    \"\"\"\n    # 解析offsets和values\n    offset_list = [int(x) for x in offsets.split(\"|\")]\n    value_list = [float(x) for x in values.split(\"|\")]\n    \n    # 检查offsets和values长度是否匹配\n    if len(offset_list) != len(value_list):\n        raise ValueError(f\"offsets length ({len(offset_list)}) does not match values length ({len(value_list)})\")\n    \n    # 构建关键帧信息列表\n    keyframes = []\n    \n    # 处理每个片段信息\n    for segment_info in segment_infos:\n        segment_id = segment_info[\"id\"]\n        start = segment_info[\"start\"]\n        end = segment_info[\"end\"]\n        duration = end - start\n        \n        # 为每个offset创建关键帧\n        for offset_percent, value in zip(offset_list, value_list):\n            # 计算实际的时间偏移（微秒）\n            time_offset = int(start + (offset_percent / 100.0) * duration)\n            \n            # 根据关键帧类型处理值的归一化\n            normalized_value = value\n            if ctype == \"KFTypePositionX\" and width is not None and width > 0:\n                normalized_value = value / width\n            elif ctype == \"KFTypePositionY\" and height is not None and height > 0:\n                normalized_value = value / height\n            \n            keyframe = {\n                \"offset\": time_offset,\n                \"property\": ctype,\n                \"segment_id\": segment_id,\n                \"value\": normalized_value\n            }\n            \n            keyframes.append(keyframe)\n    \n    # 转换为JSON字符串\n    keyframes_json = json.dumps(keyframes, ensure_ascii=False)\n    \n    return keyframes_json\n\n\ndef test_keyframes_infos():\n    \"\"\"测试关键帧信息生成功能\"\"\"\n    # 测试基本功能\n    print(\"测试基本功能:\")\n    \n    # 示例输入参数\n    ctype = \"KFTypePositionX\"\n    offsets = \"0|100\"\n    values = \"1|2\"\n    segment_infos = [\n        {\n            \"end\": 5000000,\n            \"id\": \"c1369c795ca64fe38bac1f2a93e8a811\",\n            \"start\": 0\n        }\n    ]\n    width = 1920\n    height = 1080\n    \n    keyframes_json = keyframes_infos(ctype, offsets, values, segment_infos, height, width)\n    print(f\"Keyframes JSON: {keyframes_json}\")\n    \n    # 解析JSON验证内容\n    keyframes = json.loads(keyframes_json)\n    print(f\"Parsed keyframes: {keyframes}\")\n    \n    # 验证内容\n    assert len(keyframes) == 2\n    assert keyframes[0][\"offset\"] == 0\n    assert keyframes[0][\"property\"] == \"KFTypePositionX\"\n    assert keyframes[0][\"segment_id\"] == \"c1369c795ca64fe38bac1f2a93e8a811\"\n    # 由于是KFTypePositionX类型并且提供了width，值应该被归一化\n    assert keyframes[0][\"value\"] == 1 / 1920\n    \n    assert keyframes[1][\"offset\"] == 5000000\n    assert keyframes[1][\"property\"] == \"KFTypePositionX\"\n    assert keyframes[1][\"segment_id\"] == \"c1369c795ca64fe38bac1f2a93e8a811\"\n    # 由于是KFTypePositionX类型并且提供了width，值应该被归一化\n    assert keyframes[1][\"value\"] == 2 / 1920\n    \n    print(\"基本功能测试通过\")\n    \n    # 测试不提供width和height的情况\n    print(\"\\n测试不提供width和height的情况:\")\n    keyframes_json_no_dim = keyframes_infos(ctype, offsets, values, segment_infos)\n    keyframes_no_dim = json.loads(keyframes_json_no_dim)\n    print(f\"Keyframes without dimensions: {keyframes_no_dim}\")\n    \n    # 验证值没有被归一化\n    assert keyframes_no_dim[0][\"value\"] == 1\n    assert keyframes_no_dim[1][\"value\"] == 2\n    \n    print(\"不提供width和height测试通过\")\n    \n    # 测试KFTypePositionY类型\n    print(\"\\n测试KFTypePositionY类型:\")\n    ctype_y = \"KFTypePositionY\"\n    keyframes_json_y = keyframes_infos(ctype_y, offsets, values, segment_infos, height, width)\n    keyframes_y = json.loads(keyframes_json_y)\n    print(f\"Keyframes Y: {keyframes_y}\")\n    \n    # 验证值被height归一化\n    assert keyframes_y[0][\"value\"] == 1 / 1080\n    assert keyframes_y[1][\"value\"] == 2 / 1080\n    \n    print(\"KFTypePositionY类型测试通过\")\n    \n    # 测试多个offset和value\n    print(\"\\n测试多个offset和value:\")\n    offsets_multi = \"0|50|100\"\n    values_multi = \"1|2|1\"\n    keyframes_json_multi = keyframes_infos(ctype, offsets_multi, values_multi, segment_infos, height, width)\n    keyframes_multi = json.loads(keyframes_json_multi)\n    print(f\"Keyframes multi: {keyframes_multi}\")\n    \n    # 验证生成了3个关键帧\n    assert len(keyframes_multi) == 3\n    assert keyframes_multi[0][\"offset\"] == 0\n    assert keyframes_multi[1][\"offset\"] == 2500000  # 50% of 5000000\n    assert keyframes_multi[2][\"offset\"] == 5000000\n    \n    print(\"多个offset和value测试通过\")\n    \n    print(\"\\n所有测试通过!\")\n\n\nif __name__ == \"__main__\":\n    test_keyframes_infos()"
  },
  {
    "path": "tests/manual_test_video_infos.py",
    "content": "import json\n\n\ndef video_infos(\n    video_urls: list,\n    timelines: list,\n    height: int = None,\n    width: int = None,\n    mask: str = None,\n    transition: str = None,\n    transition_duration: int = None,\n    volume: float = 1.0\n) -> str:\n    \"\"\"\n    根据视频URL和时间线生成视频信息JSON字符串\n    \"\"\"\n    # 检查参数长度是否匹配\n    if len(video_urls) != len(timelines):\n        raise ValueError(f\"video_urls length ({len(video_urls)}) does not match timelines length ({len(timelines)})\")\n    \n    # 构建视频信息列表\n    infos = []\n    for i, (video_url, timeline) in enumerate(zip(video_urls, timelines)):\n        start = timeline[\"start\"]\n        end = timeline[\"end\"]\n        duration = end - start\n        \n        info = {\n            \"video_url\": video_url,\n            \"start\": start,\n            \"end\": end,\n            \"duration\": duration\n        }\n        \n        # 添加可选参数\n        if width is not None:\n            info[\"width\"] = width\n            \n        if height is not None:\n            info[\"height\"] = height\n            \n        if mask is not None:\n            info[\"mask\"] = mask\n            \n        if transition is not None:\n            info[\"transition\"] = transition\n            \n        if transition_duration is not None:\n            info[\"transition_duration\"] = transition_duration\n            \n        if volume is not None:\n            info[\"volume\"] = volume\n            \n        infos.append(info)\n    \n    # 转换为JSON字符串\n    infos_json = json.dumps(infos, ensure_ascii=False)\n    \n    return infos_json\n\n\ndef test_video_infos():\n    \"\"\"测试视频信息生成功能\"\"\"\n    # 测试基本功能\n    print(\"测试基本功能:\")\n    \n    # 示例输入参数\n    video_urls = [\n        \"https://assets.jcaigc.cn/min.mp4\",\n        \"https://assets.jcaigc.cn/max.mp4\"\n    ]\n    \n    timelines = [\n        {\"end\": 284891428, \"start\": 0},\n        {\"end\": 579578774, \"start\": 284891428}\n    ]\n    \n    height = 1080\n    width = 1920\n    mask = \"爱心\"\n    transition = \"推近\"\n    transition_duration = 1\n    volume = 1.0\n    \n    infos_json = video_infos(\n        video_urls, timelines, height, width, mask, \n        transition, transition_duration, volume\n    )\n    print(f\"Infos JSON: {infos_json}\")\n    \n    # 解析JSON验证内容\n    infos = json.loads(infos_json)\n    print(f\"Parsed infos: {infos}\")\n    \n    # 验证内容\n    assert len(infos) == 2\n    assert infos[0][\"video_url\"] == \"https://assets.jcaigc.cn/min.mp4\"\n    assert infos[0][\"start\"] == 0\n    assert infos[0][\"end\"] == 284891428\n    assert infos[0][\"duration\"] == 284891428\n    assert infos[0][\"width\"] == 1920\n    assert infos[0][\"height\"] == 1080\n    assert infos[0][\"mask\"] == \"爱心\"\n    assert infos[0][\"volume\"] == 1.0\n    assert infos[0][\"transition\"] == \"推近\"\n    assert infos[0][\"transition_duration\"] == 1\n    \n    assert infos[1][\"video_url\"] == \"https://assets.jcaigc.cn/max.mp4\"\n    assert infos[1][\"start\"] == 284891428\n    assert infos[1][\"end\"] == 579578774\n    assert infos[1][\"duration\"] == 294687346  # 579578774 - 284891428\n    assert infos[1][\"width\"] == 1920\n    assert infos[1][\"height\"] == 1080\n    assert infos[1][\"mask\"] == \"爱心\"\n    assert infos[1][\"volume\"] == 1.0\n    assert infos[1][\"transition\"] == \"推近\"\n    assert infos[1][\"transition_duration\"] == 1\n    \n    print(\"基本功能测试通过\")\n    \n    # 测试可选参数为None的情况\n    print(\"\\n测试可选参数为None的情况:\")\n    infos_json_no_optional = video_infos(video_urls, timelines)\n    infos_no_optional = json.loads(infos_json_no_optional)\n    print(f\"Infos without optional params: {infos_no_optional}\")\n    \n    # 验证可选参数不存在\n    optional_params = [\n        \"width\", \"height\", \"mask\", \"transition\", \n        \"transition_duration\", \"volume\"\n    ]\n    \n    for param in optional_params:\n        # volume有默认值1.0，所以会存在\n        if param != \"volume\":\n            assert param not in infos_no_optional[0]\n            assert param not in infos_no_optional[1]\n        else:\n            # volume有默认值1.0\n            assert infos_no_optional[0][\"volume\"] == 1.0\n            assert infos_no_optional[1][\"volume\"] == 1.0\n    \n    print(\"可选参数测试通过\")\n    \n    print(\"\\n所有测试通过!\")\n\n\nif __name__ == \"__main__\":\n    test_video_infos()"
  },
  {
    "path": "tests/test_add_audios.py",
    "content": "import requests\nimport json\nimport time\n\ndef test_add_audios():\n    \"\"\"测试音频添加接口\"\"\"\n    \n    # 1. 先创建一个草稿\n    create_draft_url = \"http://localhost:30000/openapi/capcut-mate/v1/create_draft\"\n    create_draft_data = {\n        \"width\": 1920,\n        \"height\": 1080\n    }\n    \n    try:\n        print(\"Creating draft...\")\n        create_response = requests.post(create_draft_url, json=create_draft_data)\n        \n        if create_response.status_code != 200:\n            print(f\"Failed to create draft: {create_response.status_code}\")\n            print(create_response.text)\n            return\n            \n        draft_url = create_response.json()[\"draft_url\"]\n        print(f\"Draft created successfully: {draft_url}\")\n        \n        # 2. 添加音频\n        add_audios_url = \"http://localhost:30000/openapi/capcut-mate/v1/add_audios\"\n        audio_infos = [\n            {\n                \"audio_url\": \"https://assets.jcaigc.cn/test1.mp3\",\n                \"duration\": 10000000,  # 10秒 (微秒)\n                \"start\": 0,\n                \"end\": 5000000,  # 前5秒\n                \"volume\": 0.8,\n                \"audio_effect\": \"教堂\"\n            }\n        ]\n        \n        add_audios_data = {\n            \"draft_url\": draft_url,\n            \"audio_infos\": json.dumps(audio_infos)\n        }\n        \n        print(\"Adding audios...\")\n        add_response = requests.post(add_audios_url, json=add_audios_data)\n        \n        if add_response.status_code == 200:\n            result = add_response.json()\n            print(f\"Audios added successfully!\")\n            print(f\"Track ID: {result['track_id']}\")\n            print(f\"Audio IDs: {result['audio_ids']}\")\n            print(f\"Draft URL: {result['draft_url']}\")\n        else:\n            print(f\"Failed to add audios: {add_response.status_code}\")\n            print(add_response.text)\n            \n    except Exception as e:\n        print(f\"Error occurred: {e}\")\n        print(\"确保服务器正在运行 http://localhost:30000\")\n\n\nif __name__ == \"__main__\":\n    test_add_audios()"
  },
  {
    "path": "tests/test_add_captions_text_effect.py",
    "content": "\"\"\"\n测试 add_captions 接口的 text_effect 功能\n\"\"\"\nimport json\nfrom src.service.add_captions import add_captions\nfrom src.service.get_text_effects import resolve_text_effect, TEXT_EFFECT_MAP\n\n\ndef test_resolve_text_effect():\n    \"\"\"测试花字效果解析功能\"\"\"\n    print(\"=\" * 60)\n    print(\"测试花字效果解析功能\")\n    print(\"=\" * 60)\n    \n    # 测试 1: 通过中文名称查找\n    print(\"\\n测试 1: 通过中文名称查找 '白字橘色发光花字'\")\n    result = resolve_text_effect(\"白字橘色发光花字\")\n    if result:\n        print(f\"✓ 找到花字效果：{result}\")\n        assert result['effect_id'] == \"7296357486490144036\"\n        assert result['resource_id'] == \"7296357486490144036\"\n    else:\n        print(\"✗ 未找到花字效果\")\n    \n    # 测试 2: 通过 effect_id 查找\n    print(\"\\n测试 2: 通过 effect_id 查找 '7296357486490144036'\")\n    result = resolve_text_effect(\"7296357486490144036\")\n    if result:\n        print(f\"✓ 找到花字效果：{result}\")\n    else:\n        print(\"✗ 未找到花字效果\")\n    \n    # 测试 3: 不存在的名称\n    print(\"\\n测试 3: 查找不存在的花字效果 '不存在的花字'\")\n    result = resolve_text_effect(\"不存在的花字\")\n    if result is None:\n        print(\"✓ 正确返回 None\")\n    else:\n        print(f\"✗ 应该返回 None，但返回了：{result}\")\n    \n    print(\"\\n\" + \"=\" * 60)\n    print(\"花字效果解析功能测试完成\")\n    print(\"=\" * 60)\n\n\ndef test_text_effect_map():\n    \"\"\"测试花字映射表\"\"\"\n    print(\"\\n\" + \"=\" * 60)\n    print(\"测试花字映射表内容\")\n    print(\"=\" * 60)\n    \n    print(f\"\\n花字映射表包含 {len(TEXT_EFFECT_MAP)} 个花字效果:\")\n    for name, data in TEXT_EFFECT_MAP.items():\n        print(f\"  - {name}: {data['effect_id']}\")\n\n\ndef test_add_captions_with_text_effect():\n    \"\"\"测试添加字幕时应用花字效果（需要实际草稿环境）\"\"\"\n    print(\"\\n\" + \"=\" * 60)\n    print(\"测试 add_captions 集成花字效果功能\")\n    print(\"=\" * 60)\n    \n    # 这是一个示例测试，实际需要有效的草稿 URL\n    print(\"\\n注意：此测试需要有效的草稿环境\")\n    print(\"示例调用代码:\")\n    print(\"\"\"\n    draft_url = \"https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=YOUR_DRAFT_ID\"\n    captions = json.dumps([\n        {\n            \"start\": 0,\n            \"end\": 5000000,\n            \"text\": \"测试花字效果\",\n            \"text_effect\": \"白字橘色发光花字\"\n        }\n    ])\n    \n    # 使用全局 text_effect 参数\n    draft_url, track_id, text_ids, segment_ids, segment_infos = add_captions(\n        draft_url=draft_url,\n        captions=captions,\n        text_effect=\"白字橘色发光花字\"  # 全局花字效果\n    )\n    \n    # 或者在每个 caption 中单独指定\n    captions = json.dumps([\n        {\n            \"start\": 0,\n            \"end\": 5000000,\n            \"text\": \"测试花字效果 1\",\n            \"text_effect\": \"白字橘色发光花字\"  # 单个 caption 的花字\n        },\n        {\n            \"start\": 5000000,\n            \"end\": 10000000,\n            \"text\": \"测试花字效果 2\",\n            \"text_effect\": \"黄字白色发光花字\"  # 不同的花字\n        }\n    ])\n    \"\"\")\n    \n    print(\"\\n\" + \"=\" * 60)\n    print(\"集成测试示例完成\")\n    print(\"=\" * 60)\n\n\nif __name__ == \"__main__\":\n    # 运行所有测试\n    test_text_effect_map()\n    test_resolve_text_effect()\n    test_add_captions_with_text_effect()\n    \n    print(\"\\n\" + \"=\" * 60)\n    print(\"所有测试完成！\")\n    print(\"=\" * 60)\n"
  },
  {
    "path": "tests/test_add_images.py",
    "content": "import requests\nimport json\nimport time\n\ndef test_add_images():\n    \"\"\"测试图片添加接口\"\"\"\n    \n    # 1. 先创建一个草稿\n    create_draft_url = \"http://localhost:8000/v1/create_draft\"\n    create_draft_data = {\n        \"width\": 1920,\n        \"height\": 1080\n    }\n    \n    try:\n        print(\"Creating draft...\")\n        create_response = requests.post(create_draft_url, json=create_draft_data)\n        \n        if create_response.status_code != 200:\n            print(f\"Failed to create draft: {create_response.status_code}\")\n            print(create_response.text)\n            return\n            \n        draft_url = create_response.json()[\"draft_url\"]\n        print(f\"Draft created successfully: {draft_url}\")\n        \n        # 2. 添加图片\n        add_images_url = \"http://localhost:8000/v1/add_images\"\n        image_infos = [\n            {\n                \"image_url\": \"https://example.com/image1.jpg\",\n                \"width\": 1024,\n                \"height\": 1024,\n                \"start\": 0,\n                \"end\": 2000000,  # 显示2秒\n                \"in_animation\": \"淡入\",\n                \"out_animation\": \"淡出\",\n                \"in_animation_duration\": 500000,  # 0.5秒\n                \"out_animation_duration\": 500000,  # 0.5秒\n                \"transition\": \"淡入淡出\",\n                \"transition_duration\": 500000  # 0.5秒\n            },\n            {\n                \"image_url\": \"https://example.com/image2.png\", \n                \"width\": 800,\n                \"height\": 600,\n                \"start\": 2000000,  # 从第2秒开始\n                \"end\": 5000000,    # 显示到第5秒\n                \"loop_animation\": \"呼吸\",\n                \"loop_animation_duration\": 1000000  # 1秒循环\n            }\n        ]\n        \n        add_images_data = {\n            \"draft_url\": draft_url,\n            \"image_infos\": json.dumps(image_infos),\n            \"alpha\": 0.9,\n            \"scale_x\": 1.2,\n            \"scale_y\": 1.2,\n            \"transform_x\": 50,\n            \"transform_y\": -30\n        }\n        \n        print(\"Adding images...\")\n        add_response = requests.post(add_images_url, json=add_images_data)\n        \n        if add_response.status_code == 200:\n            result = add_response.json()\n            print(f\"Images added successfully!\")\n            print(f\"Track ID: {result['track_id']}\")\n            print(f\"Image IDs: {result['image_ids']}\")\n            print(f\"Segment IDs: {result['segment_ids']}\")\n            print(f\"Segment Infos:\")\n            for seg_info in result['segment_infos']:\n                print(f\"  - ID: {seg_info['id']}, Start: {seg_info['start']}, End: {seg_info['end']}\")\n            print(f\"Draft URL: {result['draft_url']}\")\n        else:\n            print(f\"Failed to add images: {add_response.status_code}\")\n            print(add_response.text)\n            \n    except Exception as e:\n        print(f\"Error occurred: {e}\")\n        print(\"Make sure the server is running on http://localhost:8000\")\n\n\nif __name__ == \"__main__\":\n    test_add_images()"
  },
  {
    "path": "tests/test_add_keyframes_normalize.py",
    "content": "\"\"\"add_keyframes / keyframes_infos 位置关键帧归一化集成测试。\"\"\"\nimport json\nimport os\nimport sys\nfrom unittest.mock import MagicMock, patch\n\nimport pytest\n\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), \"..\")))\n\nfrom src.pyJianYingDraft.segment import VisualSegment\nfrom src.service.add_keyframes import add_keyframes\nfrom src.service.keyframes_infos import keyframes_infos\n\n\n@pytest.fixture\ndef visual_segment():\n    seg = MagicMock(spec=VisualSegment)\n    seg.duration = 10_000_000\n    seg.segment_id = \"533f9ef5f7d341a2ad3f18eb4cb0f9b0\"\n    return seg\n\n\ndef test_add_keyframes_normalizes_pixel_position_x(visual_segment):\n    \"\"\"回归：像素位移 -2608 / -699 应除以画布宽度。\"\"\"\n    keyframes = json.dumps([\n        {\n            \"segment_id\": \"533f9ef5f7d341a2ad3f18eb4cb0f9b0\",\n            \"property\": \"KFTypePositionX\",\n            \"offset\": 0,\n            \"value\": -2608.0,\n        },\n        {\n            \"segment_id\": \"533f9ef5f7d341a2ad3f18eb4cb0f9b0\",\n            \"property\": \"KFTypePositionX\",\n            \"offset\": 3_345_600,\n            \"value\": -699.0,\n        },\n    ])\n    mock_script = MagicMock()\n    mock_script.width = 1920\n    mock_script.height = 1080\n\n    with patch(\"src.service.add_keyframes.helper.get_url_param\", return_value=\"draft-kf\"), \\\n            patch(\"src.service.add_keyframes.DRAFT_CACHE\", {\"draft-kf\": mock_script}), \\\n            patch(\"src.service.add_keyframes.find_segment_by_id\", return_value=visual_segment):\n        draft_url, added, affected = add_keyframes(\n            \"http://localhost/v1/get_draft?draft_id=draft-kf\",\n            keyframes,\n        )\n\n    assert added == 2\n    calls = visual_segment.add_keyframe.call_args_list\n    assert calls[0][0][2] == pytest.approx(-2608.0 / 1920)\n    assert calls[1][0][2] == pytest.approx(-699.0 / 1920)\n    assert affected == [\"533f9ef5f7d341a2ad3f18eb4cb0f9b0\"]\n    assert \"draft-kf\" in draft_url\n\n\ndef test_add_keyframes_rotation_value_unchanged(visual_segment):\n    mock_script = MagicMock(width=1920, height=1080)\n    keyframes = json.dumps([{\n        \"segment_id\": \"533f9ef5f7d341a2ad3f18eb4cb0f9b0\",\n        \"property\": \"KFTypeRotation\",\n        \"offset\": 0,\n        \"value\": 90.0,\n    }])\n\n    with patch(\"src.service.add_keyframes.helper.get_url_param\", return_value=\"draft-kf\"), \\\n            patch(\"src.service.add_keyframes.DRAFT_CACHE\", {\"draft-kf\": mock_script}), \\\n            patch(\"src.service.add_keyframes.find_segment_by_id\", return_value=visual_segment):\n        add_keyframes(\"http://localhost/v1/get_draft?draft_id=draft-kf\", keyframes)\n\n    assert visual_segment.add_keyframe.call_args[0][2] == 90.0\n\n\ndef test_add_keyframes_uniform_scale_and_alpha_unchanged(visual_segment):\n    mock_script = MagicMock(width=1920, height=1080)\n    keyframes = json.dumps([\n        {\n            \"segment_id\": \"533f9ef5f7d341a2ad3f18eb4cb0f9b0\",\n            \"property\": \"UNIFORM_SCALE\",\n            \"offset\": 0,\n            \"value\": 1.3,\n        },\n        {\n            \"segment_id\": \"533f9ef5f7d341a2ad3f18eb4cb0f9b0\",\n            \"property\": \"KFTypeAlpha\",\n            \"offset\": 1_000_000,\n            \"value\": 0.5,\n        },\n    ])\n\n    with patch(\"src.service.add_keyframes.helper.get_url_param\", return_value=\"draft-kf\"), \\\n            patch(\"src.service.add_keyframes.DRAFT_CACHE\", {\"draft-kf\": mock_script}), \\\n            patch(\"src.service.add_keyframes.find_segment_by_id\", return_value=visual_segment):\n        add_keyframes(\"http://localhost/v1/get_draft?draft_id=draft-kf\", keyframes)\n\n    calls = visual_segment.add_keyframe.call_args_list\n    assert calls[0][0][2] == 1.3\n    assert calls[1][0][2] == 0.5\n\n\ndef test_keyframes_infos_normalizes_pixels_for_position():\n    out = keyframes_infos(\n        ctype=\"KFTypePositionX\",\n        offsets=\"0|50\",\n        values=\"-2608|-699\",\n        segment_infos=[{\"id\": \"seg-1\", \"start\": 0, \"end\": 10_000_000}],\n        width=1920,\n        height=1080,\n    )\n    items = json.loads(out)\n    assert len(items) == 2\n    assert items[0][\"value\"] == pytest.approx(-2608.0 / 1920)\n    assert items[1][\"value\"] == pytest.approx(-699.0 / 1920)\n    assert items[0][\"offset\"] == 0\n    assert items[1][\"offset\"] == 5_000_000\n"
  },
  {
    "path": "tests/test_add_keyframes_refactor.py",
    "content": "import sys\nimport os\nimport json\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\nfrom src.service.add_keyframes import parse_keyframes_data\n\n\ndef test_parse_keyframes_data():\n    \"\"\"测试关键帧数据解析\"\"\"\n    print(\"Testing keyframe data parsing...\")\n    \n    # 测试数据\n    test_keyframes = [\n        {\n            \"segment_id\": \"segment-1\",\n            \"property\": \"KFTypePositionX\",\n            \"offset\": 0.0,\n            \"value\": 0.0\n        },\n        {\n            \"segment_id\": \"segment-1\",\n            \"property\": \"KFTypePositionX\",\n            \"offset\": 1.0,\n            \"value\": 0.5\n        }\n    ]\n    \n    # 将测试数据转换为JSON字符串\n    keyframes_json = json.dumps(test_keyframes)\n    \n    # 解析关键帧数据\n    parsed_keyframes = parse_keyframes_data(keyframes_json)\n    \n    # 验证解析结果\n    assert len(parsed_keyframes) == 2\n    assert parsed_keyframes[0][\"segment_id\"] == \"segment-1\"\n    assert parsed_keyframes[0][\"property\"] == \"KFTypePositionX\"\n    assert parsed_keyframes[0][\"offset\"] == 0.0\n    assert parsed_keyframes[0][\"value\"] == 0.0\n    assert parsed_keyframes[1][\"segment_id\"] == \"segment-1\"\n    assert parsed_keyframes[1][\"property\"] == \"KFTypePositionX\"\n    assert parsed_keyframes[1][\"offset\"] == 1.0\n    assert parsed_keyframes[1][\"value\"] == 0.5\n    print(\"✓ Keyframe data parsing test passed\")\n\n\ndef test_parse_invalid_keyframes_data():\n    \"\"\"测试无效关键帧数据解析\"\"\"\n    print(\"Testing invalid keyframe data parsing...\")\n    \n    # 测试缺少必填字段的数据\n    invalid_keyframes = [\n        {\n            \"segment_id\": \"segment-1\",\n            \"property\": \"KFTypePositionX\",\n            # 缺少offset和value字段\n        }\n    ]\n    \n    # 将测试数据转换为JSON字符串\n    keyframes_json = json.dumps(invalid_keyframes)\n    \n    # 尝试解析关键帧数据，应该抛出异常\n    try:\n        parse_keyframes_data(keyframes_json)\n        assert False, \"Should have raised an exception\"\n    except Exception as e:\n        print(f\"✓ Invalid keyframe data parsing test passed, caught expected exception: {e}\")\n\n\nif __name__ == \"__main__\":\n    print(\"Running add_keyframes refactor tests...\")\n    test_parse_keyframes_data()\n    test_parse_invalid_keyframes_data()\n    print(\"All tests passed!\")"
  },
  {
    "path": "tests/test_add_masks.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"\n测试 add_masks 功能的单元测试\n包含正常场景、边界场景和异常场景的完整测试用例\n\"\"\"\n\nimport unittest\nfrom unittest.mock import Mock, MagicMock, patch\nfrom typing import List, Tuple\nimport sys\nimport os\n\n# 添加项目根目录到路径\nsys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\n\nfrom src.service.add_masks import (\n    add_masks,\n    add_mask_to_segment,\n    calculate_mask_size_params,\n    find_segment_by_id,\n    find_mask_type_by_name\n)\nfrom src.pyJianYingDraft import ScriptFile, MaskType\nfrom src.pyJianYingDraft.video_segment import VideoSegment\nfrom exceptions import CustomException, CustomError\n\n\nclass TestCalculateMaskSizeParams(unittest.TestCase):\n    \"\"\"测试遮罩尺寸参数计算函数\"\"\"\n    \n    def test_circle_mask_size_calculation(self):\n        \"\"\"测试圆形遮罩尺寸计算（非矩形）\"\"\"\n        # 准备测试数据：素材尺寸 1920x1080，遮罩尺寸 512x512\n        mask_type = MaskType.圆形\n        width = 512\n        height = 512\n        material_width = 1920\n        material_height = 1080\n        \n        # 调用函数\n        size, rect_width = calculate_mask_size_params(\n            mask_type=mask_type,\n            width=width,\n            height=height,\n            material_width=material_width,\n            material_height=material_height\n        )\n        \n        # 验证结果\n        expected_size = height / material_height  # 512/1080 ≈ 0.474\n        self.assertAlmostEqual(size, expected_size, places=4)\n        self.assertIsNone(rect_width, \"非矩形遮罩的 rect_width 应为 None\")\n    \n    def test_rectangle_mask_size_calculation(self):\n        \"\"\"测试矩形遮罩尺寸计算\"\"\"\n        # 准备测试数据\n        mask_type = MaskType.矩形\n        width = 800\n        height = 600\n        material_width = 1920\n        material_height = 1080\n        \n        # 调用函数\n        size, rect_width = calculate_mask_size_params(\n            mask_type=mask_type,\n            width=width,\n            height=height,\n            material_width=material_width,\n            material_height=material_height\n        )\n        \n        # 验证结果\n        expected_size = height / material_height  # 600/1080 ≈ 0.556\n        expected_rect_width = width / material_width  # 800/1920 ≈ 0.417\n        self.assertAlmostEqual(size, expected_size, places=4)\n        self.assertAlmostEqual(rect_width, expected_rect_width, places=4)\n    \n    def test_heart_mask_size_calculation(self):\n        \"\"\"测试爱心遮罩尺寸计算\"\"\"\n        mask_type = MaskType.爱心\n        width = 400\n        height = 400\n        material_width = 1920\n        material_height = 1080\n        \n        size, rect_width = calculate_mask_size_params(\n            mask_type=mask_type,\n            width=width,\n            height=height,\n            material_width=material_width,\n            material_height=material_height\n        )\n        \n        expected_size = height / material_height\n        self.assertAlmostEqual(size, expected_size, places=4)\n        self.assertIsNone(rect_width)\n    \n    def test_star_mask_size_calculation(self):\n        \"\"\"测试星形遮罩尺寸计算\"\"\"\n        mask_type = MaskType.星形\n        width = 300\n        height = 300\n        material_width = 1280\n        material_height = 720\n        \n        size, rect_width = calculate_mask_size_params(\n            mask_type=mask_type,\n            width=width,\n            height=height,\n            material_width=material_width,\n            material_height=material_height\n        )\n        \n        expected_size = height / material_height  # 300/720 ≈ 0.417\n        self.assertAlmostEqual(size, expected_size, places=4)\n        self.assertIsNone(rect_width)\n    \n    def test_linear_mask_size_calculation(self):\n        \"\"\"测试线性遮罩尺寸计算\"\"\"\n        mask_type = MaskType.线性\n        width = 1000\n        height = 1000\n        material_width = 1920\n        material_height = 1080\n        \n        size, rect_width = calculate_mask_size_params(\n            mask_type=mask_type,\n            width=width,\n            height=height,\n            material_width=material_width,\n            material_height=material_height\n        )\n        \n        expected_size = height / material_height\n        self.assertAlmostEqual(size, expected_size, places=4)\n        self.assertIsNone(rect_width)\n    \n    def test_mirror_mask_size_calculation(self):\n        \"\"\"测试镜面遮罩尺寸计算\"\"\"\n        mask_type = MaskType.镜面\n        width = 600\n        height = 800\n        material_width = 1920\n        material_height = 1080\n        \n        size, rect_width = calculate_mask_size_params(\n            mask_type=mask_type,\n            width=width,\n            height=height,\n            material_width=material_width,\n            material_height=material_height\n        )\n        \n        expected_size = height / material_height\n        self.assertAlmostEqual(size, expected_size, places=4)\n        self.assertIsNone(rect_width)\n    \n    def test_zero_dimensions(self):\n        \"\"\"测试零尺寸的边界情况\"\"\"\n        mask_type = MaskType.圆形\n        width = 0\n        height = 0\n        material_width = 1920\n        material_height = 1080\n        \n        size, rect_width = calculate_mask_size_params(\n            mask_type=mask_type,\n            width=width,\n            height=height,\n            material_width=material_width,\n            material_height=material_height\n        )\n        \n        self.assertEqual(size, 0.0)\n        self.assertIsNone(rect_width)\n    \n    def test_large_dimensions(self):\n        \"\"\"测试大尺寸的边界情况\"\"\"\n        mask_type = MaskType.圆形\n        width = 4096\n        height = 4096\n        material_width = 1920\n        material_height = 1080\n        \n        size, rect_width = calculate_mask_size_params(\n            mask_type=mask_type,\n            width=width,\n            height=height,\n            material_width=material_width,\n            material_height=material_height\n        )\n        \n        expected_size = height / material_height  # 4096/1080 ≈ 3.793\n        self.assertGreater(size, 1.0, \"当遮罩尺寸大于素材时，size 应大于 1\")\n        self.assertAlmostEqual(size, expected_size, places=4)\n        self.assertIsNone(rect_width)\n\n\nclass TestFindMaskTypeByName(unittest.TestCase):\n    \"\"\"测试遮罩类型查找函数\"\"\"\n    \n    def test_find_circle_mask(self):\n        \"\"\"测试查找圆形遮罩\"\"\"\n        result = find_mask_type_by_name(\"圆形\")\n        self.assertEqual(result, MaskType.圆形)\n    \n    def test_find_rectangle_mask(self):\n        \"\"\"测试查找矩形遮罩\"\"\"\n        result = find_mask_type_by_name(\"矩形\")\n        self.assertEqual(result, MaskType.矩形)\n    \n    def test_find_linear_mask(self):\n        \"\"\"测试查找线性遮罩\"\"\"\n        result = find_mask_type_by_name(\"线性\")\n        self.assertEqual(result, MaskType.线性)\n    \n    def test_find_mirror_mask(self):\n        \"\"\"测试查找镜面遮罩\"\"\"\n        result = find_mask_type_by_name(\"镜面\")\n        self.assertEqual(result, MaskType.镜面)\n    \n    def test_find_heart_mask(self):\n        \"\"\"测试查找爱心遮罩\"\"\"\n        result = find_mask_type_by_name(\"爱心\")\n        self.assertEqual(result, MaskType.爱心)\n    \n    def test_find_star_mask(self):\n        \"\"\"测试查找星形遮罩\"\"\"\n        result = find_mask_type_by_name(\"星形\")\n        self.assertEqual(result, MaskType.星形)\n    \n    def test_find_invalid_mask(self):\n        \"\"\"测试查找不存在的遮罩类型\"\"\"\n        result = find_mask_type_by_name(\"不存在的遮罩\")\n        self.assertIsNone(result)\n    \n    def test_case_sensitive_search(self):\n        \"\"\"测试大小写敏感性\"\"\"\n        result = find_mask_type_by_name(\"圆形\")\n        self.assertIsNotNone(result)\n        \n        # 小写应该找不到\n        result_lower = find_mask_type_by_name(\"圆形\")\n        self.assertEqual(result, result_lower)\n\n\nclass TestAddMaskToSegment(unittest.TestCase):\n    \"\"\"测试添加遮罩到片段函数\"\"\"\n    \n    def setUp(self):\n        \"\"\"测试前准备\"\"\"\n        # 创建模拟的 ScriptFile\n        self.mock_script = Mock(spec=ScriptFile)\n        self.mock_script.materials = Mock()\n        self.mock_script.materials.masks = []\n        \n        self.mock_segment = Mock(spec=VideoSegment)\n        self.mock_segment.segment_id = \"test-segment-id\"\n        self.mock_segment.mask = None  # 初始无遮罩\n        self.mock_segment.material_size = (1920, 1080)\n        self.mock_segment.add_mask = Mock()\n        \n        # 模拟轨道和片段查找\n        self.mock_track = Mock()\n        self.mock_track.segments = [self.mock_segment]\n        self.mock_script.tracks = {\"video\": self.mock_track}\n    \n    def test_add_circle_mask_success(self):\n        \"\"\"测试成功添加圆形遮罩\"\"\"\n        with patch('src.service.add_masks.find_segment_by_id') as mock_find_segment:\n            mock_find_segment.return_value = self.mock_segment\n                \n            # 模拟 add_mask 方法成功执行，设置 mask 属性\n            def mock_add_mask_impl(*args, **kwargs):\n                self.mock_segment.mask = Mock()\n                self.mock_segment.mask.global_id = \"generated-mask-id\"\n                return self.mock_segment\n                \n            self.mock_segment.add_mask = Mock(side_effect=mock_add_mask_impl)\n                \n            mask_id = add_mask_to_segment(\n                script=self.mock_script,\n                segment_id=\"test-segment-id\",\n                mask_type=MaskType.圆形,\n                center_x=100,\n                center_y=200,\n                width=512,\n                height=512,\n                feather=20,\n                rotation=0,\n                invert=False,\n                round_corner=0\n            )\n                \n            # 验证调用了 add_mask 方法\n            self.mock_segment.add_mask.assert_called_once()\n            call_args = self.mock_segment.add_mask.call_args\n            self.assertEqual(call_args.kwargs['mask_type'], MaskType.圆形)\n            self.assertEqual(call_args.kwargs['center_x'], 100.0)\n            self.assertEqual(call_args.kwargs['center_y'], 200.0)\n            self.assertEqual(call_args.kwargs['feather'], 20.0)\n            self.assertEqual(call_args.kwargs['rotation'], 0.0)\n            self.assertFalse(call_args.kwargs['invert'])\n                \n            # 验证返回值\n            self.assertIsInstance(mask_id, str)\n            self.assertTrue(len(mask_id) > 0)\n    \n    def test_add_rectangle_mask_with_all_params(self):\n        \"\"\"测试添加矩形遮罩（使用所有参数）\"\"\"\n        with patch('src.service.add_masks.find_segment_by_id') as mock_find_segment:\n            mock_find_segment.return_value = self.mock_segment\n                \n            # 模拟 add_mask 方法成功执行，设置 mask 属性\n            def mock_add_mask_impl(*args, **kwargs):\n                self.mock_segment.mask = Mock()\n                self.mock_segment.mask.global_id = \"rectangle-mask-id\"\n                return self.mock_segment\n                \n            self.mock_segment.add_mask = Mock(side_effect=mock_add_mask_impl)\n                \n            mask_id = add_mask_to_segment(\n                script=self.mock_script,\n                segment_id=\"test-segment-id\",\n                mask_type=MaskType.矩形,\n                center_x=50,\n                center_y=100,\n                width=800,\n                height=600,\n                feather=30,\n                rotation=45,\n                invert=True,\n                round_corner=25\n            )\n                \n            # 验证调用了 add_mask 方法且包含所有参数\n            self.mock_segment.add_mask.assert_called_once()\n            call_args = self.mock_segment.add_mask.call_args\n            self.assertEqual(call_args.kwargs['mask_type'], MaskType.矩形)\n            self.assertIn('rect_width', call_args.kwargs)\n            self.assertIn('round_corner', call_args.kwargs)\n    \n    def test_segment_not_found(self):\n        \"\"\"测试片段未找到的异常情况\"\"\"\n        with patch('src.service.add_masks.find_segment_by_id') as mock_find_segment:\n            mock_find_segment.return_value = None\n            \n            with self.assertRaises(CustomException) as context:\n                add_mask_to_segment(\n                    script=self.mock_script,\n                    segment_id=\"non-existent-segment\",\n                    mask_type=MaskType.圆形\n                )\n            \n            self.assertEqual(context.exception.err, CustomError.SEGMENT_NOT_FOUND)\n    \n    def test_non_video_segment(self):\n        \"\"\"测试非视频片段类型异常\"\"\"\n        with patch('src.service.add_masks.find_segment_by_id') as mock_find_segment:\n            mock_non_video_segment = Mock()\n            mock_non_video_segment.segment_id = \"audio-segment\"\n            mock_find_segment.return_value = mock_non_video_segment\n            \n            with self.assertRaises(CustomException) as context:\n                add_mask_to_segment(\n                    script=self.mock_script,\n                    segment_id=\"audio-segment\",\n                    mask_type=MaskType.圆形\n                )\n            \n            self.assertEqual(context.exception.err, CustomError.INVALID_SEGMENT_TYPE)\n    \n    @patch('src.service.add_masks.find_segment_by_id')\n    def test_segment_already_has_mask(self, mock_find_segment):\n        \"\"\"测试片段已有遮罩的情况\"\"\"\n        mock_existing_mask = Mock()\n        mock_existing_mask.global_id = \"existing-mask-id\"\n        self.mock_segment.mask = mock_existing_mask\n        mock_find_segment.return_value = self.mock_segment\n        \n        # 应该返回现有遮罩 ID 而不是抛出异常\n        mask_id = add_mask_to_segment(\n            script=self.mock_script,\n            segment_id=\"test-segment-id\",\n            mask_type=MaskType.圆形\n        )\n        \n        self.assertEqual(mask_id, \"existing-mask-id\")\n        # 不应调用 add_mask\n        self.mock_segment.add_mask.assert_not_called()\n\n\nclass TestAddMasksIntegration(unittest.TestCase):\n    \"\"\"测试 add_masks 集成函数\"\"\"\n    \n    @patch('src.service.add_masks.DRAFT_CACHE')\n    @patch('src.service.add_masks.helper.get_url_param')\n    @patch('src.service.add_masks.find_mask_type_by_name')\n    @patch('src.service.add_masks.add_mask_to_segment')\n    def test_add_single_circle_mask(self, mock_add_mask, mock_find_mask_type, mock_get_param, mock_cache):\n        \"\"\"测试添加单个圆形遮罩的正常场景\"\"\"\n        # 设置模拟返回值\n        mock_get_param.return_value = \"test-draft-id\"\n        mock_find_mask_type.return_value = MaskType.圆形\n        mock_add_mask.return_value = \"generated-mask-id\"\n        \n        # 创建模拟草稿\n        mock_script = Mock(spec=ScriptFile)\n        mock_script.save = Mock()\n        \n        # 正确设置 DRAFT_CACHE 的模拟\n        mock_cache.__contains__ = Mock(return_value=True)\n        mock_cache.__getitem__ = Mock(return_value=mock_script)\n        \n        # 调用函数\n        draft_url = \"https://example.com/draft?draft_id=test-draft-id\"\n        segment_ids = [\"segment-1\"]\n        \n        result = add_masks(\n            draft_url=draft_url,\n            segment_ids=segment_ids,\n            name=\"圆形\",\n            X=100,\n            Y=200,\n            width=512,\n            height=512,\n            feather=20,\n            rotation=0,\n            invert=False,\n            roundCorner=0\n        )\n        \n        # 验证结果\n        self.assertEqual(result[0], draft_url)\n        self.assertEqual(result[1], 1)  # masks_added\n        self.assertEqual(result[2], segment_ids)  # affected_segments\n        self.assertEqual(result[3], [\"generated-mask-id\"])  # mask_ids\n        \n        # 验证保存了草稿\n        mock_script.save.assert_called_once()\n    \n    @patch('src.service.add_masks.DRAFT_CACHE')\n    @patch('src.service.add_masks.helper.get_url_param')\n    @patch('src.service.add_masks.find_mask_type_by_name')\n    @patch('src.service.add_masks.add_mask_to_segment')\n    def test_add_multiple_masks(self, mock_add_mask, mock_find_mask_type, mock_get_param, mock_cache):\n        \"\"\"测试批量添加多个遮罩\"\"\"\n        mock_get_param.return_value = \"test-draft-id\"\n        mock_find_mask_type.return_value = MaskType.圆形\n        mock_add_mask.side_effect = [\"mask-id-1\", \"mask-id-2\", \"mask-id-3\"]\n        \n        mock_script = Mock(spec=ScriptFile)\n        mock_script.save = Mock()\n        \n        # 正确设置 DRAFT_CACHE 的模拟\n        mock_cache.__contains__ = Mock(return_value=True)\n        mock_cache.__getitem__ = Mock(return_value=mock_script)\n        \n        draft_url = \"https://example.com/draft?draft_id=test-draft-id\"\n        segment_ids = [\"segment-1\", \"segment-2\", \"segment-3\"]\n        \n        result = add_masks(\n            draft_url=draft_url,\n            segment_ids=segment_ids,\n            name=\"圆形\"\n        )\n        \n        self.assertEqual(result[1], 3)  # masks_added\n        self.assertEqual(len(result[2]), 3)  # affected_segments\n        self.assertEqual(len(result[3]), 3)  # mask_ids\n        self.assertEqual(mock_add_mask.call_count, 3)\n    \n    @patch('src.service.add_masks.helper.get_url_param')\n    @patch('src.service.add_masks.DRAFT_CACHE')\n    def test_invalid_draft_url(self, mock_cache, mock_get_param):\n        \"\"\"测试无效的 draft_url 异常\"\"\"\n        mock_get_param.return_value = None\n        \n        with self.assertRaises(CustomException) as context:\n            add_masks(\n                draft_url=\"invalid-url\",\n                segment_ids=[\"segment-1\"]\n            )\n        \n        self.assertEqual(context.exception.err, CustomError.INVALID_DRAFT_URL)\n    \n    @patch('src.service.add_masks.DRAFT_CACHE')\n    @patch('src.service.add_masks.helper.get_url_param')\n    def test_empty_segment_ids(self, mock_get_param, mock_cache):\n        \"\"\"测试空的 segment_ids 异常\"\"\"\n        mock_get_param.return_value = \"test-draft-id\"\n        # 设置缓存，这样会通过第一个检查\n        mock_cache.__contains__ = Mock(return_value=True)\n        \n        with self.assertRaises(CustomException) as context:\n            add_masks(\n                draft_url=\"https://example.com/draft?draft_id=test-draft-id\",\n                segment_ids=[]\n            )\n        \n        self.assertEqual(context.exception.err, CustomError.INVALID_MASK_INFO)\n    \n    @patch('src.service.add_masks.DRAFT_CACHE')\n    @patch('src.service.add_masks.helper.get_url_param')\n    @patch('src.service.add_masks.find_mask_type_by_name')\n    def test_invalid_mask_type(self, mock_find_mask_type, mock_get_param, mock_cache):\n        \"\"\"测试无效的遮罩类型异常\"\"\"\n        mock_get_param.return_value = \"test-draft-id\"\n        mock_cache.__contains__ = Mock(return_value=True)\n        mock_find_mask_type.return_value = None\n        \n        with self.assertRaises(CustomException) as context:\n            add_masks(\n                draft_url=\"https://example.com/draft?draft_id=test-draft-id\",\n                segment_ids=[\"segment-1\"],\n                name=\"无效遮罩类型\"\n            )\n        \n        self.assertEqual(context.exception.err, CustomError.MASK_NOT_FOUND)\n    \n    @patch('src.service.add_masks.DRAFT_CACHE')\n    @patch('src.service.add_masks.helper.get_url_param')\n    @patch('src.service.add_masks.find_mask_type_by_name')\n    @patch('src.service.add_masks.add_mask_to_segment')\n    def test_partial_failure_handling(self, mock_add_mask, mock_find_mask_type, mock_get_param, mock_cache):\n        \"\"\"测试部分失败的处理\"\"\"\n        mock_get_param.return_value = \"test-draft-id\"\n        mock_find_mask_type.return_value = MaskType.圆形\n        \n        # 第一个成功，第二个失败\n        mock_add_mask.side_effect = Exception(\"添加失败\")\n        \n        mock_script = Mock(spec=ScriptFile)\n        mock_script.save = Mock()\n        mock_cache.__getitem__.return_value = mock_script\n        \n        with self.assertRaises(Exception):\n            add_masks(\n                draft_url=\"https://example.com/draft?draft_id=test-draft-id\",\n                segment_ids=[\"segment-1\", \"segment-2\"]\n            )\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/test_add_videos_concurrent.py",
    "content": "\"\"\"\nadd_videos 并发锁功能单元测试\n测试异步锁机制防止同一草稿的并发写操作\n\n测试覆盖：\n1. 正常场景：带锁的视频添加\n2. 边界场景：超时、并发访问同一草稿\n3. 异常场景：锁获取失败、无效草稿 ID\n\"\"\"\nimport asyncio\nimport pytest\nimport sys\nimport os\nfrom unittest.mock import patch, MagicMock\nimport json\n\n# 添加项目根目录到 Python 路径\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\nfrom src.service.add_videos import add_videos_async, _add_videos_internal\nfrom src.utils.draft_lock_manager import DraftLockManager\nfrom exceptions import CustomException, CustomError\n\n\nclass TestAddVideosAsync:\n    \"\"\"add_videos_async 测试类\"\"\"\n    \n    @pytest.fixture\n    def mock_draft_data(self):\n        \"\"\"模拟草稿数据\"\"\"\n        return {\n            \"draft_url\": \"http://localhost/v1/get_draft?draft_id=test-draft-001\",\n            \"video_infos\": json.dumps([\n                {\n                    \"video_url\": \"https://example.com/video1.mp4\",\n                    \"width\": 1920,\n                    \"height\": 1080,\n                    \"start\": 0,\n                    \"end\": 5000000,\n                    \"duration\": 5000000\n                }\n            ])\n        }\n    \n    @pytest.mark.asyncio\n    async def test_add_videos_with_lock_success(self, mock_draft_data):\n        \"\"\"测试成功添加视频（带锁）\"\"\"\n        # Mock 所有依赖\n        with patch('src.service.add_videos.helper.get_url_param') as mock_get_param, \\\n             patch('src.service.add_videos.DRAFT_CACHE') as mock_cache, \\\n             patch('src.service.add_videos.os.makedirs'), \\\n             patch('src.service.add_videos.parse_video_data') as mock_parse, \\\n             patch('src.service.add_videos.add_video_to_draft') as mock_add, \\\n             patch('src.service.add_videos.download') as mock_download:\n            \n            # 设置 mock（prepare 阶段会执行 draft_id in DRAFT_CACHE）\n            mock_get_param.return_value = \"test-draft-001\"\n            mock_cache.__contains__.return_value = True\n            mock_parse.return_value = [{\n                'video_url': 'https://example.com/video1.mp4',\n                'width': 1920,\n                'height': 1080,\n                'start': 0,\n                'end': 5000000,\n                'duration': 5000000,\n                'original_start': 0,\n                'original_end': 5000000\n            }]\n            mock_add.return_value = (\"segment-123\", 5000000)\n            mock_download.return_value = \"/tmp/video.mp4\"\n            \n            # Mock 草稿对象\n            mock_script = MagicMock()\n            mock_script.width = 1920\n            mock_script.height = 1080\n            mock_script.tracks = {\"track-1\": MagicMock(track_id=\"track-123\", name=\"video_track\")}\n            mock_script.materials.videos = [MagicMock(material_id=\"video-123\")]\n            mock_cache.__getitem__.return_value = mock_script\n            \n            # 调用函数\n            result = await add_videos_async(\n                draft_url=mock_draft_data[\"draft_url\"],\n                video_infos=mock_draft_data[\"video_infos\"]\n            )\n            \n            # 验证结果\n            assert len(result) == 4\n            assert result[0] == mock_draft_data[\"draft_url\"]\n            \n            # 验证锁被正确获取和释放\n            lock_manager = DraftLockManager()\n            assert not lock_manager.is_locked(\"test-draft-001\")\n    \n    @pytest.mark.asyncio\n    async def test_add_videos_invalid_draft_url(self):\n        \"\"\"测试无效草稿 URL\"\"\"\n        with pytest.raises(CustomException) as exc_info:\n            await add_videos_async(\n                draft_url=\"invalid-url\",\n                video_infos='[]'\n            )\n        \n        assert exc_info.value.err == CustomError.INVALID_DRAFT_URL\n    \n    @pytest.mark.asyncio\n    async def test_add_videos_lock_timeout(self):\n        \"\"\"测试锁超时\"\"\"\n        lock_manager = DraftLockManager()\n        draft_id = \"timeout-test\"\n        \n        # 先获取锁并不释放\n        await lock_manager.acquire_lock(draft_id)\n\n        prepared = [{\n            \"video_url\": \"https://example.com/v.mp4\",\n            \"start\": 0,\n            \"end\": 1,\n            \"duration\": 1,\n            \"original_start\": 0,\n            \"original_end\": 1,\n            \"local_video_path\": \"/tmp/timeout-test.mp4\",\n        }]\n\n        # 尝试获取同一个草稿的锁（应该超时）；prepare 在锁之前，需绕过网络/缓存\n        with patch(\"src.service.add_videos._prepare_videos_local_files\", return_value=prepared):\n            with pytest.raises(CustomException) as exc_info:\n                await add_videos_async(\n                    draft_url=f\"http://localhost/v1/get_draft?draft_id={draft_id}\",\n                    video_infos=\"[]\",\n                    lock_timeout=0.1,\n                )\n\n        assert exc_info.value.err == CustomError.DRAFT_LOCK_TIMEOUT\n        assert \"Failed to acquire lock\" in exc_info.value.detail\n        \n        # 清理\n        await lock_manager.release_lock(draft_id)\n    \n    @pytest.mark.asyncio\n    async def test_concurrent_add_videos_same_draft(self):\n        \"\"\"测试并发添加视频到同一草稿（应该串行执行）\"\"\"\n        execution_order = []\n        draft_url = \"http://localhost/v1/get_draft?draft_id=concurrent-test\"\n        video_infos = json.dumps([{\n            \"video_url\": \"https://example.com/video.mp4\",\n            \"start\": 0,\n            \"end\": 5000000\n        }])\n\n        prep_counter = {\"n\": 0}\n\n        def fake_prepare(draft_url: str, video_infos: str):\n            prep_counter[\"n\"] += 1\n            n = prep_counter[\"n\"]\n            return [{\n                \"video_url\": \"https://example.com/video.mp4\",\n                \"start\": 0,\n                \"end\": 5000000,\n                \"duration\": 5000000,\n                \"original_start\": 0,\n                \"original_end\": 5000000,\n                \"local_video_path\": f\"/tmp/video_prep_{n}.mp4\",\n            }]\n\n        async def add_video_task(task_id):\n            try:\n                execution_order.append(f\"{task_id}_start\")\n                await add_videos_async(\n                    draft_url=draft_url,\n                    video_infos=video_infos,\n                    lock_timeout=5.0,\n                )\n                execution_order.append(f\"{task_id}_complete\")\n            except Exception as e:\n                execution_order.append(f\"{task_id}_error: {str(e)}\")\n\n        with patch(\"src.service.add_videos.helper.get_url_param\", return_value=\"concurrent-test\"), \\\n                patch(\"src.service.add_videos.DRAFT_CACHE\") as mock_cache, \\\n                patch(\"src.service.add_videos.os.makedirs\"), \\\n                patch(\"src.service.add_videos._prepare_videos_local_files\", side_effect=fake_prepare), \\\n                patch(\"src.service.add_videos.add_video_to_draft\") as mock_add:\n\n            mock_cache.__contains__.return_value = True\n            mock_script = MagicMock()\n            mock_script.width = 1920\n            mock_script.height = 1080\n            mock_script.tracks = {}\n            mock_script.materials.videos = []\n            mock_cache.__getitem__.return_value = mock_script\n\n            call_seq = {\"i\": 0}\n\n            def add_side_effect(*args, **kwargs):\n                call_seq[\"i\"] += 1\n                return (f\"segment-{call_seq['i']}\", 5000000)\n\n            mock_add.side_effect = add_side_effect\n\n            await asyncio.gather(\n                add_video_task(1),\n                add_video_task(2),\n                add_video_task(3),\n            )\n        \n        # 验证任务是串行执行的（每个任务必须等待前一个释放锁）\n        # 第一个任务必须先完成\n        first_complete_index = execution_order.index(\"1_complete\")\n        assert first_complete_index > 0  # 必须在开始之后\n        \n        # 验证没有并发冲突\n        error_count = sum(1 for e in execution_order if \"error\" in e)\n        assert error_count == 0\n    \n    @pytest.mark.asyncio\n    async def test_concurrent_add_videos_different_drafts(self):\n        \"\"\"测试并发添加视频到不同草稿（可以并行执行）\"\"\"\n        completed_drafts = []\n\n        def fake_get_url_param(url: str, key: str):\n            if key != \"draft_id\":\n                return None\n            return url.split(\"draft_id=\")[-1]\n\n        def fake_prepare(draft_url: str, video_infos: str):\n            did = fake_get_url_param(draft_url, \"draft_id\")\n            return [{\n                \"video_url\": f\"https://example.com/video_{did}.mp4\",\n                \"start\": 0,\n                \"end\": 5000000,\n                \"duration\": 5000000,\n                \"original_start\": 0,\n                \"original_end\": 5000000,\n                \"local_video_path\": f\"/tmp/video_{did}.mp4\",\n            }]\n\n        def make_script():\n            mock_script = MagicMock()\n            mock_script.width = 1920\n            mock_script.height = 1080\n            mock_script.tracks = {}\n            mock_script.materials.videos = []\n            return mock_script\n\n        async def add_video_task(draft_id):\n            await add_videos_async(\n                draft_url=f\"http://localhost/v1/get_draft?draft_id={draft_id}\",\n                video_infos=\"[]\",\n            )\n            completed_drafts.append(draft_id)\n\n        with patch(\"src.service.add_videos.helper.get_url_param\", side_effect=fake_get_url_param), \\\n                patch(\"src.service.add_videos._prepare_videos_local_files\", side_effect=fake_prepare), \\\n                patch(\"src.service.add_videos.DRAFT_CACHE\") as mock_cache, \\\n                patch(\"src.service.add_videos.os.makedirs\"), \\\n                patch(\"src.service.add_videos.add_video_to_draft\") as mock_add:\n\n            mock_cache.__contains__.return_value = True\n            mock_cache.__getitem__.side_effect = lambda _did: make_script()\n            mock_add.return_value = (\"segment-mock\", 5000000)\n\n            tasks = [\n                add_video_task(\"draft-a\"),\n                add_video_task(\"draft-b\"),\n                add_video_task(\"draft-c\"),\n            ]\n            await asyncio.gather(*tasks)\n        \n        # 所有任务都应该完成\n        assert len(completed_drafts) == 3\n        assert \"draft-a\" in completed_drafts\n        assert \"draft-b\" in completed_drafts\n        assert \"draft-c\" in completed_drafts\n\n\nclass TestAddVideosInternal:\n    \"\"\"_add_videos_internal 测试类\"\"\"\n    \n    @pytest.mark.asyncio\n    async def test_internal_function_requires_lock(self):\n        \"\"\"测试内部函数需要外层锁控制\"\"\"\n        # 这是一个白盒测试，验证内部函数确实不包含锁逻辑\n        # 通过检查函数签名和文档\n        \n        import inspect\n        from src.service.add_videos import _add_videos_internal\n        \n        # 获取函数文档\n        docstring = _add_videos_internal.__doc__\n        \n        # 验证文档中明确说明需要外层锁控制\n        assert \"无锁\" in docstring or \"需外层控制\" in docstring or \"并发\" in docstring\n        \n        # 验证函数签名不包含锁相关参数\n        sig = inspect.signature(_add_videos_internal)\n        params = list(sig.parameters.keys())\n        assert \"lock_timeout\" not in params\n        assert \"lock_manager\" not in params\n\n\nclass TestLockManagerIntegration:\n    \"\"\"锁管理器集成测试\"\"\"\n    \n    @pytest.mark.asyncio\n    async def test_lock_cleanup_after_exception(self):\n        \"\"\"测试异常后锁的清理\"\"\"\n        draft_id = \"exception-test\"\n        lock_manager = DraftLockManager()\n        \n        # 获取锁\n        await lock_manager.acquire_lock(draft_id)\n        \n        try:\n            # 模拟某个操作失败\n            raise ValueError(\"Simulated error\")\n        except ValueError:\n            pass\n        finally:\n            # 确保释放锁\n            await lock_manager.release_lock(draft_id)\n        \n        # 验证锁已释放\n        assert not lock_manager.is_locked(draft_id)\n    \n    @pytest.mark.asyncio\n    async def test_lock_stats_accuracy(self):\n        \"\"\"测试锁统计信息准确性\"\"\"\n        lock_manager = DraftLockManager()\n        await lock_manager.clear_all_locks()\n        draft_ids = [\"stats-1\", \"stats-2\", \"stats-3\"]\n        \n        # 初始状态\n        stats = lock_manager.get_stats()\n        assert stats[\"total_locks\"] == 0\n        assert stats[\"locked_drafts\"] == 0\n        assert stats[\"total_holders\"] == 0\n        \n        # 获取所有锁\n        for draft_id in draft_ids:\n            await lock_manager.acquire_lock(draft_id)\n        \n        stats = lock_manager.get_stats()\n        assert stats[\"total_locks\"] == 3\n        assert stats[\"locked_drafts\"] == 3\n        assert stats[\"total_holders\"] == 3\n        \n        # 释放一个锁\n        await lock_manager.release_lock(draft_ids[0])\n        \n        stats = lock_manager.get_stats()\n        # release_lock 不删除 _locks 中的条目，total_locks 仍为草稿数\n        assert stats[\"total_locks\"] == 3\n        assert stats[\"locked_drafts\"] == 2\n        assert stats[\"total_holders\"] == 2\n\n\nif __name__ == \"__main__\":\n    pytest.main([__file__, \"-v\"])\n"
  },
  {
    "path": "tests/test_add_videos_concurrent_demo.py",
    "content": "\"\"\"\nadd_videos 并发保护功能演示测试\n简单演示锁机制如何防止同一草稿的并发写操作\n\"\"\"\nimport asyncio\nimport pytest\nimport sys\nimport os\n\n# 添加项目根目录到 Python 路径\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\nfrom src.utils.draft_lock_manager import DraftLockManager\n\n\nclass TestConcurrentProtectionDemo:\n    \"\"\"并发保护演示测试\"\"\"\n    \n    @pytest.mark.asyncio\n    async def test_same_draft_serialized_access(self):\n        \"\"\"演示：同一草稿的并发访问会被强制串行化\"\"\"\n        lock_manager = DraftLockManager()\n        draft_id = \"demo-draft\"\n        \n        execution_log = []\n        \n        async def worker(worker_id, work_duration=0.1):\n            \"\"\"模拟一个 add_videos 请求\"\"\"\n            await lock_manager.acquire_lock(draft_id)\n            try:\n                # 开始处理\n                execution_log.append(f\"worker_{worker_id}_start\")\n                await asyncio.sleep(work_duration)  # 模拟写入草稿文件\n                execution_log.append(f\"worker_{worker_id}_end\")\n            finally:\n                await lock_manager.release_lock(draft_id)\n        \n        # 启动 3 个并发请求（实际场景是 3 个 HTTP 请求同时调用 add_videos）\n        tasks = [\n            worker(1),\n            worker(2),\n            worker(3)\n        ]\n        \n        await asyncio.gather(*tasks)\n        \n        # 验证：由于锁的保护，任务必须一个接一个执行\n        # 每个 worker 的 start 和 end 必须是连续的\n        print(\"\\n执行日志:\")\n        for i, log in enumerate(execution_log):\n            print(f\"  {i+1}. {log}\")\n        \n        # 验证没有并发冲突（不会有交叉执行）\n        assert len(execution_log) == 6\n        \n        # 验证每个 worker 都是成对执行的\n        for i in range(0, len(execution_log), 2):\n            worker_num = execution_log[i].split('_')[1]\n            assert execution_log[i].endswith('_start')\n            assert execution_log[i+1].endswith('_end')\n            assert execution_log[i+1].split('_')[1] == worker_num\n    \n    @pytest.mark.asyncio\n    async def test_different_drafts_parallel_access(self):\n        \"\"\"演示：不同草稿可以并行访问\"\"\"\n        lock_manager = DraftLockManager()\n        \n        execution_log = []\n        \n        async def worker(draft_id, worker_id):\n            \"\"\"模拟处理不同草稿的请求\"\"\"\n            await lock_manager.acquire_lock(draft_id)\n            try:\n                execution_log.append(f\"worker_{worker_id}_processing_{draft_id}\")\n                await asyncio.sleep(0.1)\n            finally:\n                await lock_manager.release_lock(draft_id)\n        \n        # 3 个 worker 处理不同的草稿\n        tasks = [\n            worker(\"draft-A\", 1),\n            worker(\"draft-B\", 2),\n            worker(\"draft-C\", 3)\n        ]\n        \n        await asyncio.gather(*tasks)\n        \n        print(\"\\n不同草稿并行处理日志:\")\n        for log in execution_log:\n            print(f\"  {log}\")\n        \n        # 验证：所有任务都完成了\n        assert len(execution_log) == 3\n        \n        # 验证：每个草稿都被处理了\n        drafts_processed = [log.split('_')[-1] for log in execution_log]\n        assert \"draft-A\" in drafts_processed\n        assert \"draft-B\" in drafts_processed\n        assert \"draft-C\" in drafts_processed\n    \n    @pytest.mark.asyncio\n    async def test_lock_prevents_concurrent_writes(self):\n        \"\"\"演示：锁机制防止并发写入导致文件损坏\"\"\"\n        lock_manager = DraftLockManager()\n        draft_id = \"protected-draft\"\n        \n        # 模拟共享资源（草稿文件）\n        shared_data = {\"counter\": 0, \"corrupted\": False}\n        \n        async def unsafe_write(worker_id):\n            \"\"\"没有锁保护的写入（会导致损坏）\"\"\"\n            # 读取\n            current = shared_data[\"counter\"]\n            await asyncio.sleep(0.01)  # 模拟 I/O 延迟\n            # 写入\n            shared_data[\"counter\"] = current + 1\n            \n            # 检查是否有并发修改\n            if shared_data[\"counter\"] > max(int(worker_id), 1):\n                shared_data[\"corrupted\"] = True\n        \n        async def safe_write(worker_id):\n            \"\"\"有锁保护的写入（安全）\"\"\"\n            await lock_manager.acquire_lock(draft_id)\n            try:\n                current = shared_data[\"counter\"]\n                await asyncio.sleep(0.01)\n                shared_data[\"counter\"] = current + 1\n            finally:\n                await lock_manager.release_lock(draft_id)\n        \n        # 测试不安全的写入（注释掉，避免真正损坏数据）\n        # unsafe_tasks = [unsafe_write(i) for i in range(1, 11)]\n        # await asyncio.gather(*unsafe_tasks)\n        # print(f\"\\n不安全写入结果：counter={shared_data['counter']}, corrupted={shared_data['corrupted']}\")\n        \n        # 重置\n        shared_data[\"counter\"] = 0\n        shared_data[\"corrupted\"] = False\n        \n        # 测试安全的写入\n        safe_tasks = [safe_write(i) for i in range(1, 11)]\n        await asyncio.gather(*safe_tasks)\n        \n        print(f\"\\n安全写入结果：counter={shared_data['counter']}, corrupted={shared_data['corrupted']}\")\n        \n        # 验证：有锁保护时，counter 应该正好是 10\n        assert shared_data[\"counter\"] == 10\n        assert shared_data[\"corrupted\"] is False\n\n\nif __name__ == \"__main__\":\n    # 运行演示\n    async def main():\n        tester = TestConcurrentProtectionDemo()\n        \n        print(\"=\" * 60)\n        print(\"测试 1: 同一草稿的串行访问\")\n        print(\"=\" * 60)\n        await tester.test_same_draft_serialized_access()\n        \n        print(\"\\n\" + \"=\" * 60)\n        print(\"测试 2: 不同草稿的并行访问\")\n        print(\"=\" * 60)\n        await tester.test_different_drafts_parallel_access()\n        \n        print(\"\\n\" + \"=\" * 60)\n        print(\"测试 3: 锁保护防止并发写入\")\n        print(\"=\" * 60)\n        await tester.test_lock_prevents_concurrent_writes()\n        \n        print(\"\\n\" + \"=\" * 60)\n        print(\"所有演示完成！\")\n        print(\"=\" * 60)\n    \n    asyncio.run(main())\n"
  },
  {
    "path": "tests/test_add_videos_duration.py",
    "content": "import requests\nimport json\nimport time\n\ndef test_add_videos_with_duration():\n    \"\"\"测试带duration参数的视频添加接口\"\"\"\n    \n    # 1. 先创建一个草稿\n    create_draft_url = \"http://localhost:8000/v1/create_draft\"\n    create_draft_data = {\n        \"width\": 1920,\n        \"height\": 1080\n    }\n    \n    try:\n        print(\"Creating draft...\")\n        create_response = requests.post(create_draft_url, json=create_draft_data)\n        \n        if create_response.status_code != 200:\n            print(f\"Failed to create draft: {create_response.status_code}\")\n            print(create_response.text)\n            return\n            \n        draft_url = create_response.json()[\"draft_url\"]\n        print(f\"Draft created successfully: {draft_url}\")\n        \n        # 2. 添加视频 - 测试指定duration的情况\n        add_videos_url = \"http://localhost:8000/v1/add_videos\"\n        video_infos = [\n            {\n                \"video_url\": \"https://example.com/video1.mp4\",\n                \"width\": 1920,\n                \"height\": 1080,\n                \"start\": 0,\n                \"end\": 3000000,  # 3秒\n                \"duration\": 6000000,  # 指定6秒，比实际播放时长长\n                \"volume\": 0.8\n            },\n            {\n                \"video_url\": \"https://example.com/video2.mp4\",\n                \"width\": 1280,\n                \"height\": 720,\n                \"start\": 3000000,  # 从第3秒开始\n                \"end\": 5000000,    # 到第5秒结束\n                \"duration\": 1000000,  # 指定1秒，比实际播放时长短\n                \"volume\": 1.0\n            },\n            # 测试不提供duration字段的情况\n            {\n                \"video_url\": \"https://example.com/video3.mp4\",\n                \"width\": 1920,\n                \"height\": 1080,\n                \"start\": 5000000,  # 从第5秒开始\n                \"end\": 8000000,    # 到第8秒结束\n                \"volume\": 0.5\n            }\n        ]\n        \n        add_videos_data = {\n            \"draft_url\": draft_url,\n            \"video_infos\": json.dumps(video_infos),\n            \"alpha\": 1.0,\n            \"scale_x\": 1.0,\n            \"scale_y\": 1.0,\n            \"transform_x\": 0,\n            \"transform_y\": 0\n        }\n        \n        print(\"Adding videos...\")\n        add_response = requests.post(add_videos_url, json=add_videos_data)\n        \n        if add_response.status_code == 200:\n            result = add_response.json()\n            print(f\"Videos added successfully!\")\n            print(f\"Track ID: {result['track_id']}\")\n            print(f\"Video IDs: {result['video_ids']}\")\n            print(f\"Segment IDs: {result['segment_ids']}\")\n            print(f\"Draft URL: {result['draft_url']}\")\n        else:\n            print(f\"Failed to add videos: {add_response.status_code}\")\n            print(add_response.text)\n            \n    except Exception as e:\n        print(f\"Error occurred: {e}\")\n        print(\"Make sure the server is running on http://localhost:8000\")\n\nif __name__ == \"__main__\":\n    test_add_videos_with_duration()"
  },
  {
    "path": "tests/test_add_videos_refactor.py",
    "content": "import sys\nimport os\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\nfrom src.service.add_videos import parse_video_data\nimport json\n\ndef test_parse_video_data_with_duration():\n    \"\"\"测试解析带duration参数的视频数据\"\"\"\n    \n    # 测试数据：指定duration与实际播放时长不同\n    video_infos = [\n        {\n            \"video_url\": \"https://example.com/video1.mp4\",\n            \"width\": 1920,\n            \"height\": 1080,\n            \"start\": 0,\n            \"end\": 3000000,  # 3秒\n            \"duration\": 6000000,  # 指定6秒，比实际播放时长长\n            \"volume\": 0.8\n        },\n        {\n            \"video_url\": \"https://example.com/video2.mp4\",\n            \"width\": 1280,\n            \"height\": 720,\n            \"start\": 3000000,  # 从第3秒开始\n            \"end\": 5000000,    # 到第5秒结束\n            \"duration\": 1000000,  # 指定1秒，比实际播放时长短\n            \"volume\": 1.0\n        },\n        # 测试不提供duration字段的情况\n        {\n            \"video_url\": \"https://example.com/video3.mp4\",\n            \"width\": 1920,\n            \"height\": 1080,\n            \"start\": 5000000,  # 从第5秒开始\n            \"end\": 8000000,    # 到第8秒结束\n            \"volume\": 0.5\n        }\n    ]\n    \n    json_str = json.dumps(video_infos)\n    parsed_videos = parse_video_data(json_str)\n    \n    print(\"Parsed video data:\")\n    for i, video in enumerate(parsed_videos):\n        print(f\"Video {i+1}:\")\n        print(f\"  URL: {video['video_url']}\")\n        print(f\"  Width: {video['width']}\")\n        print(f\"  Height: {video['height']}\")\n        print(f\"  Start: {video['start']}\")\n        print(f\"  End: {video['end']}\")\n        print(f\"  Duration: {video['duration']}\")\n        print(f\"  Play Duration (end-start): {video['end'] - video['start']}\")\n        print(f\"  Volume: {video['volume']}\")\n        print()\n    \n    # 验证第一个视频：指定duration为6秒，播放时长为3秒\n    assert parsed_videos[0]['duration'] == 6000000\n    assert parsed_videos[0]['end'] - parsed_videos[0]['start'] == 3000000\n    \n    # 验证第二个视频：指定duration为1秒，播放时长为2秒\n    assert parsed_videos[1]['duration'] == 1000000\n    assert parsed_videos[1]['end'] - parsed_videos[1]['start'] == 2000000\n    \n    # 验证第三个视频：未指定duration，应该等于end-start\n    assert parsed_videos[2]['duration'] == 3000000\n    assert parsed_videos[2]['end'] - parsed_videos[2]['start'] == 3000000\n    \n    print(\"All tests passed!\")\n\nif __name__ == \"__main__\":\n    test_parse_video_data_with_duration()"
  },
  {
    "path": "tests/test_all_text_effects.py",
    "content": "\"\"\"\n测试扩展后的花字效果功能（1440 个花字）\n\"\"\"\nimport random\nfrom src.service.get_text_effects import TEXT_EFFECT_MAP, resolve_text_effect, get_text_effects\n\n\ndef test_total_count():\n    \"\"\"测试花字总数\"\"\"\n    print(\"=\" * 80)\n    print(\"测试 1: 验证花字效果总数\")\n    print(\"=\" * 80)\n    \n    total = len(TEXT_EFFECT_MAP)\n    print(f\"\\n✓ 当前加载的花字效果总数：{total}\")\n    \n    assert total == 1440, f\"期望 1440 个花字，但实际有 {total} 个\"\n    print(f\"✓ 验证通过：共有 {total} 个花字效果\")\n    return total\n\n\ndef test_resolve_by_name():\n    \"\"\"测试通过中文名称查找花字\"\"\"\n    print(\"\\n\" + \"=\" * 80)\n    print(\"测试 2: 通过中文名称查找花字\")\n    print(\"=\" * 80)\n    \n    # 测试几个示例花字\n    test_cases = [\n        \"红黄火焰综艺花字\",\n        \"蓝白色立体综艺描边花字\",\n        \"黄字橙光花字\",\n    ]\n    \n    for effect_name in test_cases:\n        if effect_name in TEXT_EFFECT_MAP:\n            result = resolve_text_effect(effect_name)\n            print(f\"\\n✓ 找到花字：'{effect_name}'\")\n            print(f\"  Effect ID: {result['effect_id']}\")\n            print(f\"  Resource ID: {result['resource_id']}\")\n        else:\n            print(f\"\\n✗ 未找到花字：'{effect_name}'\")\n    \n    print(\"\\n✓ 中文名称查找测试完成\")\n\n\ndef test_resolve_by_id():\n    \"\"\"测试通过 effect_id 查找花字\"\"\"\n    print(\"\\n\" + \"=\" * 80)\n    print(\"测试 3: 通过 effect_id 查找花字\")\n    print(\"=\" * 80)\n    \n    # 获取第一个花字的 ID\n    first_effect_name = list(TEXT_EFFECT_MAP.keys())[0]\n    first_effect_id = TEXT_EFFECT_MAP[first_effect_name][\"effect_id\"]\n    \n    result = resolve_text_effect(first_effect_id)\n    print(f\"\\n✓ 通过 ID '{first_effect_id}' 查找到:\")\n    print(f\"  名称：{first_effect_name}\")\n    print(f\"  Resource ID: {result['resource_id']}\")\n    \n    print(\"\\n✓ effect_id 查找测试完成\")\n\n\ndef test_random_effects():\n    \"\"\"随机测试 10 个花字\"\"\"\n    print(\"\\n\" + \"=\" * 80)\n    print(\"测试 4: 随机测试 10 个花字效果\")\n    print(\"=\" * 80)\n    \n    all_effects = list(TEXT_EFFECT_MAP.items())\n    random_effects = random.sample(all_effects, 10)\n    \n    print(\"\\n随机选择的 10 个花字效果:\")\n    for i, (name, data) in enumerate(random_effects, 1):\n        print(f\"  {i}. {name} (ID: {data['effect_id']})\")\n        \n        # 验证可以解析\n        result = resolve_text_effect(name)\n        assert result is not None, f\"无法解析花字：{name}\"\n    \n    print(\"\\n✓ 随机测试通过\")\n\n\ndef test_filter_by_mode():\n    \"\"\"测试按模式过滤花字\"\"\"\n    print(\"\\n\" + \"=\" * 80)\n    print(\"测试 5: 按模式过滤花字效果\")\n    print(\"=\" * 80)\n    \n    # 测试 mode=0 (所有)\n    all_effects = get_text_effects(mode=0)\n    print(f\"\\n✓ Mode 0 (所有): {len(all_effects)} 个花字\")\n    \n    # 测试 mode=1 (VIP)\n    vip_effects = get_text_effects(mode=1)\n    print(f\"✓ Mode 1 (VIP): {len(vip_effects)} 个花字\")\n    \n    # 测试 mode=2 (免费)\n    free_effects = get_text_effects(mode=2)\n    print(f\"✓ Mode 2 (免费): {len(free_effects)} 个花字\")\n    \n    # 验证数量关系\n    assert len(all_effects) == len(vip_effects) + len(free_effects), \\\n        \"所有效果数量应该等于 VIP+免费的总和\"\n    \n    print(\"\\n✓ 过滤功能测试通过\")\n\n\ndef test_special_characters():\n    \"\"\"测试包含特殊字符的花字名称\"\"\"\n    print(\"\\n\" + \"=\" * 80)\n    print(\"测试 6: 包含特殊字符的花字名称\")\n    print(\"=\" * 80)\n    \n    special_names = []\n    for name in TEXT_EFFECT_MAP.keys():\n        if any(c in name for c in ['#', '!', '-', ' ']):\n            special_names.append(name)\n    \n    print(f\"\\n找到 {len(special_names)} 个包含特殊字符的花字名称:\")\n    for name in special_names[:10]:  # 只显示前 10 个\n        print(f\"  - {name}\")\n    \n    if len(special_names) > 10:\n        print(f\"  ... 还有 {len(special_names) - 10} 个\")\n    \n    # 测试解析其中一个\n    if special_names:\n        test_name = special_names[0]\n        result = resolve_text_effect(test_name)\n        print(f\"\\n✓ 测试解析 '{test_name}': 成功\")\n    \n    print(\"\\n✓ 特殊字符测试通过\")\n\n\ndef test_export_capability():\n    \"\"\"测试导出功能\"\"\"\n    print(\"\\n\" + \"=\" * 80)\n    print(\"测试 7: 导出花字列表到文件\")\n    print(\"=\" * 80)\n    \n    output_file = \"test_effects_list.txt\"\n    \n    with open(output_file, 'w', encoding='utf-8') as f:\n        f.write(\"# 花字效果列表 (共 1440 个)\\n\\n\")\n        f.write(\"| 序号 | 花字名称 | Effect ID |\\n\")\n        f.write(\"|------|---------|-----------|\\n\")\n        \n        for i, (name, data) in enumerate(TEXT_EFFECT_MAP.items(), 1):\n            f.write(f\"| {i} | {name} | {data['effect_id']} |\\n\")\n    \n    print(f\"\\n✓ 已导出花字列表到：{output_file}\")\n    print(f\"  文件大小：请查看生成的文件\")\n    \n    print(\"\\n✓ 导出测试通过\")\n\n\ndef main():\n    \"\"\"运行所有测试\"\"\"\n    print(\"\\n\" + \"=\" * 80)\n    print(\"开始测试扩展后的花字效果功能 (1440 个花字)\")\n    print(\"=\" * 80)\n    \n    try:\n        # 运行所有测试\n        test_total_count()\n        test_resolve_by_name()\n        test_resolve_by_id()\n        test_random_effects()\n        test_filter_by_mode()\n        test_special_characters()\n        test_export_capability()\n        \n        # 总结\n        print(\"\\n\" + \"=\" * 80)\n        print(\"✅ 所有测试通过！\")\n        print(\"=\" * 80)\n        print(f\"\\n📊 统计摘要:\")\n        print(f\"  • 总花字数：1,440 个\")\n        print(f\"  • 支持中文名称查找：是\")\n        print(f\"  • 支持 effect_id 查找：是\")\n        print(f\"  • 支持模式过滤：是\")\n        print(f\"  • 特殊字符支持：是\")\n        print(f\"  • 导出功能：是\")\n        print(\"\\n🎉 花字效果扩展功能运行正常！\")\n        print(\"=\" * 80)\n        \n    except AssertionError as e:\n        print(f\"\\n❌ 测试失败：{str(e)}\")\n        raise\n    except Exception as e:\n        print(f\"\\n❌ 发生错误：{str(e)}\")\n        raise\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "tests/test_api_version.py",
    "content": "import pytest\nfrom fastapi.testclient import TestClient\nfrom main import app\n\nclient = TestClient(app)\n\n\ndef test_v1_create_draft():\n    \"\"\"测试v1版本的create_draft接口\"\"\"\n    response = client.post(\"/openapi/v1/create_draft\", params={\"height\": 1080, \"width\": 1920})\n    assert response.status_code == 200\n    assert \"message\" in response.json()\n    assert \"draft_id\" in response.json()\n    assert response.json()[\"message\"] == \"草稿创建成功\"\n\n\ndef test_version_not_found():\n    \"\"\"测试不存在的API版本\"\"\"\n    response = client.post(\"/openapi/v2/create_draft\", params={\"height\": 1080, \"width\": 1920})\n    assert response.status_code == 404\n\n\nif __name__ == \"__main__\":\n    # 运行测试\n    pytest.main([\"-v\", \"test_api_version.py\"])"
  },
  {
    "path": "tests/test_audio_infos.py",
    "content": "import sys\nimport os\nimport json\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\nfrom src.service.audio_infos import audio_infos\n\n\ndef test_audio_infos():\n    \"\"\"测试音频信息生成功能\"\"\"\n    # 测试基本功能\n    print(\"测试基本功能:\")\n    mp3_urls = [\n        \"https://assets.jcaigc.cn/test1.mp3\",\n        \"https://assets.jcaigc.cn/test2.mp3\"\n    ]\n    \n    timelines = [\n        {\"start\": 0, \"end\": 284891428},\n        {\"start\": 284891428, \"end\": 579578774}\n    ]\n    \n    audio_effect = \"教堂\"\n    volume = 1.0\n    \n    infos_json = audio_infos(mp3_urls, timelines, audio_effect, volume)\n    print(f\"Infos JSON: {infos_json}\")\n    \n    # 解析JSON验证内容\n    infos = json.loads(infos_json)\n    print(f\"Parsed infos: {infos}\")\n    \n    # 验证内容\n    assert len(infos) == 2\n    assert infos[0][\"audio_url\"] == \"https://assets.jcaigc.cn/test1.mp3\"\n    assert infos[0][\"start\"] == 0\n    assert infos[0][\"end\"] == 284891428\n    assert infos[0][\"audio_effect\"] == \"教堂\"\n    assert infos[0][\"volume\"] == 1.0\n    \n    assert infos[1][\"audio_url\"] == \"https://assets.jcaigc.cn/test2.mp3\"\n    assert infos[1][\"start\"] == 284891428\n    assert infos[1][\"end\"] == 579578774\n    assert infos[1][\"audio_effect\"] == \"教堂\"\n    assert infos[1][\"volume\"] == 1.0\n    \n    print(\"基本功能测试通过\")\n    \n    # 测试可选参数为None的情况\n    print(\"\\n测试可选参数为None的情况:\")\n    infos_json_no_optional = audio_infos(mp3_urls, timelines)\n    infos_no_optional = json.loads(infos_json_no_optional)\n    print(f\"Infos without optional params: {infos_no_optional}\")\n    \n    # 验证可选参数不存在\n    assert \"audio_effect\" not in infos_no_optional[0]\n    assert \"volume\" not in infos_no_optional[0]\n    assert \"audio_effect\" not in infos_no_optional[1]\n    assert \"volume\" not in infos_no_optional[1]\n    \n    print(\"可选参数测试通过\")\n    \n    # 测试长度不匹配的情况\n    print(\"\\n测试长度不匹配的情况:\")\n    try:\n        audio_infos([\"url1\"], timelines, audio_effect, volume)\n        assert False, \"应该抛出ValueError异常\"\n    except ValueError as e:\n        print(f\"正确捕获异常: {e}\")\n        print(\"长度不匹配测试通过\")\n\n\nif __name__ == \"__main__\":\n    test_audio_infos()\n    print(\"\\n所有测试通过!\")"
  },
  {
    "path": "tests/test_audio_infos_simple.py",
    "content": "import sys\nimport os\nimport json\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\n# 直接导入我们需要的函数\nfrom src.service.audio_infos import audio_infos\n\n\ndef test_audio_infos():\n    \"\"\"测试音频信息生成功能\"\"\"\n    # 测试基本功能\n    print(\"测试基本功能:\")\n    mp3_urls = [\n        \"https://assets.jcaigc.cn/test1.mp3\",\n        \"https://assets.jcaigc.cn/test2.mp3\"\n    ]\n    \n    timelines = [\n        {\"start\": 0, \"end\": 284891428},\n        {\"start\": 284891428, \"end\": 579578774}\n    ]\n    \n    audio_effect = \"教堂\"\n    volume = 1.0\n    \n    infos_json = audio_infos(mp3_urls, timelines, audio_effect, volume)\n    print(f\"Infos JSON: {infos_json}\")\n    \n    # 解析JSON验证内容\n    infos = json.loads(infos_json)\n    print(f\"Parsed infos: {infos}\")\n    \n    # 验证内容\n    assert len(infos) == 2\n    assert infos[0][\"audio_url\"] == \"https://assets.jcaigc.cn/test1.mp3\"\n    assert infos[0][\"start\"] == 0\n    assert infos[0][\"end\"] == 284891428\n    assert infos[0][\"audio_effect\"] == \"教堂\"\n    assert infos[0][\"volume\"] == 1.0\n    \n    assert infos[1][\"audio_url\"] == \"https://assets.jcaigc.cn/test2.mp3\"\n    assert infos[1][\"start\"] == 284891428\n    assert infos[1][\"end\"] == 579578774\n    assert infos[1][\"audio_effect\"] == \"教堂\"\n    assert infos[1][\"volume\"] == 1.0\n    \n    print(\"基本功能测试通过\")\n    \n    # 测试可选参数为None的情况\n    print(\"\\n测试可选参数为None的情况:\")\n    infos_json_no_optional = audio_infos(mp3_urls, timelines)\n    infos_no_optional = json.loads(infos_json_no_optional)\n    print(f\"Infos without optional params: {infos_no_optional}\")\n    \n    # 验证可选参数不存在\n    assert \"audio_effect\" not in infos_no_optional[0]\n    assert \"volume\" not in infos_no_optional[0]\n    assert \"audio_effect\" not in infos_no_optional[1]\n    assert \"volume\" not in infos_no_optional[1]\n    \n    print(\"可选参数测试通过\")\n    \n    print(\"\\n所有测试通过!\")\n\n\nif __name__ == \"__main__\":\n    test_audio_infos()"
  },
  {
    "path": "tests/test_audio_timelines.py",
    "content": "import sys\nimport os\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\nfrom src.service.audio_timelines import audio_timelines\n\n\ndef test_audio_timelines():\n    \"\"\"测试音频时间线计算功能\"\"\"\n    # 测试空链接列表\n    print(\"测试空链接列表:\")\n    timelines, all_timelines = audio_timelines([])\n    print(f\"Timelines: {timelines}\")\n    print(f\"All timelines: {all_timelines}\")\n    \n    # 测试正常情况（这里只是模拟，实际测试需要真实的音频文件URL）\n    # 我们可以在这里添加更多的测试用例\n\n\nif __name__ == \"__main__\":\n    test_audio_timelines()"
  },
  {
    "path": "tests/test_caption_keywords.py",
    "content": "import requests\nimport json\nimport time\n\ndef test_caption_keywords():\n    \"\"\"测试字幕关键词高亮功能\"\"\"\n    \n    # 1. 先创建一个草稿\n    create_draft_url = \"http://localhost:8000/v1/create_draft\"\n    create_draft_data = {\n        \"width\": 1920,\n        \"height\": 1080\n    }\n    \n    try:\n        print(\"Creating draft...\")\n        create_response = requests.post(create_draft_url, json=create_draft_data)\n        \n        if create_response.status_code != 200:\n            print(f\"Failed to create draft: {create_response.status_code}\")\n            print(create_response.text)\n            return\n            \n        draft_url = create_response.json()[\"draft_url\"]\n        print(f\"Draft created successfully: {draft_url}\")\n        \n        # 2. 添加带关键词高亮的字幕\n        add_captions_url = \"http://localhost:8000/v1/add_captions\"\n        captions = [\n            {\n                \"start\": 0,\n                \"end\": 5000000,  # 5秒\n                \"text\": \"欢迎使用剪映字幕功能\",\n                \"keyword\": \"剪映|功能\",  # 关键词\n                \"keyword_color\": \"#ff0000\"  # 红色高亮\n            },\n            {\n                \"start\": 5000000,\n                \"end\": 10000000,  # 10秒\n                \"text\": \"这是一个测试字幕\",\n                \"keyword\": \"测试\",\n                \"keyword_color\": \"#00ff00\"  # 绿色高亮\n            }\n        ]\n        \n        add_captions_data = {\n            \"draft_url\": draft_url,\n            \"captions\": json.dumps(captions),\n            \"text_color\": \"#ffffff\",  # 默认白色文本\n            \"font_size\": 16\n        }\n        \n        print(\"Adding captions with keyword highlighting...\")\n        add_response = requests.post(add_captions_url, json=add_captions_data)\n        \n        if add_response.status_code == 200:\n            result = add_response.json()\n            print(f\"Captions added successfully!\")\n            print(f\"Track ID: {result['track_id']}\")\n            print(f\"Text IDs: {result['text_ids']}\")\n            print(f\"Segment IDs: {result['segment_ids']}\")\n            print(f\"Draft URL: {result['draft_url']}\")\n        else:\n            print(f\"Failed to add captions: {add_response.status_code}\")\n            print(add_response.text)\n            \n    except Exception as e:\n        print(f\"Error occurred: {e}\")\n        print(\"Make sure the server is running on http://localhost:8000\")\n\n\nif __name__ == \"__main__\":\n    test_caption_keywords()"
  },
  {
    "path": "tests/test_caption_transform.py",
    "content": "import requests\nimport json\nimport time\n\ndef test_caption_transform():\n    \"\"\"测试字幕位置变换功能\"\"\"\n    \n    # 1. 先创建一个草稿\n    create_draft_url = \"http://localhost:8000/v1/create_draft\"\n    create_draft_data = {\n        \"width\": 1920,\n        \"height\": 1080\n    }\n    \n    try:\n        print(\"Creating draft...\")\n        create_response = requests.post(create_draft_url, json=create_draft_data)\n        \n        if create_response.status_code != 200:\n            print(f\"Failed to create draft: {create_response.status_code}\")\n            print(create_response.text)\n            return\n            \n        draft_url = create_response.json()[\"draft_url\"]\n        print(f\"Draft created successfully: {draft_url}\")\n        \n        # 2. 添加带位置变换的字幕\n        add_captions_url = \"http://localhost:8000/v1/add_captions\"\n        captions = [\n            {\n                \"start\": 0,\n                \"end\": 5000000,  # 5秒\n                \"text\": \"测试字幕位置变换\"\n            }\n        ]\n        \n        add_captions_data = {\n            \"draft_url\": draft_url,\n            \"captions\": json.dumps(captions),\n            \"text_color\": \"#ffffff\",  # 默认白色文本\n            \"font_size\": 16,\n            \"transform_x\": 100,  # X轴位置偏移100像素\n            \"transform_y\": -50   # Y轴位置偏移-50像素\n        }\n        \n        print(\"Adding captions with position transformation...\")\n        add_response = requests.post(add_captions_url, json=add_captions_data)\n        \n        if add_response.status_code == 200:\n            result = add_response.json()\n            print(f\"Captions added successfully!\")\n            print(f\"Track ID: {result['track_id']}\")\n            print(f\"Text IDs: {result['text_ids']}\")\n            print(f\"Segment IDs: {result['segment_ids']}\")\n            print(f\"Draft URL: {result['draft_url']}\")\n        else:\n            print(f\"Failed to add captions: {add_response.status_code}\")\n            print(add_response.text)\n            \n    except Exception as e:\n        print(f\"Error occurred: {e}\")\n        print(\"Make sure the server is running on http://localhost:8000\")\n\n\nif __name__ == \"__main__\":\n    test_caption_transform()"
  },
  {
    "path": "tests/test_caption_transform_fix.py",
    "content": "import requests\nimport json\nimport time\n\ndef test_caption_transform_fix():\n    \"\"\"测试修复后的字幕位置变换功能\"\"\"\n    \n    # 1. 先创建一个草稿\n    create_draft_url = \"http://localhost:8000/v1/create_draft\"\n    create_draft_data = {\n        \"width\": 1920,\n        \"height\": 1080\n    }\n    \n    try:\n        print(\"Creating draft...\")\n        create_response = requests.post(create_draft_url, json=create_draft_data)\n        \n        if create_response.status_code != 200:\n            print(f\"Failed to create draft: {create_response.status_code}\")\n            print(create_response.text)\n            return\n            \n        draft_url = create_response.json()[\"draft_url\"]\n        print(f\"Draft created successfully: {draft_url}\")\n        \n        # 2. 添加带位置变换的字幕（测试修复后的transform参数）\n        add_captions_url = \"http://localhost:8000/v1/add_captions\"\n        captions = [\n            {\n                \"start\": 0,\n                \"end\": 5000000,  # 5秒\n                \"text\": \"测试字幕位置变换修复\"\n            }\n        ]\n        \n        add_captions_data = {\n            \"draft_url\": draft_url,\n            \"captions\": json.dumps(captions),\n            \"text_color\": \"#ffffff\",  # 默认白色文本\n            \"font_size\": 16,\n            \"transform_x\": 200,  # X轴位置偏移200像素\n            \"transform_y\": 100   # Y轴位置偏移100像素\n        }\n        \n        print(\"Adding captions with fixed position transformation...\")\n        print(f\"Setting transform_x={add_captions_data['transform_x']}, transform_y={add_captions_data['transform_y']}\")\n        add_response = requests.post(add_captions_url, json=add_captions_data)\n        \n        if add_response.status_code == 200:\n            result = add_response.json()\n            print(f\"Captions added successfully!\")\n            print(f\"Track ID: {result['track_id']}\")\n            print(f\"Text IDs: {result['text_ids']}\")\n            print(f\"Segment IDs: {result['segment_ids']}\")\n            print(f\"Draft URL: {result['draft_url']}\")\n            print(\"\\n注意：在剪映中验证时，transform_x=200应该精确移动200像素，而不是之前的400像素\")\n            print(\"修复说明：根据ClipSettings类定义，transform参数单位是'半个画布宽/高'，已使用正确的转换公式\")\n        else:\n            print(f\"Failed to add captions: {add_response.status_code}\")\n            print(add_response.text)\n            \n    except Exception as e:\n        print(f\"Error occurred: {e}\")\n        print(\"Make sure the server is running on http://localhost:8000\")\n\n\nif __name__ == \"__main__\":\n    test_caption_transform_fix()"
  },
  {
    "path": "tests/test_chinese_encoding_fix.py",
    "content": "\"\"\"\n测试 get_audio_duration 接口的编码问题修复\n\"\"\"\nimport requests\nimport json\n\ndef test_chinese_metadata_audio():\n    \"\"\"测试包含中文元数据的音频文件\"\"\"\n    \n    # 服务器地址\n    base_url = \"http://localhost:60000\"\n    api_url = f\"{base_url}/openapi/v1/get_audio_duration\"\n    \n    # 测试数据 - 使用包含中文元数据的音频文件\n    test_data = {\n        \"mp3_url\": \"https://assets.jcaigc.cn/test1.mp3\"  # 这个文件包含中文元数据\n    }\n    \n    # 请求头\n    headers = {\n        \"Content-Type\": \"application/json\"\n    }\n    \n    try:\n        print(\"🚀 开始测试包含中文元数据的音频文件...\")\n        print(f\"📍 请求URL: {api_url}\")\n        print(f\"📝 请求数据: {json.dumps(test_data, indent=2)}\")\n        \n        # 发送POST请求\n        response = requests.post(api_url, json=test_data, headers=headers, timeout=120)\n        \n        print(f\"📊 响应状态码: {response.status_code}\")\n        \n        if response.status_code == 200:\n            result = response.json()\n            print(f\"✅ 编码问题修复成功！\")\n            print(f\"📋 响应数据: {json.dumps(result, indent=2, ensure_ascii=False)}\")\n            \n            # 验证响应格式\n            if \"duration\" in result:\n                duration = result[\"duration\"]\n                print(f\"🎵 音频时长: {duration} 微秒 = {duration/1000000:.3f} 秒\")\n                return True\n            else:\n                print(\"❌ 响应中缺少 'duration' 字段\")\n                return False\n        else:\n            print(f\"❌ 请求失败，状态码: {response.status_code}\")\n            print(f\"📄 响应内容: {response.text}\")\n            return False\n            \n    except requests.exceptions.ConnectionError:\n        print(\"❌ 连接失败，请确保服务器已启动 (python main.py)\")\n        return False\n    except requests.exceptions.Timeout:\n        print(\"❌ 请求超时\")\n        return False\n    except Exception as e:\n        print(f\"❌ 测试异常: {str(e)}\")\n        return False\n\nif __name__ == \"__main__\":\n    success = test_chinese_metadata_audio()\n    if success:\n        print(\"\\n🎉 中文元数据编码问题修复测试通过！\")\n    else:\n        print(\"\\n💥 中文元数据编码问题修复测试失败！\")"
  },
  {
    "path": "tests/test_ci_dependencies.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\n\"\"\"\nCI/CD跨平台依赖测试脚本\n验证在不同环境下的依赖安装行为\n\"\"\"\n\nimport sys\nimport subprocess\nimport platform\n\ndef test_platform_info():\n    \"\"\"显示平台信息\"\"\"\n    print(f\"📊平信息:\")\n    print(f\"  系统: {platform.system()}\")\n    print(f\"  版本: {platform.release()}\")\n    print(f\"   Python: {sys.platform}\")\n    print(f\"  架: {platform.machine()}\")\n    print()\n\ndef test_basic_sync():\n    \"\"\"测试基础依赖同步\"\"\"\n    print(\"🧪测试基础依赖同步 (uv sync):\")\n    try:\n        result = subprocess.run(['uv', 'sync'], capture_output=True, text=True, timeout=60)\n        if result.returncode == 0:\n            print(\"   ✅基础依赖同步成功\")\n        else:\n            print(\"  ❌基础依赖同步失败\")\n            print(f\"   错误信息: {result.stderr[:200]}\")\n    except Exception as e:\n        print(f\"   ❌执行失败: {e}\")\n    print()\n\ndef test_windows_extras():\n    \"\"\"测试Windows可选依赖\"\"\"\n    print(\"🧪测试Windows可选依赖 (uv pip install -e .[windows]):\")\n    try:\n        result = subprocess.run(['uv', 'pip', 'install', '-e', '.[windows]'], \n                             capture_output=True, text=True, timeout=60)\n        if result.returncode == 0:\n            print(\"   ✅ Windows可选依赖安装成功\")\n        else:\n            print(\"  ⚠  Windows可选依赖安装可能部分成功或跳过\")\n            if \"No candidates were found\" in result.stderr:\n                print(\"  💡这是正常的 - 在非Windows平台上会跳过Windows特定依赖\")\n            else:\n                print(f\"   错误信息: {result.stderr[:200]}\")\n    except Exception as e:\n        print(f\"   ❌执行失败: {e}\")\n    print()\n\ndef test_import_functionality():\n    \"\"\"测试功能导入\"\"\"\n    print(\"🧪测试功能导入:\")\n    try:\n        # 添加项目路径\n        import sys\n        import os\n        sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))\n        \n        #测试基础导入\n        import src.pyJianYingDraft as draft\n        print(f\"   ✅基础导入成功 (ISWIN: {draft.ISWIN})\")\n        \n        #测试服务层\n        from src import service\n        print(\"   ✅ 服务层导入成功\")\n        \n        #测试API层\n        from src.router import v1_router\n        print(\"   ✅ API层导入成功\")\n        \n    except Exception as e:\n        print(f\"   ❌导入失败: {e}\")\n        import traceback\n        traceback.print_exc()\n    print()\n\ndef main():\n    \"\"\"主测试函数\"\"\"\n    print(\"=\" * 60)\n    print(\"🚀 CI/CD跨平台依赖测试\")\n    print(\"=\" * 60)\n    \n    test_platform_info()\n    test_basic_sync()\n    test_windows_extras()\n    test_import_functionality()\n    \n    print(\"=\" * 60)\n    print(\"✅ 测试完成\")\n    print(\"=\" * 60)\n\nif __name__ == \"__main__\":\n    main()"
  },
  {
    "path": "tests/test_cross_platform.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\n跨平台兼容性测试脚本\n验证在不同平台上的导入和基本功能\n\"\"\"\n\nimport sys\nimport platform\n\ndef test_cross_platform_compatibility():\n    print(f\"Platform: {platform.system()} {platform.release()}\")\n    print(f\"Python version: {sys.version}\")\n    print(\"=\" * 50)\n    \n    # 测试基础导入\n    try:\n        import src.pyJianYingDraft as draft\n        print(\"✅ 基础导入成功\")\n        print(f\"   ISWIN: {draft.ISWIN}\")\n        print(f\"   JianyingController available: {draft.JianyingController is not None}\")\n    except Exception as e:\n        print(f\"❌ 基础导入失败: {e}\")\n        return False\n    \n    # 测试服务层导入\n    try:\n        from src import service\n        print(\"✅ 服务层导入成功\")\n    except Exception as e:\n        print(f\"❌ 服务层导入失败: {e}\")\n        return False\n    \n    # 测试API层导入\n    try:\n        from src.router import v1\n        print(\"✅ API层导入成功\")\n    except Exception as e:\n        print(f\"❌ API层导入失败: {e}\")\n        return False\n    \n    # 测试工具层导入\n    try:\n        from src.utils import helper\n        print(\"✅ 工具层导入成功\")\n    except Exception as e:\n        print(f\"❌ 工具层导入失败: {e}\")\n        return False\n    \n    print(\"=\" * 50)\n    print(\"🎉 所有基础导入测试通过!\")\n    \n    # 平台特定测试\n    if draft.ISWIN:\n        print(\"\\n🖥️  Windows平台特定测试:\")\n        try:\n            # 测试UI自动化相关导入\n            from src.utils.video_task_manager import UIAutomationInitializerInThread\n            print(\"✅ UI自动化初始化器导入成功\")\n            \n            # 测试剪映控制器\n            if draft.JianyingController:\n                print(\"✅ 剪映控制器可用\")\n            else:\n                print(\"⚠️  剪映控制器不可用\")\n                \n        except Exception as e:\n            print(f\"❌ Windows特定功能测试失败: {e}\")\n    else:\n        print(\"\\n🐧 Linux平台特定测试:\")\n        try:\n            # 测试UI自动化占位符\n            from src.utils.video_task_manager import UIAutomationInitializerInThread\n            print(\"✅ UI自动化占位符导入成功\")\n            \n            # 测试占位符功能\n            with UIAutomationInitializerInThread():\n                print(\"✅ UI自动化占位符上下文管理器工作正常\")\n                \n        except Exception as e:\n            print(f\"❌ Linux特定功能测试失败: {e}\")\n    \n    return True\n\nif __name__ == \"__main__\":\n    success = test_cross_platform_compatibility()\n    sys.exit(0 if success else 1)"
  },
  {
    "path": "tests/test_draft_cleanup.py",
    "content": "\"\"\"Unit tests for draft directory cleanup (oldest first, protected / locked / cached skips).\"\"\"\nfrom __future__ import annotations\n\nimport os\n\nfrom src.utils import draft_cleanup as dc\n\n\ndef _mkdir(p: str, name: str) -> str:\n    path = os.path.join(p, name)\n    os.makedirs(path, exist_ok=True)\n    return path\n\n\ndef test_is_draft_directory_name_accepts_standard_id() -> None:\n    assert dc.is_draft_directory_name(\"20200101000000aaaaaaaa\") is True\n    assert dc.is_draft_directory_name(\"20200101000000abcdef12\") is True\n\n\ndef test_is_draft_directory_name_rejects_invalid() -> None:\n    assert dc.is_draft_directory_name(\"20200101000000aaaaaaa\") is False\n    assert dc.is_draft_directory_name(\"20200101000000aaaaaaaag\") is False\n    assert dc.is_draft_directory_name(\"draft\") is False\n    assert dc.is_draft_directory_name(\"\") is False\n\n\ndef test_list_sorted_draft_ids_ignores_files_and_bad_names(tmp_path) -> None:\n    base = str(tmp_path)\n    _mkdir(base, \"20200201000000bbbbbbbb\")\n    _mkdir(base, \"20200101000000aaaaaaaa\")\n    open(os.path.join(base, \"x.mp4\"), \"wb\").close()\n    _mkdir(base, \"not_a_valid_draft_id\")\n    got = dc.list_sorted_draft_ids(base)\n    assert got == [\"20200101000000aaaaaaaa\", \"20200201000000bbbbbbbb\"]\n\n\ndef test_select_drafts_for_deletion_oldest_first_until_quota(tmp_path) -> None:\n    ordered = [\n        \"20200101000000aaaaaaaa\",\n        \"20200201000000bbbbbbbb\",\n        \"20200301000000cccccccc\",\n    ]\n    assert dc.select_drafts_for_deletion(ordered, max_keep=3, skip_ids=set()) == []\n    assert dc.select_drafts_for_deletion(ordered, max_keep=2, skip_ids=set()) == [\n        \"20200101000000aaaaaaaa\"\n    ]\n    assert dc.select_drafts_for_deletion(ordered, max_keep=1, skip_ids=set()) == [\n        \"20200101000000aaaaaaaa\",\n        \"20200201000000bbbbbbbb\",\n    ]\n    assert dc.select_drafts_for_deletion(ordered, max_keep=0, skip_ids=set()) == ordered\n\n\ndef test_select_drafts_for_deletion_skips_protected_uses_next_oldest() -> None:\n    ordered = [\n        \"20200101000000aaaaaaaa\",\n        \"20200201000000bbbbbbbb\",\n        \"20200301000000cccccccc\",\n    ]\n    skip = {\"20200101000000aaaaaaaa\"}\n    assert dc.select_drafts_for_deletion(ordered, max_keep=1, skip_ids=skip) == [\n        \"20200201000000bbbbbbbb\",\n        \"20200301000000cccccccc\",\n    ]\n\n\ndef test_run_one_draft_cleanup_deletes_oldest_unskipped_only(tmp_path) -> None:\n    base = str(tmp_path)\n    old = \"20200101000000aaaaaaaa\"\n    mid = \"20200201000000bbbbbbbb\"\n    new = \"20200301000000cccccccc\"\n    for d in (old, mid, new):\n        _mkdir(base, d)\n    deleted = dc.run_one_draft_cleanup(\n        draft_dir=base,\n        max_keep=1,\n        protected_ids=[],\n        locked_ids=[],\n        cached_ids=[],\n    )\n    assert set(deleted) == {old, mid}\n    assert os.path.isdir(os.path.join(base, new))\n    assert not os.path.exists(os.path.join(base, old))\n    assert not os.path.exists(os.path.join(base, mid))\n\n\ndef test_run_one_draft_cleanup_never_removes_protected_ids(tmp_path) -> None:\n    base = str(tmp_path)\n    for pid in dc.DRAFT_CLEANUP_PROTECTED_DRAFT_IDS:\n        _mkdir(base, pid)\n    extra = \"20990101000000eeeeeeee\"\n    _mkdir(base, extra)\n    deleted = dc.run_one_draft_cleanup(\n        draft_dir=base,\n        max_keep=0,\n        protected_ids=dc.DRAFT_CLEANUP_PROTECTED_DRAFT_IDS,\n        locked_ids=[],\n        cached_ids=[],\n    )\n    assert extra in deleted\n    for pid in dc.DRAFT_CLEANUP_PROTECTED_DRAFT_IDS:\n        assert pid not in deleted\n        assert os.path.isdir(os.path.join(base, pid))\n\n\ndef test_run_one_draft_cleanup_skips_locked_ids(tmp_path) -> None:\n    base = str(tmp_path)\n    a, b, c = (\n        \"20200101000000aaaaaaaa\",\n        \"20200201000000bbbbbbbb\",\n        \"20200301000000cccccccc\",\n    )\n    for d in (a, b, c):\n        _mkdir(base, d)\n    deleted = dc.run_one_draft_cleanup(\n        draft_dir=base,\n        max_keep=1,\n        protected_ids=[],\n        locked_ids=[a],\n        cached_ids=[],\n    )\n    assert a not in deleted\n    assert set(deleted) == {b, c}\n    assert os.path.isdir(os.path.join(base, a))\n\n\ndef test_run_one_draft_cleanup_skips_cached_ids(tmp_path) -> None:\n    base = str(tmp_path)\n    a, b = \"20200101000000aaaaaaaa\", \"20200201000000bbbbbbbb\"\n    for d in (a, b):\n        _mkdir(base, d)\n    deleted = dc.run_one_draft_cleanup(\n        draft_dir=base,\n        max_keep=1,\n        protected_ids=[],\n        locked_ids=[],\n        cached_ids=[a],\n    )\n    assert a not in deleted\n    assert deleted == [b]\n\n\ndef test_list_sorted_draft_ids_missing_dir_returns_empty(tmp_path) -> None:\n    missing = os.path.join(str(tmp_path), \"nope\")\n    assert dc.list_sorted_draft_ids(missing) == []\n"
  },
  {
    "path": "tests/test_draft_downloader_remote_materials.py",
    "content": "\"\"\"\nUnit tests for src.utils.draft_downloader remote material download and path localization.\n\"\"\"\nimport json\nimport os\nimport tempfile\nfrom unittest.mock import MagicMock, patch\n\nimport pytest\nimport requests\n\nimport src.utils.draft_downloader as dd\n\n\n@pytest.fixture\ndef no_sleep():\n    with patch.object(dd, \"time\") as m_time:\n        m_time.sleep = MagicMock()\n        yield m_time\n\n\nclass TestDownloadRemoteFile:\n    def _ok_response(self, content: bytes = b\"data\") -> MagicMock:\n        r = MagicMock()\n        r.status_code = 200\n        r.iter_content = MagicMock(return_value=[content])\n        return r\n\n    def test_succeeds_first_request(self, no_sleep) -> None:\n        out = os.path.join(tempfile.gettempdir(), \"t_dl_first.bin\")\n        try:\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.return_value = self._ok_response()\n                m_req.exceptions = requests.exceptions\n                assert dd._download_remote_file(\"https://x.test/a.mp4\", out) is True\n                m_req.get.assert_called_once()\n            with open(out, \"rb\") as f:\n                assert f.read() == b\"data\"\n        finally:\n            if os.path.isfile(out):\n                os.remove(out)\n\n    def test_retries_then_success_on_timeout(self, no_sleep) -> None:\n        calls = []\n\n        def side_effect(*_a, **_kw):\n            calls.append(1)\n            if len(calls) < 3:\n                raise requests.exceptions.ReadTimeout(\"read timed out\")\n            return self._ok_response()\n\n        out = os.path.join(tempfile.gettempdir(), \"t_dl_retry.bin\")\n        try:\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.side_effect = side_effect\n                m_req.exceptions = requests.exceptions\n                assert dd._download_remote_file(\"https://x.test/b.mp4\", out) is True\n            assert len(calls) == 3\n        finally:\n            if os.path.isfile(out):\n                os.remove(out)\n\n    def test_returns_false_after_exhausting_retries(self, no_sleep) -> None:\n        with patch.object(dd, \"_MAX_RETRIES\", 2):\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.side_effect = requests.exceptions.ConnectionError(\"refused\")\n                m_req.exceptions = requests.exceptions\n                out = os.path.join(tempfile.gettempdir(), \"t_dl_fail.bin\")\n                assert dd._download_remote_file(\"https://x.test/c.mp4\", out) is False\n                assert m_req.get.call_count == 3\n\n    def test_non200_retries_then_success(self, no_sleep) -> None:\n        bad = MagicMock()\n        bad.status_code = 503\n        good = self._ok_response()\n        out = os.path.join(tempfile.gettempdir(), \"t_dl_503.bin\")\n        try:\n            with patch.object(dd, \"_MAX_RETRIES\", 2):\n                with patch.object(dd, \"requests\") as m_req:\n                    m_req.get.side_effect = [bad, bad, good]\n                    m_req.exceptions = requests.exceptions\n                    assert dd._download_remote_file(\"https://x.test/d.mp4\", out) is True\n        finally:\n            if os.path.isfile(out):\n                os.remove(out)\n\n\nclass TestLocalizeRemoteMaterialPaths:\n    def test_no_materials_returns_true(self) -> None:\n        assert dd.localize_remote_material_paths({}, \"/tmp/x\") is True\n\n    def test_no_urls_returns_true(self) -> None:\n        data = {\"materials\": {\"audios\": [], \"videos\": [{\"path\": \"C:\\\\local\\\\x.mp4\"}]}}\n        assert dd.localize_remote_material_paths(data, \"/tmp/y\") is True\n\n    @patch.object(dd, \"_download_remote_file\", return_value=True)\n    def test_rewrites_path_on_success(self, m_dl) -> None:\n        with tempfile.TemporaryDirectory() as td:\n            url = \"https://cdn.example.com/v.mp4\"\n            data: dict = {\n                \"materials\": {\n                    \"audios\": [],\n                    \"videos\": [\n                        {\n                            \"path\": url,\n                            \"material_name\": \"clip1\",\n                        }\n                    ],\n                }\n            }\n            assert dd.localize_remote_material_paths(data, td) is True\n            m_dl.assert_called_once()\n            new_path = data[\"materials\"][\"videos\"][0][\"path\"]\n            assert new_path.startswith(td)\n            assert \"assets\" in new_path.replace(\"\\\\\", \"/\")\n            assert new_path.endswith(\".mp4\")\n\n    @patch.object(dd, \"_download_remote_file\", return_value=False)\n    def test_returns_false_when_download_fails(self, m_dl) -> None:\n        with tempfile.TemporaryDirectory() as td:\n            url = \"https://cdn.example.com/miss.mp4\"\n            data: dict = {\n                \"materials\": {\n                    \"audios\": [],\n                    \"videos\": [{\"path\": url, \"id\": \"1\"}],\n                }\n            }\n            assert dd.localize_remote_material_paths(data, td) is False\n            assert data[\"materials\"][\"videos\"][0][\"path\"] == url\n\n    @patch.object(dd, \"_download_remote_file\", return_value=True)\n    def test_same_url_shared_across_items(self, m_dl) -> None:\n        u = \"https://cdn.example.com/same.mp3\"\n        with tempfile.TemporaryDirectory() as td:\n            data: dict = {\n                \"materials\": {\n                    \"audios\": [\n                        {\"path\": u, \"name\": \"a\"},\n                        {\"path\": u, \"name\": \"b\"},\n                    ],\n                    \"videos\": [],\n                }\n            }\n            assert dd.localize_remote_material_paths(data, td) is True\n            assert m_dl.call_count == 1\n            p0 = data[\"materials\"][\"audios\"][0][\"path\"]\n            p1 = data[\"materials\"][\"audios\"][1][\"path\"]\n            assert p0 == p1\n            assert p0.startswith(td)\n\n\nclass TestUpdateJsonFilePaths:\n    def test_skips_write_when_localize_fails(self) -> None:\n        body = {\n            \"materials\": {\"audios\": [], \"videos\": []},\n            \"duration\": 1000,\n        }\n        with tempfile.TemporaryDirectory() as td:\n            path = os.path.join(td, \"draft_content.json\")\n            original = json.dumps(body, ensure_ascii=False)\n            with open(path, \"w\", encoding=\"utf-8\") as f:\n                f.write(original)\n\n            with patch.object(dd, \"localize_remote_material_paths\", return_value=False):\n                assert (\n                    dd.update_json_file_paths(path, td, \"20260101120000abc\")\n                    is False\n                )\n\n            with open(path, \"r\", encoding=\"utf-8\") as f:\n                assert f.read() == original\n\n    @patch.object(dd, \"localize_remote_material_paths\", return_value=True)\n    @patch.object(dd, \"config\")\n    def test_writes_when_localize_ok(self, m_config, m_loc) -> None:\n        m_config.DRAFT_SAVE_PATH = \"D:/mock/draft\"\n        base = {\n            \"materials\": {\"audios\": [], \"videos\": []},\n        }\n        with tempfile.TemporaryDirectory() as td:\n            path = os.path.join(td, \"draft_content.json\")\n            with open(path, \"w\", encoding=\"utf-8\") as f:\n                json.dump(base, f, ensure_ascii=False)\n            did = \"20260101120000abc\"\n            assert dd.update_json_file_paths(path, td, did) is True\n            m_loc.assert_called_once()\n            with open(path, \"r\", encoding=\"utf-8\") as f:\n                data = json.load(f)\n            assert \"materials\" in data\n            assert isinstance(data[\"materials\"], dict)\n\n\nclass TestDownloadSingleFile:\n    \"\"\"download_single_file：流式写入 + 超时与关闭行为；路径与结果应与优化前语义一致。\"\"\"\n\n    _BASE = \"https://capcut.example.com\"\n    _TIMEOUT = (\n        dd._REQUEST_CONNECT_TIMEOUT,\n        dd._REQUEST_READ_TIMEOUT,\n    )\n\n    def _stream_response(\n        self,\n        chunks: list,\n        status: int = 200,\n    ) -> MagicMock:\n        r = MagicMock()\n        r.status_code = status\n        r.iter_content = MagicMock(side_effect=lambda chunk_size=8192: iter(chunks))\n        r.close = MagicMock()\n        return r\n\n    def test_success_writes_concatenated_chunks_and_relative_path(self, no_sleep) -> None:\n        \"\"\"URL 中带草稿 ID 时，相对路径为 draft_id 之后的路径段；内容与分块顺序一致。\"\"\"\n        file_url = (\n            f\"{self._BASE}/app/output/draft/20251204214904ccb1af38/Resources/pic.png\"\n        )\n        with tempfile.TemporaryDirectory() as td:\n            resp = self._stream_response([b\"hel\", b\"lo\"])\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.return_value = resp\n                m_req.exceptions = requests.exceptions\n                assert dd.download_single_file(file_url, td) is True\n\n            expected = os.path.join(td, \"Resources\", \"pic.png\")\n            assert os.path.isfile(expected)\n            with open(expected, \"rb\") as f:\n                assert f.read() == b\"hello\"\n\n            m_req.get.assert_called_once_with(\n                file_url,\n                timeout=self._TIMEOUT,\n                stream=True,\n            )\n            resp.close.assert_called_once()\n\n    def test_fallback_relative_path_without_draft_segment(self, no_sleep) -> None:\n        \"\"\"路径中无草稿 ID 段时，与原先一致：使用 path 第一段子路径之后部分。\"\"\"\n        file_url = f\"{self._BASE}/static/assets/logo.bin\"\n        with tempfile.TemporaryDirectory() as td:\n            resp = self._stream_response([b\"z\"])\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.return_value = resp\n                m_req.exceptions = requests.exceptions\n                assert dd.download_single_file(file_url, td) is True\n\n            expected = os.path.join(td, \"static\", \"assets\", \"logo.bin\")\n            assert os.path.isfile(expected)\n            with open(expected, \"rb\") as f:\n                assert f.read() == b\"z\"\n\n    def test_non200_returns_false_and_closes(self, no_sleep) -> None:\n        \"\"\"非网关类 4xx/5xx 不重试，立即失败并关闭响应。\"\"\"\n        file_url = f\"{self._BASE}/app/output/draft/20251204214904ccb1af38/x.bin\"\n        with tempfile.TemporaryDirectory() as td:\n            resp = self._stream_response([], status=404)\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.return_value = resp\n                m_req.exceptions = requests.exceptions\n                assert dd.download_single_file(file_url, td) is False\n            resp.close.assert_called_once()\n\n    def test_gateway_503_retries_until_exhausted(self, no_sleep) -> None:\n        \"\"\"503 退避重试，耗尽后与网络重试一致共 6 次请求。\"\"\"\n        file_url = f\"{self._BASE}/app/output/draft/20251204214904ccb1af38/x.bin\"\n        with tempfile.TemporaryDirectory() as td:\n            resp = self._stream_response([], status=503)\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.return_value = resp\n                m_req.exceptions = requests.exceptions\n                assert dd.download_single_file(file_url, td) is False\n                assert m_req.get.call_count == 6\n            assert resp.close.call_count == 6\n\n    def test_retries_then_success_on_read_timeout(self, no_sleep) -> None:\n        calls: list = []\n\n        def side_effect(*_a, **_kw):\n            calls.append(1)\n            if len(calls) < 3:\n                raise requests.exceptions.ReadTimeout(\"stalled\")\n            return self._stream_response([b\"ok\"])\n\n        file_url = (\n            f\"{self._BASE}/app/output/draft/20251204214904ccb1af38/data.bin\"\n        )\n        with tempfile.TemporaryDirectory() as td:\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.side_effect = side_effect\n                m_req.exceptions = requests.exceptions\n                assert dd.download_single_file(file_url, td) is True\n            assert len(calls) == 3\n            out = os.path.join(td, \"data.bin\")\n            with open(out, \"rb\") as f:\n                assert f.read() == b\"ok\"\n\n    def test_returns_false_after_exhausting_retries(self, no_sleep) -> None:\n        file_url = (\n            f\"{self._BASE}/app/output/draft/20251204214904ccb1af38/miss.bin\"\n        )\n        with tempfile.TemporaryDirectory() as td:\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.side_effect = requests.exceptions.ConnectionError(\"down\")\n                m_req.exceptions = requests.exceptions\n                assert dd.download_single_file(file_url, td) is False\n                # retry_count 0..5 共 6 次尝试后放弃（与原先 max_retries=5 语义一致）\n                assert m_req.get.call_count == 6\n\n    @patch.object(dd, \"update_json_file_paths\")\n    def test_plain_file_does_not_touch_json_paths(self, m_upd, no_sleep) -> None:\n        file_url = (\n            f\"{self._BASE}/app/output/draft/20251204214904ccb1af38/only.bin\"\n        )\n        with tempfile.TemporaryDirectory() as td:\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.return_value = self._stream_response([b\"\\x00\"])\n                m_req.exceptions = requests.exceptions\n                assert dd.download_single_file(file_url, td) is True\n            m_upd.assert_not_called()\n\n    @patch.object(dd, \"update_json_file_paths\", return_value=True)\n    def test_json_files_invoke_path_update(self, m_upd, no_sleep) -> None:\n        file_url = (\n            f\"{self._BASE}/app/output/draft/20251204214904ccb1af38/\"\n            f\"draft_content.json\"\n        )\n        with tempfile.TemporaryDirectory() as td:\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.return_value = self._stream_response([b\"{}\\n\"])\n                m_req.exceptions = requests.exceptions\n                assert dd.download_single_file(file_url, td) is True\n            m_upd.assert_called_once()\n            call_kw = m_upd.call_args\n            assert call_kw[0][1] == td\n            assert call_kw[0][2] == \"20251204214904ccb1af38\"\n\n    @patch.object(dd, \"update_json_file_paths\", return_value=False)\n    def test_json_update_failure_returns_false(self, m_upd, no_sleep) -> None:\n        file_url = (\n            f\"{self._BASE}/app/output/draft/20251204214904ccb1af38/\"\n            f\"draft_info.json\"\n        )\n        with tempfile.TemporaryDirectory() as td:\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.return_value = self._stream_response([b\"{}\\n\"])\n                m_req.exceptions = requests.exceptions\n                assert dd.download_single_file(file_url, td) is False\n\n\nclass TestExecuteDownload:\n    \"\"\"execute_download：超时 + 流式写入 + 关闭连接。\"\"\"\n\n    _TIMEOUT = (\n        dd._REQUEST_CONNECT_TIMEOUT,\n        dd._REQUEST_READ_TIMEOUT,\n    )\n\n    def test_streams_body_to_default_filename_and_closes(self, no_sleep) -> None:\n        draft_url = \"https://api.example.com/get?draft_id=x\"\n        did = \"mydraftid001\"\n        with tempfile.TemporaryDirectory() as td:\n            r = MagicMock()\n            r.status_code = 200\n            r.headers = {}\n            r.iter_content = MagicMock(\n                side_effect=lambda chunk_size=8192: iter([b\"a\", b\"bc\"])\n            )\n            r.close = MagicMock()\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.return_value = r\n                m_req.exceptions = requests.exceptions\n                assert dd.execute_download(draft_url, td, did) is True\n\n            out = os.path.join(td, f\"{did}.draft\")\n            with open(out, \"rb\") as f:\n                assert f.read() == b\"abc\"\n            m_req.get.assert_called_once_with(\n                draft_url,\n                timeout=self._TIMEOUT,\n                stream=True,\n            )\n            r.close.assert_called_once()\n\n    def test_non200_returns_false(self, no_sleep) -> None:\n        r = MagicMock()\n        r.status_code = 500\n        r.close = MagicMock()\n        with tempfile.TemporaryDirectory() as td:\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.return_value = r\n                m_req.exceptions = requests.exceptions\n                assert dd.execute_download(\"https://u\", td, \"d\") is False\n        r.close.assert_called_once()\n\n    def test_request_exception_returns_false(self, no_sleep) -> None:\n        with tempfile.TemporaryDirectory() as td:\n            with patch.object(dd, \"requests\") as m_req:\n                m_req.get.side_effect = requests.exceptions.ConnectTimeout(\"t\")\n                m_req.exceptions = requests.exceptions\n                assert dd.execute_download(\"https://u\", td, \"d\") is False\n"
  },
  {
    "path": "tests/test_draft_lock_all_apis.py",
    "content": "\"\"\"\n草稿并发锁功能单元测试 - 所有支持锁的 API\n测试异步锁机制防止同一草稿的并发写操作\n\n测试覆盖：\n1. 正常场景：带锁的操作成功执行\n2. 边界场景：超时、并发访问同一草稿\n3. 异常场景：锁获取失败、无效草稿 ID\n\n测试的 API 列表：\n- add_audios_async\n- add_images_async\n- save_draft_async\n- add_captions_async\n- add_effects_async\n- add_keyframes_async\n- add_sticker_async\n- add_filters_async\n- easy_create_material_async\n- add_masks_async\n\"\"\"\nimport asyncio\nimport pytest\nimport sys\nimport os\nfrom unittest.mock import patch, MagicMock\nimport json\n\n# 添加项目根目录到 Python 路径\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\nfrom src.service.add_audios import add_audios_async\nfrom src.service.add_images import add_images_async\nfrom src.service.save_draft import save_draft_async\nfrom src.service.add_captions import add_captions_async\nfrom src.service.add_effects import add_effects_async\nfrom src.service.add_keyframes import add_keyframes_async\nfrom src.service.add_sticker import add_sticker_async\nfrom src.service.add_filters import add_filters_async\nfrom src.service.easy_create_material import easy_create_material_async\nfrom src.service.add_masks import add_masks_async\nfrom src.utils.draft_lock_manager import DraftLockManager\nfrom exceptions import CustomException, CustomError\n\n\nclass TestAllAsyncLockAPIs:\n    \"\"\"所有带锁异步 API 的测试类\"\"\"\n    \n    @pytest.fixture\n    def mock_draft_data(self):\n        \"\"\"模拟草稿数据\"\"\"\n        return {\n            \"draft_url\": \"http://localhost/v1/get_draft?draft_id=test-draft-001\",\n            \"draft_id\": \"test-draft-001\"\n        }\n    \n    @pytest.mark.asyncio\n    async def test_save_draft_async_normal(self, mock_draft_data):\n        \"\"\"测试 save_draft_async 正常场景\"\"\"\n        with patch('src.service.save_draft.DRAFT_CACHE') as mock_cache, \\\n             patch('src.service.save_draft.helper.get_url_param', return_value=mock_draft_data['draft_id']):\n            \n            # 模拟草稿对象\n            mock_script = MagicMock()\n            mock_script.save.return_value = None\n            mock_cache.__getitem__.return_value = mock_script\n            \n            # 执行测试\n            result = await save_draft_async(draft_url=mock_draft_data['draft_url'])\n            \n            # 验证结果\n            assert result == mock_draft_data['draft_url']\n            mock_script.save.assert_called_once()\n    \n    @pytest.mark.asyncio\n    async def test_add_audios_async_normal(self, mock_draft_data):\n        \"\"\"测试 add_audios_async 正常场景\"\"\"\n        audio_infos = json.dumps([\n            {\n                \"audio_url\": \"https://example.com/audio.mp3\",\n                \"start\": 0,\n                \"end\": 5000000\n            }\n        ])\n        \n        mock_audio_seg = MagicMock()\n        mock_audio_seg.material_instance.material_id = 'audio-mat-123'\n\n        with patch('src.service.add_audios.DRAFT_CACHE') as mock_cache, \\\n             patch('src.service.add_audios.helper.get_url_param', return_value=mock_draft_data['draft_id']), \\\n             patch('src.service.add_audios.download') as mock_download, \\\n             patch('src.service.add_audios.AudioMaterial') as mock_audio_material, \\\n             patch('src.service.add_audios.draft.AudioSegment', return_value=mock_audio_seg), \\\n             patch('src.service.add_audios.os.makedirs'), \\\n             patch('src.service.add_audios.os.path.isfile', return_value=True):\n            \n            # 模拟草稿对象（prepare 阶段会执行 draft_id in DRAFT_CACHE）\n            mock_script = MagicMock()\n            mock_script.save.return_value = None\n            mock_script.tracks = {'track1': MagicMock(track_id='track-id-123', name='audio_track')}\n            mock_script.width = 1920\n            mock_script.height = 1080\n            mock_cache.__contains__.return_value = True\n            mock_cache.__getitem__.return_value = mock_script\n            \n            # 模拟下载和音频处理\n            mock_download.return_value = '/tmp/audio.mp3'\n            mock_audio_material.return_value.duration = 5000000\n            \n            # 执行测试\n            result = await add_audios_async(\n                draft_url=mock_draft_data['draft_url'],\n                audio_infos=audio_infos\n            )\n            \n            # 验证结果\n            assert len(result) == 3\n            assert result[0] == mock_draft_data['draft_url']\n    \n    @pytest.mark.asyncio\n    async def test_add_images_async_normal(self, mock_draft_data):\n        \"\"\"测试 add_images_async 正常场景\"\"\"\n        image_infos = json.dumps([\n            {\n                \"image_url\": \"https://example.com/image.jpg\",\n                \"width\": 1024,\n                \"height\": 1024,\n                \"start\": 0,\n                \"end\": 5000000\n            }\n        ])\n        \n        mock_img_seg = MagicMock()\n        mock_img_seg.segment_id = 'seg-img-123'\n        mock_img_seg.material_instance.material_id = 'img-mat-123'\n\n        with patch('src.service.add_images.DRAFT_CACHE') as mock_cache, \\\n             patch('src.service.add_images.helper.get_url_param', return_value=mock_draft_data['draft_id']), \\\n             patch('src.service.add_images.download') as mock_download, \\\n             patch('src.service.add_images.draft.VideoSegment', return_value=mock_img_seg), \\\n             patch('src.service.add_images.os.makedirs'), \\\n             patch('src.service.add_images.os.path.isfile', return_value=True):\n            \n            # 模拟草稿对象（prepare 阶段会执行 draft_id in DRAFT_CACHE）\n            mock_script = MagicMock()\n            mock_script.save.return_value = None\n            mock_script.tracks = {'track1': MagicMock(track_id='track-id-123', name='image_track')}\n            mock_script.width = 1920\n            mock_script.height = 1080\n            mock_cache.__contains__.return_value = True\n            mock_cache.__getitem__.return_value = mock_script\n            \n            # 模拟下载\n            mock_download.return_value = '/tmp/image.jpg'\n            \n            # 执行测试\n            result = await add_images_async(\n                draft_url=mock_draft_data['draft_url'],\n                image_infos=image_infos\n            )\n            \n            # 验证结果\n            assert len(result) == 5\n            assert result[0] == mock_draft_data['draft_url']\n    \n    @pytest.mark.asyncio\n    async def test_add_captions_async_normal(self, mock_draft_data):\n        \"\"\"测试 add_captions_async 正常场景\"\"\"\n        captions = json.dumps([\n            {\n                \"start\": 0,\n                \"end\": 5000000,\n                \"text\": \"你好，剪映\"\n            }\n        ])\n        \n        with patch('src.service.add_captions.DRAFT_CACHE') as mock_cache, \\\n             patch('src.service.add_captions.helper.get_url_param', return_value=mock_draft_data['draft_id']):\n            \n            # 模拟草稿对象\n            mock_script = MagicMock()\n            mock_script.save.return_value = None\n            mock_script.tracks = {'track1': MagicMock(track_id='track-id-123', name='caption_track')}\n            mock_script.width = 1920\n            mock_script.height = 1080\n            mock_cache.__getitem__.return_value = mock_script\n            \n            # 执行测试\n            result = await add_captions_async(\n                draft_url=mock_draft_data['draft_url'],\n                captions=captions\n            )\n            \n            # 验证结果\n            assert len(result) == 5\n            assert result[0] == mock_draft_data['draft_url']\n    \n    @pytest.mark.asyncio\n    async def test_add_effects_async_normal(self, mock_draft_data):\n        \"\"\"测试 add_effects_async 正常场景\"\"\"\n        effect_infos = json.dumps([\n            {\n                \"effect_title\": \"录制边框 III\",\n                \"start\": 0,\n                \"end\": 5000000\n            }\n        ])\n        \n        with patch('src.service.add_effects.DRAFT_CACHE') as mock_cache, \\\n             patch('src.service.add_effects.helper.get_url_param', return_value=mock_draft_data['draft_id']):\n            \n            # 模拟草稿对象\n            mock_script = MagicMock()\n            mock_script.save.return_value = None\n            mock_script.tracks = {'track1': MagicMock(track_id='track-id-123', name='effect_track')}\n            mock_cache.__getitem__.return_value = mock_script\n            \n            # 执行测试\n            result = await add_effects_async(\n                draft_url=mock_draft_data['draft_url'],\n                effect_infos=effect_infos\n            )\n            \n            # 验证结果\n            assert len(result) == 4\n            assert result[0] == mock_draft_data['draft_url']\n    \n    @pytest.mark.asyncio\n    async def test_add_keyframes_async_normal(self, mock_draft_data):\n        \"\"\"测试 add_keyframes_async 正常场景\"\"\"\n        keyframes = json.dumps([\n            {\n                \"segment_id\": \"segment-uuid-123\",\n                \"property\": \"KFTypePositionX\",\n                \"offset\": 0.5,\n                \"value\": -0.1\n            }\n        ])\n        \n        with patch('src.service.add_keyframes.DRAFT_CACHE') as mock_cache, \\\n             patch('src.service.add_keyframes.helper.get_url_param', return_value=mock_draft_data['draft_id']):\n            \n            # 模拟草稿对象\n            mock_script = MagicMock()\n            mock_script.save.return_value = None\n            mock_cache.__getitem__.return_value = mock_script\n            \n            # 模拟片段\n            mock_segment = MagicMock()\n            mock_segment.segment_id = \"segment-uuid-123\"\n            mock_segment.duration = 5000000\n            mock_script.find_segment_by_id.return_value = mock_segment\n            \n            # 执行测试\n            result = await add_keyframes_async(\n                draft_url=mock_draft_data['draft_url'],\n                keyframes=keyframes\n            )\n            \n            # 验证结果\n            assert len(result) == 3\n            assert result[0] == mock_draft_data['draft_url']\n    \n    @pytest.mark.asyncio\n    async def test_add_sticker_async_normal(self, mock_draft_data):\n        \"\"\"测试 add_sticker_async 正常场景\"\"\"\n        with patch('src.service.add_sticker.DRAFT_CACHE') as mock_cache, \\\n             patch('src.service.add_sticker.helper.get_url_param', return_value=mock_draft_data['draft_id']):\n            \n            # 模拟草稿对象\n            mock_script = MagicMock()\n            mock_script.save.return_value = None\n            mock_script.tracks = {'track1': MagicMock(track_id='track-id-123', name='sticker_track')}\n            mock_script.width = 1920\n            mock_script.height = 1080\n            mock_cache.__getitem__.return_value = mock_script\n            \n            # 执行测试\n            result = await add_sticker_async(\n                draft_url=mock_draft_data['draft_url'],\n                sticker_id=\"sticker-uuid-123\",\n                start=0,\n                end=5000000\n            )\n            \n            # 验证结果\n            assert len(result) == 5\n            assert result[0] == mock_draft_data['draft_url']\n    \n    @pytest.mark.asyncio\n    async def test_add_filters_async_normal(self, mock_draft_data):\n        \"\"\"测试 add_filters_async 正常场景\"\"\"\n        filter_infos = json.dumps([\n            {\n                \"filter_title\": \"复古\",\n                \"start\": 0,\n                \"end\": 5000000\n            }\n        ])\n        \n        with patch('src.service.add_filters.DRAFT_CACHE') as mock_cache, \\\n             patch('src.service.add_filters.helper.get_url_param', return_value=mock_draft_data['draft_id']):\n            \n            # 模拟草稿对象\n            mock_script = MagicMock()\n            mock_script.save.return_value = None\n            mock_script.tracks = {'track1': MagicMock(track_id='track-id-123', name='filter_track')}\n            mock_cache.__getitem__.return_value = mock_script\n            \n            # 执行测试\n            result = await add_filters_async(\n                draft_url=mock_draft_data['draft_url'],\n                filter_infos=filter_infos\n            )\n            \n            # 验证结果\n            assert len(result) == 4\n            assert result[0] == mock_draft_data['draft_url']\n    \n    @pytest.mark.asyncio\n    async def test_add_masks_async_normal(self, mock_draft_data):\n        \"\"\"测试 add_masks_async 正常场景\"\"\"\n        segment_ids = [\"segment-uuid-123\"]\n        \n        with patch('src.service.add_masks.DRAFT_CACHE') as mock_cache, \\\n             patch('src.service.add_masks.helper.get_url_param', return_value=mock_draft_data['draft_id']):\n            \n            # 模拟草稿对象\n            mock_script = MagicMock()\n            mock_script.save.return_value = None\n            mock_cache.__getitem__.return_value = mock_script\n            \n            # 模拟片段\n            mock_segment = MagicMock()\n            mock_segment.segment_id = \"segment-uuid-123\"\n            mock_script.find_segment_by_id.return_value = mock_segment\n            \n            # 执行测试\n            result = await add_masks_async(\n                draft_url=mock_draft_data['draft_url'],\n                segment_ids=segment_ids\n            )\n            \n            # 验证结果\n            assert len(result) == 4\n            assert result[0] == mock_draft_data['draft_url']\n    \n    @pytest.mark.asyncio\n    async def test_easy_create_material_async_normal(self, mock_draft_data):\n        \"\"\"测试 easy_create_material_async 正常场景\"\"\"\n        with patch('src.service.easy_create_material.DRAFT_CACHE') as mock_cache, \\\n             patch('src.service.easy_create_material.helper.get_url_param', return_value=mock_draft_data['draft_id']), \\\n             patch('src.service.easy_create_material.download') as mock_download, \\\n             patch('src.service.easy_create_material.os.makedirs'):\n            \n            # 模拟草稿对象\n            mock_script = MagicMock()\n            mock_script.save.return_value = None\n            mock_script.width = 1920\n            mock_script.height = 1080\n            mock_cache.__getitem__.return_value = mock_script\n            \n            # 模拟下载\n            mock_download.return_value = '/tmp/audio.mp3'\n            \n            # 执行测试\n            result = await easy_create_material_async(\n                draft_url=mock_draft_data['draft_url'],\n                audio_url=\"https://example.com/audio.mp3\"\n            )\n            \n            # 验证结果\n            assert result == mock_draft_data['draft_url']\n    \n    @pytest.mark.asyncio\n    async def test_concurrent_access_same_draft_serialized(self, mock_draft_data):\n        \"\"\"测试同一草稿的并发访问会被串行化\"\"\"\n        lock_manager = DraftLockManager()\n        execution_log = []\n        \n        async def worker(worker_id, work_duration=0.1):\n            \"\"\"模拟一个 API 请求\"\"\"\n            try:\n                await lock_manager.acquire_lock(mock_draft_data['draft_id'], timeout=5.0)\n                execution_log.append(f\"worker_{worker_id}_start\")\n                await asyncio.sleep(work_duration)  # 模拟写入草稿文件\n                execution_log.append(f\"worker_{worker_id}_end\")\n            finally:\n                await lock_manager.release_lock(mock_draft_data['draft_id'])\n        \n        # 启动 3 个并发请求\n        tasks = [\n            worker(1),\n            worker(2),\n            worker(3)\n        ]\n        \n        # 等待所有任务完成\n        await asyncio.gather(*tasks)\n        \n        # 验证执行顺序是串行的（不是交错的）\n        # 正确的串行执行应该是：worker_1_start, worker_1_end, worker_2_start, worker_2_end...\n        assert len(execution_log) == 6\n        # 检查每个 worker 的 start 和 end 是连续的\n        for i in range(0, len(execution_log), 2):\n            assert execution_log[i].endswith('_start')\n            assert execution_log[i+1].endswith('_end')\n            # 确保是同一个 worker\n            worker_id = execution_log[i].split('_')[1]\n            assert execution_log[i+1].split('_')[1] == worker_id\n    \n    @pytest.mark.asyncio\n    async def test_invalid_draft_id_raises_error(self):\n        \"\"\"测试无效草稿 ID 抛出错误\"\"\"\n        with patch('src.service.save_draft.helper.get_url_param', return_value=None):\n            with pytest.raises(CustomException) as exc_info:\n                await save_draft_async(draft_url=\"http://invalid-url\")\n            \n            assert exc_info.value.err == CustomError.INVALID_DRAFT_URL\n    \n    @pytest.mark.asyncio\n    async def test_lock_timeout_raises_error(self, mock_draft_data):\n        \"\"\"测试锁超时抛出错误\"\"\"\n        lock_manager = DraftLockManager()\n        \n        # 先获取锁并不释放\n        await lock_manager.acquire_lock(mock_draft_data['draft_id'])\n        \n        # 尝试再次获取锁，应该超时\n        with pytest.raises(CustomException) as exc_info:\n            with patch('src.service.save_draft.DRAFT_CACHE') as mock_cache, \\\n                 patch('src.service.save_draft.helper.get_url_param', return_value=mock_draft_data['draft_id']):\n                \n                mock_script = MagicMock()\n                mock_cache.__getitem__.return_value = mock_script\n                \n                await save_draft_async(\n                    draft_url=mock_draft_data['draft_url'],\n                    lock_timeout=0.1  # 很短的超时时间\n                )\n        \n        assert exc_info.value.err == CustomError.DRAFT_LOCK_TIMEOUT\n        \n        # 清理：释放锁\n        await lock_manager.release_lock(mock_draft_data['draft_id'])\n\n\nif __name__ == '__main__':\n    pytest.main([__file__, '-v'])\n"
  },
  {
    "path": "tests/test_draft_lock_manager.py",
    "content": "\"\"\"\n草稿并发锁管理器单元测试\n测试 DraftLockManager 的所有功能\n\n测试覆盖：\n1. 正常场景：锁的获取和释放\n2. 边界场景：超时、重入、并发访问\n3. 异常场景：无效输入、重复释放\n\"\"\"\nimport asyncio\nimport pytest\nimport sys\nimport os\n\n# 添加项目根目录到 Python 路径\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\nfrom src.utils.draft_lock_manager import DraftLockManager, get_draft_lock_manager\n\n\nclass TestDraftLockManager:\n    \"\"\"DraftLockManager 测试类\"\"\"\n    \n    @pytest.fixture\n    def lock_manager(self):\n        \"\"\"创建锁管理器实例\"\"\"\n        return DraftLockManager()\n    \n    @pytest.mark.asyncio\n    async def test_acquire_and_release_lock(self, lock_manager):\n        \"\"\"测试基本的锁获取和释放\"\"\"\n        draft_id = \"test-draft-001\"\n        \n        # 获取锁\n        result = await lock_manager.acquire_lock(draft_id)\n        assert result is True\n        assert lock_manager.is_locked(draft_id) is True\n        assert lock_manager.get_lock_count(draft_id) == 1\n        \n        # 释放锁\n        await lock_manager.release_lock(draft_id)\n        assert lock_manager.is_locked(draft_id) is False\n        assert lock_manager.get_lock_count(draft_id) == 0\n    \n    @pytest.mark.asyncio\n    async def test_acquire_lock_with_timeout(self, lock_manager):\n        \"\"\"测试带超时的锁获取\"\"\"\n        draft_id = \"test-draft-002\"\n        \n        # 立即获取锁（无超时）\n        result = await lock_manager.acquire_lock(draft_id, timeout=None)\n        assert result is True\n        \n        await lock_manager.release_lock(draft_id)\n        \n        # 带超时获取锁\n        result = await lock_manager.acquire_lock(draft_id, timeout=5.0)\n        assert result is True\n        \n        await lock_manager.release_lock(draft_id)\n    \n    @pytest.mark.asyncio\n    async def test_acquire_lock_timeout_exception(self, lock_manager):\n        \"\"\"测试锁获取超时异常\"\"\"\n        draft_id = \"test-draft-003\"\n        \n        # 第一次获取锁\n        await lock_manager.acquire_lock(draft_id)\n        \n        # 尝试再次获取（应该超时）\n        with pytest.raises(asyncio.TimeoutError):\n            await lock_manager.acquire_lock(draft_id, timeout=0.1)\n        \n        # 清理\n        await lock_manager.release_lock(draft_id)\n    \n    @pytest.mark.asyncio\n    async def test_release_nonexistent_lock(self, lock_manager):\n        \"\"\"测试释放不存在的锁\"\"\"\n        draft_id = \"nonexistent-draft\"\n        \n        with pytest.raises(KeyError):\n            await lock_manager.release_lock(draft_id)\n    \n    @pytest.mark.asyncio\n    async def test_is_locked_method(self, lock_manager):\n        \"\"\"测试 is_locked 方法\"\"\"\n        draft_id = \"test-draft-004\"\n        \n        # 未锁定时\n        assert lock_manager.is_locked(draft_id) is False\n        \n        # 锁定后\n        await lock_manager.acquire_lock(draft_id)\n        assert lock_manager.is_locked(draft_id) is True\n        \n        # 释放后\n        await lock_manager.release_lock(draft_id)\n        assert lock_manager.is_locked(draft_id) is False\n    \n    @pytest.mark.asyncio\n    async def test_get_lock_count(self, lock_manager):\n        \"\"\"测试获取锁计数\"\"\"\n        draft_id = \"test-draft-005\"\n        \n        # 初始计数为 0\n        assert lock_manager.get_lock_count(draft_id) == 0\n        \n        # 获取一次锁\n        await lock_manager.acquire_lock(draft_id)\n        assert lock_manager.get_lock_count(draft_id) == 1\n        \n        # 释放锁\n        await lock_manager.release_lock(draft_id)\n        assert lock_manager.get_lock_count(draft_id) == 0\n    \n    @pytest.mark.asyncio\n    async def test_get_all_locked_drafts(self, lock_manager):\n        \"\"\"测试获取所有被锁定的草稿\"\"\"\n        draft_ids = [\"test-draft-006-a\", \"test-draft-006-b\", \"test-draft-006-c\"]\n        \n        # 锁定前两个\n        await lock_manager.acquire_lock(draft_ids[0])\n        await lock_manager.acquire_lock(draft_ids[1])\n        \n        locked = lock_manager.get_all_locked_drafts()\n        assert len(locked) == 2\n        assert draft_ids[0] in locked\n        assert draft_ids[1] in locked\n        assert draft_ids[2] not in locked\n        \n        # 释放一个\n        await lock_manager.release_lock(draft_ids[0])\n        locked = lock_manager.get_all_locked_drafts()\n        assert len(locked) == 1\n        assert draft_ids[1] in locked\n        \n        # 全部释放\n        await lock_manager.release_lock(draft_ids[1])\n        locked = lock_manager.get_all_locked_drafts()\n        assert len(locked) == 0\n    \n    @pytest.mark.asyncio\n    async def test_clear_all_locks(self, lock_manager):\n        \"\"\"测试清除所有锁\"\"\"\n        draft_ids = [\"test-draft-007-a\", \"test-draft-007-b\"]\n        \n        # 获取多个锁\n        for draft_id in draft_ids:\n            await lock_manager.acquire_lock(draft_id)\n        \n        # 验证都被锁定\n        for draft_id in draft_ids:\n            assert lock_manager.is_locked(draft_id) is True\n        \n        # 清除所有锁\n        await lock_manager.clear_all_locks()\n        \n        # 验证都已释放（锁对象已被删除）\n        for draft_id in draft_ids:\n            assert lock_manager.is_locked(draft_id) is False\n    \n    @pytest.mark.asyncio\n    async def test_get_stats(self, lock_manager):\n        \"\"\"测试获取统计信息\"\"\"\n        draft_ids = [\"test-draft-008-a\", \"test-draft-008-b\"]\n        \n        # 初始状态\n        stats = lock_manager.get_stats()\n        assert stats[\"total_locks\"] == 0\n        assert stats[\"locked_drafts\"] == 0\n        \n        # 获取锁后\n        for draft_id in draft_ids:\n            await lock_manager.acquire_lock(draft_id)\n        \n        stats = lock_manager.get_stats()\n        assert stats[\"total_locks\"] == 2\n        assert stats[\"locked_drafts\"] == 2\n        assert stats[\"total_holders\"] == 2\n        \n        # 清理\n        for draft_id in draft_ids:\n            await lock_manager.release_lock(draft_id)\n    \n    @pytest.mark.asyncio\n    async def test_concurrent_access_different_drafts(self, lock_manager):\n        \"\"\"测试并发访问不同草稿\"\"\"\n        results = []\n        \n        async def acquire_and_release(draft_id):\n            await lock_manager.acquire_lock(draft_id)\n            await asyncio.sleep(0.1)  # 模拟工作\n            results.append(draft_id)\n            await lock_manager.release_lock(draft_id)\n        \n        # 并发访问 3 个不同的草稿\n        tasks = [\n            acquire_and_release(\"draft-a\"),\n            acquire_and_release(\"draft-b\"),\n            acquire_and_release(\"draft-c\")\n        ]\n        \n        await asyncio.gather(*tasks)\n        \n        # 所有任务都应该完成\n        assert len(results) == 3\n        assert \"draft-a\" in results\n        assert \"draft-b\" in results\n        assert \"draft-c\" in results\n    \n    @pytest.mark.asyncio\n    async def test_serial_access_same_draft(self, lock_manager):\n        \"\"\"测试串行访问同一草稿\"\"\"\n        draft_id = \"test-draft-same\"\n        execution_order = []\n        \n        async def worker(worker_id):\n            await lock_manager.acquire_lock(draft_id)\n            try:\n                execution_order.append(f\"{worker_id}_start\")\n                await asyncio.sleep(0.1)\n                execution_order.append(f\"{worker_id}_end\")\n            finally:\n                await lock_manager.release_lock(draft_id)\n        \n        # 3 个 worker 按顺序访问同一草稿（不是并发）\n        # 因为 asyncio.gather 会同时启动所有任务，但锁会强制它们串行执行\n        tasks = [\n            worker(1),\n            worker(2),\n            worker(3)\n        ]\n        \n        await asyncio.gather(*tasks)\n        \n        # 验证执行顺序是串行的（每个 worker 必须等待前一个完成）\n        # 由于锁的保护，应该是一个接一个执行\n        assert len(execution_order) == 6\n        \n        # 验证每个 worker 都是成对的 start->end\n        for i in range(0, len(execution_order), 2):\n            worker_num = execution_order[i].split('_')[0]\n            assert execution_order[i+1] == f\"{worker_num}_end\"\n    \n    @pytest.mark.asyncio\n    async def test_singleton_pattern(self):\n        \"\"\"测试单例模式\"\"\"\n        manager1 = DraftLockManager()\n        manager2 = DraftLockManager()\n        \n        # 应该是同一个实例\n        assert manager1 is manager2\n    \n    @pytest.mark.asyncio\n    async def test_get_draft_lock_manager_function(self):\n        \"\"\"测试全局获取器函数\"\"\"\n        manager1 = get_draft_lock_manager()\n        manager2 = get_draft_lock_manager()\n        \n        # 应该是同一个实例\n        assert manager1 is manager2\n\n\nclass TestDraftLockManagerEdgeCases:\n    \"\"\"DraftLockManager 边界情况测试\"\"\"\n    \n    @pytest.mark.asyncio\n    async def test_empty_draft_id(self):\n        \"\"\"测试空字符串草稿 ID\"\"\"\n        lock_manager = DraftLockManager()\n        \n        # 空字符串也应该能获取锁\n        draft_id = \"\"\n        result = await lock_manager.acquire_lock(draft_id)\n        assert result is True\n        \n        await lock_manager.release_lock(draft_id)\n    \n    @pytest.mark.asyncio\n    async def test_special_characters_in_draft_id(self):\n        \"\"\"测试特殊字符的草稿 ID\"\"\"\n        lock_manager = DraftLockManager()\n        \n        special_ids = [\n            \"draft-with-dash\",\n            \"draft_with_underscore\",\n            \"draft.with.dots\",\n            \"draft/with/slashes\",\n            \"draft@with#special$chars\"\n        ]\n        \n        for draft_id in special_ids:\n            await lock_manager.acquire_lock(draft_id)\n            assert lock_manager.is_locked(draft_id) is True\n            await lock_manager.release_lock(draft_id)\n            assert lock_manager.is_locked(draft_id) is False\n    \n    @pytest.mark.asyncio\n    async def test_very_long_draft_id(self):\n        \"\"\"测试超长草稿 ID\"\"\"\n        lock_manager = DraftLockManager()\n        \n        # 创建一个很长的 ID\n        long_id = \"draft-\" + \"a\" * 1000\n        \n        await lock_manager.acquire_lock(long_id)\n        assert lock_manager.is_locked(long_id) is True\n        await lock_manager.release_lock(long_id)\n    \n    @pytest.mark.asyncio\n    async def test_rapid_acquire_release_cycle(self):\n        \"\"\"测试快速连续获取释放循环\"\"\"\n        lock_manager = DraftLockManager()\n        draft_id = \"rapid-cycle\"\n        \n        # 快速循环 100 次\n        for i in range(100):\n            await lock_manager.acquire_lock(draft_id)\n            await lock_manager.release_lock(draft_id)\n        \n        # 最后应该是未锁定状态\n        assert lock_manager.is_locked(draft_id) is False\n    \n    @pytest.mark.asyncio\n    async def test_multiple_workers_same_draft_stress(self):\n        \"\"\"测试多 worker 压力测试\"\"\"\n        lock_manager = DraftLockManager()\n        draft_id = \"stress-test\"\n        counter = 0\n        \n        async def increment_counter():\n            nonlocal counter\n            await lock_manager.acquire_lock(draft_id)\n            try:\n                current = counter\n                await asyncio.sleep(0.01)  # 增加竞争\n                counter = current + 1\n            finally:\n                await lock_manager.release_lock(draft_id)\n        \n        # 10 个 worker 同时尝试增加计数器\n        tasks = [increment_counter() for _ in range(10)]\n        await asyncio.gather(*tasks)\n        \n        # 由于锁的保护，counter 应该正好是 10\n        assert counter == 10\n\n\nif __name__ == \"__main__\":\n    pytest.main([__file__, \"-v\"])\n"
  },
  {
    "path": "tests/test_draft_service.py",
    "content": "import pytest\nfrom fastapi.testclient import TestClient\nfrom main import app\nfrom src.service.create_draft import create_draft_service\nfrom src.schemas.create_draft import CreateDraftRequest\n\nclient = TestClient(app)\n\n\ndef test_create_draft_service(mocker):\n    \"\"\"测试创建草稿的服务函数\"\"\"\n    # 模拟draft_dir和pyJianYingDraft\n    mock_draft_dir = \"test/draft/dir\"\n    mock_draft_folder = mocker.patch(\"pyJianYingDraft.DraftFolder\")\n    mock_script = mocker.Mock()\n    mock_draft_folder.return_value.create_draft.return_value = mock_script\n\n    # 调用服务函数\n    draft_id = create_draft_service(\n        draft_dir=mock_draft_dir,\n        width=1920,\n        height=1080\n    )\n\n    # 验证调用\n    mock_draft_folder.assert_called_once_with(mock_draft_dir)\n    mock_draft_folder.return_value.create_draft.assert_called_once()\n    mock_script.save.assert_called_once()\n    assert draft_id is not None\n\n\ndef test_create_draft_api():\n    \"\"\"测试创建草稿的API接口\"\"\"\n    response = client.post(\"/openapi/v1/create_draft\", json={\"height\": 1080, \"width\": 1920})\n    assert response.status_code == 200\n    assert \"message\" in response.json()\n    assert \"draft_id\" in response.json()\n    assert response.json()[\"message\"] == \"草稿创建成功\"\n\n\nif __name__ == \"__main__\":\n    pytest.main([\"-v\", \"test_draft_service.py\"])"
  },
  {
    "path": "tests/test_export_error_handling.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\n\"\"\"\n测试视频导出功能的错误处理\n\"\"\"\n\nimport sys\nimport os\nsys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))\n\nfrom src.utils.video_task_manager import VideoGenTaskManager\nfrom src.utils.logger import logger\n\ndef test_export_error_handling():\n    \"\"\"测试导出功能的错误处理\"\"\"\n    print(\"🧪 测试视频导出错误处理...\")\n    \n    # 创建任务管理器实例\n    task_manager = VideoGenTaskManager()\n    \n    # 创建一个测试任务\n    test_task = type('TestTask', (), {\n        'draft_id': 'test_draft_123',\n        'progress': 0\n    })()\n    \n    try:\n        # 尝试调用导出功能（应该会抛出RuntimeError）\n        result = task_manager._export_video(test_task, \"test_output.mp4\")\n        print(f\"❌ 预期应该抛出异常，但返回了: {result}\")\n    except RuntimeError as e:\n        print(f\"✅ 正确捕获RuntimeError: {e}\")\n        if \"缺少Windows依赖\" in str(e) or \"仅在Windows平台可用\" in str(e):\n            print(\"✅ 错误信息符合预期\")\n        else:\n            print(f\"⚠️  错误信息不完全符合预期: {e}\")\n    except Exception as e:\n        print(f\"❌ 捕获到意外异常: {type(e).__name__}: {e}\")\n    \n    print(\"✅ 错误处理测试完成\")\n\nif __name__ == \"__main__\":\n    test_export_error_handling()"
  },
  {
    "path": "tests/test_file_operations.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\n\"\"\"\n测试文件移动功能的改进\n\"\"\"\n\nimport sys\nimport os\nimport tempfile\nimport shutil\nfrom unittest.mock import Mock, patch\n\n# 添加项目路径\nsys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))\n\ndef test_file_move_improvements():\n    \"\"\"测试文件移动功能的改进\"\"\"\n    print(\"🧪 测试文件移动功能改进...\")\n    \n    # 创建测试文件\n    with tempfile.TemporaryDirectory() as temp_dir:\n        test_file = os.path.join(temp_dir, \"test_draft.mp4\")\n        output_file = os.path.join(temp_dir, \"output\", \"result.mp4\")\n        \n        # 创建测试文件\n        with open(test_file, 'w') as f:\n            f.write(\"test content\")\n        \n        print(f\"✅ 创建测试文件: {test_file}\")\n        print(f\"✅目标路径: {output_file}\")\n        \n        #测试正常移动\n        try:\n            #确保目标目录存在\n            os.makedirs(os.path.dirname(output_file), exist_ok=True)\n            shutil.move(test_file, output_file)\n            print(\"✅ 文件移动成功\")\n            \n            # 检查文件是否存在\n            if os.path.exists(output_file):\n                print(\"✅目标文件存在\")\n            else:\n                print(\"❌目标文件不存在\")\n                \n        except Exception as e:\n            print(f\"❌ 文件移动失败: {e}\")\n    \n    print(\"✅ 文件移动测试完成\")\n\ndef test_directory_creation():\n    \"\"\"测试目录创建功能\"\"\"\n    print(\"\\n🧪 测试目录创建功能...\")\n    \n    with tempfile.TemporaryDirectory() as temp_dir:\n        nested_path = os.path.join(temp_dir, \"a\", \"b\", \"c\", \"file.txt\")\n        directory = os.path.dirname(nested_path)\n        \n        print(f\"✅ 目标目录: {directory}\")\n        \n        #测试创建嵌套目录\n        try:\n            os.makedirs(directory, exist_ok=True)\n            print(\"✅目录创建成功\")\n            \n            # 创建测试文件\n            with open(nested_path, 'w') as f:\n                f.write(\"test\")\n            print(\"✅ 文件创建成功\")\n            \n        except Exception as e:\n            print(f\"❌目录创建失败: {e}\")\n    \n    print(\"✅目录创建测试完成\")\n\nif __name__ == \"__main__\":\n    test_file_move_improvements()\n    test_directory_creation()\n    print(\"\\n🎉 所有测试完成!\")"
  },
  {
    "path": "tests/test_float_transform.py",
    "content": "import requests\nimport json\nimport time\n\ndef test_float_transform():\n    \"\"\"测试浮点数类型的transform参数\"\"\"\n    \n    # 1. 先创建一个草稿\n    create_draft_url = \"http://localhost:8000/v1/create_draft\"\n    create_draft_data = {\n        \"width\": 1920,\n        \"height\": 1080\n    }\n    \n    try:\n        print(\"Creating draft...\")\n        create_response = requests.post(create_draft_url, json=create_draft_data)\n        \n        if create_response.status_code != 200:\n            print(f\"Failed to create draft: {create_response.status_code}\")\n            print(create_response.text)\n            return\n            \n        draft_url = create_response.json()[\"draft_url\"]\n        print(f\"Draft created successfully: {draft_url}\")\n        \n        # 2. 添加带浮点数位置变换的字幕\n        add_captions_url = \"http://localhost:8000/v1/add_captions\"\n        captions = [\n            {\n                \"start\": 0,\n                \"end\": 5000000,  # 5秒\n                \"text\": \"测试浮点数字幕位置变换\"\n            }\n        ]\n        \n        add_captions_data = {\n            \"draft_url\": draft_url,\n            \"captions\": json.dumps(captions),\n            \"text_color\": \"#ffffff\",  # 默认白色文本\n            \"font_size\": 16,\n            \"transform_x\": 150.5,  # X轴位置偏移150.5像素\n            \"transform_y\": -75.25   # Y轴位置偏移-75.25像素\n        }\n        \n        print(\"Adding captions with float position transformation...\")\n        print(f\"Setting transform_x={add_captions_data['transform_x']}, transform_y={add_captions_data['transform_y']}\")\n        add_response = requests.post(add_captions_url, json=add_captions_data)\n        \n        if add_response.status_code == 200:\n            result = add_response.json()\n            print(f\"Captions added successfully!\")\n            print(f\"Track ID: {result['track_id']}\")\n            print(f\"Text IDs: {result['text_ids']}\")\n            print(f\"Segment IDs: {result['segment_ids']}\")\n            print(f\"Draft URL: {result['draft_url']}\")\n            print(\"\\n注意：在剪映中验证时，transform_x=150.5应该精确移动150.5像素\")\n        else:\n            print(f\"Failed to add captions: {add_response.status_code}\")\n            print(add_response.text)\n            \n    except Exception as e:\n        print(f\"Error occurred: {e}\")\n        print(\"Make sure the server is running on http://localhost:8000\")\n\n\nif __name__ == \"__main__\":\n    test_float_transform()"
  },
  {
    "path": "tests/test_font_alias_resolution.py",
    "content": "import sys\nimport os\n\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), \"..\")))\n\nfrom src.service.add_captions import resolve_font_type\nfrom src.pyJianYingDraft import FontType\n\n\ndef test_resolve_font_type_by_alias_zhixianghei():\n    \"\"\"支持通过“志向黑”别名解析字体。\"\"\"\n    assert resolve_font_type(\"志向黑\") == FontType.励字志向黑简_特粗\n\n\ndef test_resolve_font_type_by_display_name():\n    \"\"\"支持通过字体展示名解析。\"\"\"\n    assert resolve_font_type(\"励字志向黑简 特粗\") == FontType.励字志向黑简_特粗\n\n\ndef test_resolve_font_type_by_enum_name():\n    \"\"\"支持通过 FontType 枚举字段名解析。\"\"\"\n    assert resolve_font_type(\"励字志向黑简_特粗\") == FontType.励字志向黑简_特粗\n\n\ndef test_resolve_font_type_with_unknown_name():\n    \"\"\"未知字体名称应回退为默认字体（返回 None）。\"\"\"\n    assert resolve_font_type(\"不存在的字体名称\") is None\n"
  },
  {
    "path": "tests/test_font_size.py",
    "content": "import sys\nimport os\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\nfrom src.pyJianYingDraft.text_segment import TextStyle, TextSegment\nfrom src.pyJianYingDraft.time_util import Timerange\n\ndef test_font_size():\n    \"\"\"测试字体大小设置\"\"\"\n    \n    # 创建一个文本样式，指定字体大小为20\n    text_style = TextStyle(\n        size=20.0,\n        color=(1.0, 1.0, 1.0),  # 白色\n        alpha=1.0,\n        align=1,  # 居中\n        auto_wrapping=True\n    )\n    \n    print(f\"创建的TextStyle字体大小: {text_style.size}\")\n    \n    # 创建一个时间范围\n    timerange = Timerange(start=0, duration=5000000)  # 5秒\n    \n    # 创建文本片段\n    text_segment = TextSegment(\n        text=\"测试字体大小\",\n        timerange=timerange,\n        style=text_style\n    )\n    \n    print(f\"TextSegment的style.size: {text_segment.style.size}\")\n    \n    # 导出材质并检查字体大小\n    material_json = text_segment.export_material()\n    content = material_json[\"content\"]\n    print(f\"导出的content: {content}\")\n    \n    # 解析content JSON\n    import json\n    content_data = json.loads(content)\n    styles = content_data[\"styles\"]\n    base_style = styles[0]\n    print(f\"基础样式中的字体大小: {base_style['size']}\")\n\nif __name__ == \"__main__\":\n    test_font_size()"
  },
  {
    "path": "tests/test_font_size_debug.py",
    "content": "def test_font_size_logic():\n    \"\"\"测试字体大小逻辑\"\"\"\n    \n    # 模拟caption数据\n    caption = {\n        \"start\": 0,\n        \"end\": 5000000,\n        \"text\": \"测试字体大小\"\n    }\n    \n    # 模拟函数参数\n    font_size = 15  # add_captions函数的默认值\n    \n    # 模拟add_caption_to_draft中的逻辑\n    size = float(caption.get('font_size', font_size))\n    \n    print(f\"caption: {caption}\")\n    print(f\"font_size参数: {font_size}\")\n    print(f\"计算出的字体大小: {size}\")\n    \n    # 测试当caption中有font_size时的情况\n    caption_with_font_size = {\n        \"start\": 0,\n        \"end\": 5000000,\n        \"text\": \"测试字体大小\",\n        \"font_size\": 20\n    }\n    \n    size2 = float(caption_with_font_size.get('font_size', font_size))\n    \n    print(f\"\\ncaption_with_font_size: {caption_with_font_size}\")\n    print(f\"font_size参数: {font_size}\")\n    print(f\"计算出的字体大小: {size2}\")\n\nif __name__ == \"__main__\":\n    test_font_size_logic()"
  },
  {
    "path": "tests/test_font_size_logic.py",
    "content": "import sys\nimport os\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\ndef test_font_size_logic():\n    \"\"\"测试字体大小逻辑\"\"\"\n    \n    # 模拟caption数据，不指定font_size\n    caption_without_font_size = {\n        \"start\": 0,\n        \"end\": 5000000,\n        \"text\": \"测试字体大小\"\n    }\n    \n    # 模拟函数参数\n    font_size = 20  # add_captions函数的默认值\n    \n    # 模拟add_caption_to_draft中的逻辑\n    # 使用一个特殊值来表示未设置字体大小\n    FONT_SIZE_NOT_SET = -1.0\n    font_size_value = FONT_SIZE_NOT_SET\n    if 'font_size' in caption_without_font_size and caption_without_font_size['font_size'] is not None:\n        font_size_value = float(caption_without_font_size['font_size'])\n    \n    print(f\"caption_without_font_size: {caption_without_font_size}\")\n    print(f\"font_size参数: {font_size}\")\n    print(f\"计算出的字体大小值: {font_size_value}\")\n    print(f\"最终使用的字体大小: {font_size_value if font_size_value != FONT_SIZE_NOT_SET else 8.0}\")\n    \n    # 测试当caption中有font_size时的情况\n    caption_with_font_size = {\n        \"start\": 0,\n        \"end\": 5000000,\n        \"text\": \"测试字体大小\",\n        \"font_size\": 25\n    }\n    \n    font_size_value2 = FONT_SIZE_NOT_SET\n    if 'font_size' in caption_with_font_size and caption_with_font_size['font_size'] is not None:\n        font_size_value2 = float(caption_with_font_size['font_size'])\n    \n    print(f\"\\ncaption_with_font_size: {caption_with_font_size}\")\n    print(f\"font_size参数: {font_size}\")\n    print(f\"计算出的字体大小值: {font_size_value2}\")\n    print(f\"最终使用的字体大小: {font_size_value2}\")\n\nif __name__ == \"__main__\":\n    test_font_size_logic()"
  },
  {
    "path": "tests/test_font_size_not_set.py",
    "content": "import sys\nimport os\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\nfrom src.service.add_captions import add_caption_to_draft\nfrom src.pyJianYingDraft import ScriptFile\n\ndef test_font_size_not_set():\n    \"\"\"测试未设置字体大小的情况\"\"\"\n    \n    # 创建一个模拟的草稿文件对象\n    script = ScriptFile()\n    \n    # 创建一个字幕项，不指定font_size\n    caption = {\n        \"start\": 0,\n        \"end\": 5000000,  # 5秒\n        \"text\": \"测试未设置字体大小\"\n    }\n    \n    try:\n        # 调用add_caption_to_draft函数\n        segment_id, text_id, segment_info = add_caption_to_draft(\n            script=script,\n            track_name=\"test_track\",\n            caption=caption,\n            text_color=\"#ffffff\",\n            font_size=20  # 这是接口级别的默认值\n        )\n        \n        print(f\"成功添加字幕，segment_id: {segment_id}\")\n        print(f\"text_id: {text_id}\")\n        print(f\"segment_info: {segment_info}\")\n        \n        # 检查导出的材质\n        # 获取刚刚添加的文本片段\n        text_segment = None\n        for segment in script.segments.values():\n            if segment.segment_id == segment_id:\n                text_segment = segment\n                break\n        \n        if text_segment:\n            material_json = text_segment.export_material()\n            print(f\"导出的材质: {material_json}\")\n            \n            # 检查content中的size字段\n            import json\n            content_data = json.loads(material_json[\"content\"])\n            styles = content_data[\"styles\"]\n            base_style = styles[0]\n            \n            if \"size\" in base_style:\n                print(f\"基础样式中的字体大小: {base_style['size']}\")\n            else:\n                print(\"基础样式中没有size字段，表示未设置字体大小\")\n        else:\n            print(\"未找到添加的文本片段\")\n            \n    except Exception as e:\n        print(f\"添加字幕时出错: {e}\")\n        import traceback\n        traceback.print_exc()\n\nif __name__ == \"__main__\":\n    test_font_size_not_set()"
  },
  {
    "path": "tests/test_get_audio_duration_api.py",
    "content": "\"\"\"\n测试 get_audio_duration 接口的完整性\n\"\"\"\nimport requests\nimport json\n\ndef test_get_audio_duration_api():\n    \"\"\"测试 get_audio_duration 接口\"\"\"\n    \n    # 服务器地址\n    base_url = \"http://localhost:60000\"\n    api_url = f\"{base_url}/openapi/v1/get_audio_duration\"\n    \n    # 测试数据\n    test_data = {\n        \"mp3_url\": \"https://www.soundjay.com/misc/sounds/bell-ringing-05.wav\"\n    }\n    \n    # 请求头\n    headers = {\n        \"Content-Type\": \"application/json\"\n    }\n    \n    try:\n        print(\"🚀 开始测试 get_audio_duration 接口...\")\n        print(f\"📍 请求URL: {api_url}\")\n        print(f\"📝 请求数据: {json.dumps(test_data, indent=2)}\")\n        \n        # 发送POST请求\n        response = requests.post(api_url, json=test_data, headers=headers, timeout=60)\n        \n        print(f\"📊 响应状态码: {response.status_code}\")\n        print(f\"📄 响应头: {dict(response.headers)}\")\n        \n        if response.status_code == 200:\n            result = response.json()\n            print(f\"✅ 请求成功！\")\n            print(f\"📋 响应数据: {json.dumps(result, indent=2)}\")\n            \n            # 验证响应格式\n            if \"duration\" in result:\n                duration = result[\"duration\"]\n                print(f\"🎵 音频时长: {duration} 微秒 = {duration/1000000:.3f} 秒\")\n                return True\n            else:\n                print(\"❌ 响应中缺少 'duration' 字段\")\n                return False\n        else:\n            print(f\"❌ 请求失败，状态码: {response.status_code}\")\n            print(f\"📄 响应内容: {response.text}\")\n            return False\n            \n    except requests.exceptions.ConnectionError:\n        print(\"❌ 连接失败，请确保服务器已启动 (python main.py)\")\n        return False\n    except requests.exceptions.Timeout:\n        print(\"❌ 请求超时\")\n        return False\n    except Exception as e:\n        print(f\"❌ 测试异常: {str(e)}\")\n        return False\n\nif __name__ == \"__main__\":\n    success = test_get_audio_duration_api()\n    if success:\n        print(\"\\n🎉 get_audio_duration 接口测试通过！\")\n    else:\n        print(\"\\n💥 get_audio_duration 接口测试失败！\")"
  },
  {
    "path": "tests/test_get_text_effects.py",
    "content": "\"\"\"\n测试获取花字效果列表 API\n\"\"\"\nimport sys\nimport os\n\n# 添加项目根目录到 Python 路径\nsys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\n\nfrom src.service.get_text_effects import get_text_effects\n\n\ndef test_get_all_text_effects():\n    \"\"\"测试获取所有花字效果\"\"\"\n    print(\"=\" * 60)\n    print(\"测试：获取所有花字效果 (mode=0)\")\n    print(\"=\" * 60)\n    \n    try:\n        effects = get_text_effects(mode=0)\n        print(f\"\\n✅ 成功获取 {len(effects)} 个花字效果\")\n        \n        # 显示前 20 个\n        print(\"\\n前 20 个花字效果:\")\n        for i, effect in enumerate(effects[:20], 1):\n            vip_tag = \" [VIP]\" if effect.get('is_vip') else \"\"\n            print(f\"  {i}. {effect['name']}{vip_tag} (ID: {effect['effect_id']})\")\n        \n        # 统计 VIP 和免费\n        vip_count = sum(1 for e in effects if e.get('is_vip', False))\n        free_count = len(effects) - vip_count\n        \n        print(f\"\\n📊 统计:\")\n        print(f\"   • VIP 效果：{vip_count} 个\")\n        print(f\"   • 免费效果：{free_count} 个\")\n        print(f\"   • 总计：{len(effects)} 个\")\n        \n    except Exception as e:\n        print(f\"\\n❌ 测试失败：{str(e)}\")\n        import traceback\n        traceback.print_exc()\n\n\ndef test_get_vip_text_effects():\n    \"\"\"测试获取 VIP 花字效果\"\"\"\n    print(\"\\n\" + \"=\" * 60)\n    print(\"测试：获取 VIP 花字效果 (mode=1)\")\n    print(\"=\" * 60)\n    \n    try:\n        effects = get_text_effects(mode=1)\n        print(f\"\\n✅ 成功获取 {len(effects)} 个 VIP 花字效果\")\n        \n        if effects:\n            print(\"\\n前 10 个 VIP 花字效果:\")\n            for i, effect in enumerate(effects[:10], 1):\n                print(f\"  {i}. {effect['name']} (ID: {effect['effect_id']})\")\n        else:\n            print(\"\\nℹ️ 当前没有 VIP 花字效果\")\n        \n    except Exception as e:\n        print(f\"\\n❌ 测试失败：{str(e)}\")\n\n\ndef test_get_free_text_effects():\n    \"\"\"测试获取免费花字效果\"\"\"\n    print(\"\\n\" + \"=\" * 60)\n    print(\"测试：获取免费花字效果 (mode=2)\")\n    print(\"=\" * 60)\n    \n    try:\n        effects = get_text_effects(mode=2)\n        print(f\"\\n✅ 成功获取 {len(effects)} 个免费花字效果\")\n        \n        # 显示前 20 个\n        print(\"\\n前 20 个免费花字效果:\")\n        for i, effect in enumerate(effects[:20], 1):\n            print(f\"  {i}. {effect['name']} (ID: {effect['effect_id']})\")\n        \n        print(f\"\\n📊 总计：{len(effects)} 个免费花字效果\")\n        \n    except Exception as e:\n        print(f\"\\n❌ 测试失败：{str(e)}\")\n\n\ndef test_invalid_mode():\n    \"\"\"测试无效模式\"\"\"\n    print(\"\\n\" + \"=\" * 60)\n    print(\"测试：无效模式 (mode=3)\")\n    print(\"=\" * 60)\n    \n    try:\n        effects = get_text_effects(mode=3)\n        print(f\"\\n❌ 应该抛出异常但没有\")\n    except Exception as e:\n        print(f\"\\n✅ 正确抛出异常：{type(e).__name__}\")\n\n\nif __name__ == \"__main__\":\n    print(\"\\n🚀 开始测试获取花字效果列表 API\\n\")\n    \n    test_get_all_text_effects()\n    test_get_vip_text_effects()\n    test_get_free_text_effects()\n    test_invalid_mode()\n    \n    print(\"\\n\" + \"=\" * 60)\n    print(\"✅ 所有测试完成！\")\n    print(\"=\" * 60)\n"
  },
  {
    "path": "tests/test_imgs_infos_multiple_animations.py",
    "content": "import json\nimport sys\nimport os\n\n# 添加项目根目录到Python路径\nsys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))\n\nfrom src.service.imgs_infos import imgs_infos\n\n\ndef test_multiple_animations_basic():\n    \"\"\"测试基本的多动画功能\"\"\"\n    print(\"测试基本的多动画功能:\")\n    \n    imgs = [\n        \"https://example.com/image1.jpg\",\n        \"https://example.com/image2.jpg\", \n        \"https://example.com/image3.jpg\"\n    ]\n    \n    timelines = [\n        {\"start\": 0, \"end\": 1000000},\n        {\"start\": 1000000, \"end\": 2000000},\n        {\"start\": 2000000, \"end\": 3000000}\n    ]\n    \n    # 测试多个入场动画\n    in_animation = \"淡入|展开|缩放\"\n    in_animation_duration = 500000\n    \n    infos_json = imgs_infos(\n        imgs=imgs,\n        timelines=timelines,\n        in_animation=in_animation,\n        in_animation_duration=in_animation_duration\n    )\n    \n    infos = json.loads(infos_json)\n    print(f\"生成的图片信息: {infos}\")\n    \n    # 验证每个图片都获得了对应的动画\n    assert len(infos) == 3\n    assert infos[0][\"in_animation\"] == \"淡入\"\n    assert infos[1][\"in_animation\"] == \"展开\" \n    assert infos[2][\"in_animation\"] == \"缩放\"\n    assert infos[0][\"in_animation_duration\"] == 500000\n    assert infos[1][\"in_animation_duration\"] == 500000\n    assert infos[2][\"in_animation_duration\"] == 500000\n    \n    print(\"✓ 基本多动画测试通过\")\n\n\ndef test_animation_extension_logic():\n    \"\"\"测试动画扩展逻辑：动画不足时使用最后一个\"\"\"\n    print(\"\\n测试动画扩展逻辑:\")\n    \n    imgs = [\n        \"https://example.com/image1.jpg\",\n        \"https://example.com/image2.jpg\",\n        \"https://example.com/image3.jpg\",\n        \"https://example.com/image4.jpg\"\n    ]\n    \n    timelines = [\n        {\"start\": 0, \"end\": 1000000},\n        {\"start\": 1000000, \"end\": 2000000},\n        {\"start\": 2000000, \"end\": 3000000},\n        {\"start\": 3000000, \"end\": 4000000}\n    ]\n    \n    # 只提供2个动画，但有4张图片\n    in_animation = \"淡入|展开\"\n    in_animation_duration = 500000\n    \n    infos_json = imgs_infos(\n        imgs=imgs,\n        timelines=timelines,\n        in_animation=in_animation,\n        in_animation_duration=in_animation_duration\n    )\n    \n    infos = json.loads(infos_json)\n    print(f\"生成的图片信息: {infos}\")\n    \n    # 验证扩展逻辑：前两个使用指定动画，后两个使用最后一个动画\n    assert len(infos) == 4\n    assert infos[0][\"in_animation\"] == \"淡入\"\n    assert infos[1][\"in_animation\"] == \"展开\"\n    assert infos[2][\"in_animation\"] == \"展开\"  # 使用最后一个动画\n    assert infos[3][\"in_animation\"] == \"展开\"  # 使用最后一个动画\n    \n    print(\"✓ 动画扩展逻辑测试通过\")\n\n\ndef test_excess_animations():\n    \"\"\"测试动画过多时的处理：忽略多余的动画\"\"\"\n    print(\"\\n测试动画过多时的处理:\")\n    \n    imgs = [\n        \"https://example.com/image1.jpg\",\n        \"https://example.com/image2.jpg\"\n    ]\n    \n    timelines = [\n        {\"start\": 0, \"end\": 1000000},\n        {\"start\": 1000000, \"end\": 2000000}\n    ]\n    \n    # 提供3个动画，但只有2张图片\n    in_animation = \"淡入|展开|缩放|旋转\"\n    in_animation_duration = 500000\n    \n    infos_json = imgs_infos(\n        imgs=imgs,\n        timelines=timelines,\n        in_animation=in_animation,\n        in_animation_duration=in_animation_duration\n    )\n    \n    infos = json.loads(infos_json)\n    print(f\"生成的图片信息: {infos}\")\n    \n    # 验证只使用前两个动画\n    assert len(infos) == 2\n    assert infos[0][\"in_animation\"] == \"淡入\"\n    assert infos[1][\"in_animation\"] == \"展开\"\n    # 多余的动画(缩放、旋转)应该被忽略\n    \n    print(\"✓ 动画过多处理测试通过\")\n\n\ndef test_multiple_animation_types():\n    \"\"\"测试多种动画类型同时使用\"\"\"\n    print(\"\\n测试多种动画类型同时使用:\")\n    \n    imgs = [\n        \"https://example.com/image1.jpg\",\n        \"https://example.com/image2.jpg\",\n        \"https://example.com/image3.jpg\"\n    ]\n    \n    timelines = [\n        {\"start\": 0, \"end\": 1000000},\n        {\"start\": 1000000, \"end\": 2000000},\n        {\"start\": 2000000, \"end\": 3000000}\n    ]\n    \n    # 同时测试三种动画类型\n    in_animation = \"淡入|展开|缩放\"\n    in_animation_duration = 500000\n    loop_animation = \"呼吸|旋转|闪烁\"\n    loop_animation_duration = 1000000\n    out_animation = \"淡出|收缩|翻转\"\n    out_animation_duration = 300000\n    \n    infos_json = imgs_infos(\n        imgs=imgs,\n        timelines=timelines,\n        in_animation=in_animation,\n        in_animation_duration=in_animation_duration,\n        loop_animation=loop_animation,\n        loop_animation_duration=loop_animation_duration,\n        out_animation=out_animation,\n        out_animation_duration=out_animation_duration\n    )\n    \n    infos = json.loads(infos_json)\n    print(f\"生成的图片信息: {infos}\")\n    \n    # 验证所有动画类型都正确分配\n    assert len(infos) == 3\n    assert infos[0][\"in_animation\"] == \"淡入\"\n    assert infos[0][\"loop_animation\"] == \"呼吸\"\n    assert infos[0][\"out_animation\"] == \"淡出\"\n    \n    assert infos[1][\"in_animation\"] == \"展开\"\n    assert infos[1][\"loop_animation\"] == \"旋转\"\n    assert infos[1][\"out_animation\"] == \"收缩\"\n    \n    assert infos[2][\"in_animation\"] == \"缩放\"\n    assert infos[2][\"loop_animation\"] == \"闪烁\"\n    assert infos[2][\"out_animation\"] == \"翻转\"\n    \n    # 验证duration正确添加\n    assert infos[0][\"in_animation_duration\"] == 500000\n    assert infos[0][\"loop_animation_duration\"] == 1000000\n    assert infos[0][\"out_animation_duration\"] == 300000\n    \n    print(\"✓ 多种动画类型测试通过\")\n\n\ndef test_backward_compatibility():\n    \"\"\"测试向后兼容性：单个动画仍然正常工作\"\"\"\n    print(\"\\n测试向后兼容性:\")\n    \n    imgs = [\n        \"https://example.com/image1.jpg\",\n        \"https://example.com/image2.jpg\"\n    ]\n    \n    timelines = [\n        {\"start\": 0, \"end\": 1000000},\n        {\"start\": 1000000, \"end\": 2000000}\n    ]\n    \n    # 使用单个动画（原始用法）\n    in_animation = \"淡入\"\n    in_animation_duration = 500000\n    \n    infos_json = imgs_infos(\n        imgs=imgs,\n        timelines=timelines,\n        in_animation=in_animation,\n        in_animation_duration=in_animation_duration\n    )\n    \n    infos = json.loads(infos_json)\n    print(f\"生成的图片信息: {infos}\")\n    \n    # 验证向后兼容性：两个图片都使用同一个动画\n    assert len(infos) == 2\n    assert infos[0][\"in_animation\"] == \"淡入\"\n    assert infos[1][\"in_animation\"] == \"淡入\"\n    assert infos[0][\"in_animation_duration\"] == 500000\n    assert infos[1][\"in_animation_duration\"] == 500000\n    \n    print(\"✓ 向后兼容性测试通过\")\n\n\ndef test_empty_and_none_animations():\n    \"\"\"测试空动画和None值的处理\"\"\"\n    print(\"\\n测试空动画和None值的处理:\")\n    \n    imgs = [\n        \"https://example.com/image1.jpg\",\n        \"https://example.com/image2.jpg\"\n    ]\n    \n    timelines = [\n        {\"start\": 0, \"end\": 1000000},\n        {\"start\": 1000000, \"end\": 2000000}\n    ]\n    \n    # 测试空字符串和None值\n    infos_json = imgs_infos(\n        imgs=imgs,\n        timelines=timelines,\n        in_animation=\"\",  # 空字符串\n        loop_animation=None,  # None值\n        out_animation=\"淡出\"  # 正常值\n    )\n    \n    infos = json.loads(infos_json)\n    print(f\"生成的图片信息: {infos}\")\n    \n    # 验证空动画不添加动画字段\n    assert \"in_animation\" not in infos[0]\n    assert \"in_animation\" not in infos[1]\n    assert \"loop_animation\" not in infos[0]\n    assert \"loop_animation\" not in infos[1]\n    \n    # 验证正常动画正常工作\n    assert infos[0][\"out_animation\"] == \"淡出\"\n    assert infos[1][\"out_animation\"] == \"淡出\"\n    \n    print(\"✓ 空动画和None值处理测试通过\")\n\n\ndef run_all_tests():\n    \"\"\"运行所有测试\"\"\"\n    print(\"开始测试imgs_infos多动画功能...\")\n    print(\"=\" * 50)\n    \n    try:\n        test_multiple_animations_basic()\n        test_animation_extension_logic()\n        test_excess_animations()\n        test_multiple_animation_types()\n        test_backward_compatibility()\n        test_empty_and_none_animations()\n        \n        print(\"\\n\" + \"=\" * 50)\n        print(\"🎉 所有测试通过!\")\n        return True\n    except Exception as e:\n        print(f\"\\n❌ 测试失败: {e}\")\n        import traceback\n        traceback.print_exc()\n        return False\n\n\nif __name__ == \"__main__\":\n    success = run_all_tests()\n    sys.exit(0 if success else 1)"
  },
  {
    "path": "tests/test_keyframe_value.py",
    "content": "\"\"\"keyframe_value 归一化工具单元测试。\"\"\"\nimport os\nimport sys\n\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), \"..\")))\n\nfrom src.utils.keyframe_value import normalize_keyframe_value\n\n\ndef test_normalize_pixel_position_x():\n    assert normalize_keyframe_value(\"KFTypePositionX\", -2608.0, width=1920) == -2608.0 / 1920\n    assert normalize_keyframe_value(\"KFTypePositionX\", -699.0, width=1920) == -699.0 / 1920\n\n\ndef test_normalize_already_normalized_position_x():\n    assert normalize_keyframe_value(\"KFTypePositionX\", -0.1, width=1920) == -0.1\n    assert normalize_keyframe_value(\"KFTypePositionX\", 1.0, width=1920) == 1.0\n\n\ndef test_normalize_pixel_position_y():\n    assert normalize_keyframe_value(\"KFTypePositionY\", 540.0, height=1080) == 0.5\n\n\ndef test_keyframes_infos_assume_pixel_normalizes_small_values():\n    assert normalize_keyframe_value(\n        \"KFTypePositionX\", 1.0, width=1920, assume_pixel=True\n    ) == 1.0 / 1920\n\n\ndef test_rotation_scale_alpha_unchanged():\n    canvas = dict(width=1920, height=1080)\n    assert normalize_keyframe_value(\"KFTypeRotation\", 90.0, **canvas) == 90.0\n    assert normalize_keyframe_value(\"UNIFORM_SCALE\", 1.3, **canvas) == 1.3\n    assert normalize_keyframe_value(\"KFTypeAlpha\", 0.5, **canvas) == 0.5\n\n\ndef test_rotation_scale_alpha_unchanged_with_assume_pixel():\n    canvas = dict(width=1920, height=1080, assume_pixel=True)\n    assert normalize_keyframe_value(\"KFTypeRotation\", 45.0, **canvas) == 45.0\n    assert normalize_keyframe_value(\"UNIFORM_SCALE\", 1.5, **canvas) == 1.5\n    assert normalize_keyframe_value(\"KFTypeAlpha\", 0.8, **canvas) == 0.8\n"
  },
  {
    "path": "tests/test_keyword_font_size.py",
    "content": "import sys\nimport os\nimport json\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\nfrom src.service.add_captions import parse_captions_data, apply_keyword_highlight\nfrom src.pyJianYingDraft.text_segment import TextSegment, TextStyle, Timerange\n\n\ndef test_keyword_font_size_parsing():\n    \"\"\"测试keyword_font_size参数解析\"\"\"\n    print(\"Testing keyword_font_size parameter parsing...\")\n    \n    # 测试数据\n    test_captions = [\n        {\n            \"start\": 0,\n            \"end\": 10000000,\n            \"text\": \"你好，剪映\",\n            \"keyword\": \"剪映\",\n            \"keyword_font_size\": 20  # 设置关键词字体大小\n        },\n        {\n            \"start\": 10000000,\n            \"end\": 20000000,\n            \"text\": \"欢迎使用剪映字幕功能\",\n            \"keyword\": \"功能\",\n            \"keyword_font_size\": 18  # 设置关键词字体大小\n        }\n    ]\n    \n    # 将测试数据转换为JSON字符串\n    captions_json = json.dumps(test_captions)\n    \n    # 解析字幕数据\n    parsed_captions = parse_captions_data(captions_json)\n    \n    # 验证解析结果\n    assert len(parsed_captions) == 2\n    assert parsed_captions[0][\"keyword_font_size\"] == 20\n    assert parsed_captions[1][\"keyword_font_size\"] == 18\n    print(\"✓ keyword_font_size parameter parsing test passed\")\n\n\ndef test_keyword_font_size_application():\n    \"\"\"测试keyword_font_size参数应用\"\"\"\n    print(\"Testing keyword_font_size parameter application...\")\n    \n    # 创建一个文本片段\n    text_segment = TextSegment(\n        text=\"你好，剪映\",\n        timerange=Timerange(start=0, duration=5000000),\n        style=TextStyle(size=15.0)  # 默认字体大小为15\n    )\n    \n    # 应用关键词高亮，指定关键词字体大小为20\n    apply_keyword_highlight(text_segment, \"剪映\", (1.0, 0.0, 0.0), 20.0)\n    \n    # 验证额外样式是否正确应用\n    assert len(text_segment.extra_styles) == 1\n    highlight_style = text_segment.extra_styles[0]\n    assert highlight_style[\"size\"] == 20.0  # 验证关键词字体大小是否为20\n    assert highlight_style[\"range\"] == [3, 5]  # 验证关键词位置是否正确\n    print(\"✓ keyword_font_size parameter application test passed\")\n\n\ndef test_keyword_font_size_default():\n    \"\"\"测试keyword_font_size参数默认值\"\"\"\n    print(\"Testing keyword_font_size parameter default value...\")\n    \n    # 创建一个文本片段\n    text_segment = TextSegment(\n        text=\"你好，剪映\",\n        timerange=Timerange(start=0, duration=5000000),\n        style=TextStyle(size=15.0)  # 默认字体大小为15\n    )\n    \n    # 应用关键词高亮，不指定关键词字体大小，应该使用默认值\n    apply_keyword_highlight(text_segment, \"剪映\", (1.0, 0.0, 0.0))\n    \n    # 验证额外样式是否正确应用\n    assert len(text_segment.extra_styles) == 1\n    highlight_style = text_segment.extra_styles[0]\n    assert highlight_style[\"size\"] == 15.0  # 验证关键词字体大小是否为默认值15\n    print(\"✓ keyword_font_size parameter default value test passed\")\n\n\nif __name__ == \"__main__\":\n    print(\"Running keyword_font_size tests...\")\n    test_keyword_font_size_parsing()\n    test_keyword_font_size_application()\n    test_keyword_font_size_default()\n    print(\"All tests passed!\")"
  },
  {
    "path": "tests/test_latest_commit_features.py",
    "content": "\"\"\"\n单元测试：验证最近一次提交的新功能\n测试内容：\n1. 主轨道吸附 (maintrack_adsorb)\n2. 混合模式 (MixMode)\n3. 音频淡入淡出 (AudioFade for VideoSegment)\n4. 新增滤镜和字体\n\"\"\"\n\nimport unittest\nimport sys\nimport os\n\n# 添加 src 到路径\nsys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src'))\n\nfrom pyJianYingDraft import DraftFolder, ScriptFile\nfrom pyJianYingDraft.video_segment import VideoSegment, MixMode\nfrom pyJianYingDraft.segment import AudioFade\nfrom pyJianYingDraft.metadata import FilterType, FontType\nfrom pyJianYingDraft.metadata.mix_mode_meta import MixModeType\nfrom pyJianYingDraft.time_util import Timerange\nfrom pyJianYingDraft.track import TrackType\n\n\nclass TestMaintrackAdsorb(unittest.TestCase):\n    \"\"\"测试主轨道吸附功能\"\"\"\n    \n    def test_maintrack_adsorb_default_true(self):\n        \"\"\"测试默认启用主轨道吸附\"\"\"\n        script = ScriptFile(1920, 1080, 30, maintrack_adsorb=True)\n        self.assertTrue(script.maintrack_adsorb)\n    \n    def test_maintrack_adsorb_false(self):\n        \"\"\"测试禁用主轨道吸附\"\"\"\n        script = ScriptFile(1920, 1080, 30, maintrack_adsorb=False)\n        self.assertFalse(script.maintrack_adsorb)\n    \n    def test_maintrack_adsorb_in_export(self):\n        \"\"\"测试主轨道吸附配置正确导出到 JSON\"\"\"\n        script = ScriptFile(1920, 1080, 30, maintrack_adsorb=True)\n        json_str = script.dumps()\n        self.assertIn('\"maintrack_adsorb\": true', json_str)\n\n\nclass TestMixMode(unittest.TestCase):\n    \"\"\"测试混合模式功能\"\"\"\n    \n    def test_mix_mode_creation(self):\n        \"\"\"测试混合模式对象创建\"\"\"\n        mix_mode = MixMode(MixModeType.正片叠底.value)\n        self.assertIsNotNone(mix_mode.global_id)\n        self.assertEqual(mix_mode.effect_meta.name, \"正片叠底\")\n        self.assertEqual(mix_mode.apply_target_type, 0)\n    \n    def test_mix_mode_export_json(self):\n        \"\"\"测试混合模式 JSON 导出\"\"\"\n        mix_mode = MixMode(MixModeType.滤色.value)\n        json_data = mix_mode.export_json()\n        \n        self.assertEqual(json_data[\"type\"], \"mix_mode\")\n        self.assertEqual(json_data[\"name\"], \"滤色\")\n        self.assertEqual(json_data[\"value\"], 1.0)\n        self.assertEqual(json_data[\"apply_target_type\"], 0)\n        self.assertEqual(json_data[\"platform\"], \"all\")\n        self.assertIn(\"id\", json_data)\n        self.assertIn(\"effect_id\", json_data)\n        self.assertIn(\"resource_id\", json_data)\n    \n    def test_video_segment_set_mix_mode(self):\n        \"\"\"测试为视频片段设置混合模式\"\"\"\n        # 创建一个模拟的视频片段（使用假路径）\n        timerange = Timerange(0, 1000000)  # 1秒\n        \n        # 由于需要真实视频文件，这里只测试对象创建逻辑\n        # 实际测试需要在集成测试中进行\n        pass\n\n\nclass TestVideoSegmentAudioFade(unittest.TestCase):\n    \"\"\"测试视频片段的音频淡入淡出功能\"\"\"\n    \n    def test_audio_fade_creation(self):\n        \"\"\"测试音频淡入淡出对象创建\"\"\"\n        fade = AudioFade(500000, 500000)  # 0.5秒淡入，0.5秒淡出\n        self.assertIsNotNone(fade.fade_id)\n        self.assertEqual(fade.in_duration, 500000)\n        self.assertEqual(fade.out_duration, 500000)\n    \n    def test_audio_fade_export_json(self):\n        \"\"\"测试音频淡入淡出 JSON 导出\"\"\"\n        fade = AudioFade(100000, 200000)\n        json_data = fade.export_json()\n        \n        self.assertEqual(json_data[\"type\"], \"audio_fade\")\n        self.assertEqual(json_data[\"fade_in_duration\"], 100000)\n        self.assertEqual(json_data[\"fade_out_duration\"], 200000)\n        self.assertEqual(json_data[\"fade_type\"], 0)\n        self.assertIn(\"id\", json_data)\n\n\nclass TestNewFilters(unittest.TestCase):\n    \"\"\"测试新增滤镜\"\"\"\n    \n    def test_filter_has_resource_id(self):\n        \"\"\"测试滤镜有资源 ID\"\"\"\n        filter_meta = FilterType.黑白记忆\n        self.assertIsNotNone(filter_meta.value.resource_id)\n        self.assertIsNotNone(filter_meta.value.effect_id)\n    \n    def test_filter_with_params(self):\n        \"\"\"测试带参数的滤镜\"\"\"\n        # 黑白记忆滤镜有 effects_adjust_filter 参数\n        filter_meta = FilterType.黑白记忆\n        self.assertTrue(len(filter_meta.value.params) > 0)\n        param = filter_meta.value.params[0]\n        self.assertEqual(param.name, \"effects_adjust_filter\")\n\n\nclass TestNewFonts(unittest.TestCase):\n    \"\"\"测试新增字体\"\"\"\n    \n    def test_new_fonts_exist(self):\n        \"\"\"测试新增字体存在\"\"\"\n        # 南廱明體\n        self.assertTrue(hasattr(FontType, '南廱明體'))\n        font1 = FontType.南廱明體\n        self.assertIsNotNone(font1.value.resource_id)\n        \n        # 蜡笔体\n        self.assertTrue(hasattr(FontType, '蜡笔体'))\n        font2 = FontType.蜡笔体\n        self.assertIsNotNone(font2.value.resource_id)\n\n\nclass TestScriptMaterial(unittest.TestCase):\n    \"\"\"测试 ScriptMaterial 对新材料的支持\"\"\"\n    \n    def test_mix_modes_list_exists(self):\n        \"\"\"测试 mix_modes 列表存在\"\"\"\n        from pyJianYingDraft.script_file import ScriptMaterial\n        materials = ScriptMaterial()\n        self.assertTrue(hasattr(materials, 'mix_modes'))\n        self.assertIsInstance(materials.mix_modes, list)\n    \n    def test_mix_mode_in_check(self):\n        \"\"\"测试 mix_mode 的 __contains__ 检查\"\"\"\n        from pyJianYingDraft.script_file import ScriptMaterial\n        materials = ScriptMaterial()\n        mix_mode = MixMode(MixModeType.柔光.value)\n        \n        # 初始不应包含\n        self.assertNotIn(mix_mode, materials)\n        \n        # 添加后应包含\n        materials.mix_modes.append(mix_mode)\n        self.assertIn(mix_mode, materials)\n\n\nclass TestIntegration(unittest.TestCase):\n    \"\"\"集成测试 - 验证完整工作流程\"\"\"\n    \n    def test_script_file_creation_with_maintrack_adsorb(self):\n        \"\"\"测试创建带主轨道吸附配置的 ScriptFile\"\"\"\n        script = ScriptFile(1920, 1080, 30, maintrack_adsorb=True)\n        script.add_track(TrackType.video)\n        \n        # 验证 dumps 输出包含 maintrack_adsorb\n        json_str = script.dumps()\n        self.assertIn('\"maintrack_adsorb\": true', json_str)\n    \n    def test_export_json_structure(self):\n        \"\"\"测试导出 JSON 结构完整性\"\"\"\n        script = ScriptFile(1920, 1080, 30, maintrack_adsorb=False)\n        json_str = script.dumps()\n        \n        # 验证基本字段存在\n        self.assertIn('\"fps\": 30', json_str)\n        self.assertIn('\"width\": 1920', json_str)\n        self.assertIn('\"height\": 1080', json_str)\n        self.assertIn('\"maintrack_adsorb\": false', json_str)\n\n\nclass TestBackwardCompatibility(unittest.TestCase):\n    \"\"\"向后兼容性测试\"\"\"\n    \n    def test_script_file_init_requires_maintrack_adsorb(self):\n        \"\"\"测试 ScriptFile 初始化需要 maintrack_adsorb 参数\"\"\"\n        # 这是有意的设计，强制用户明确指定主轨道吸附设置\n        with self.assertRaises(TypeError):\n            ScriptFile(1920, 1080, 30)  # 缺少 maintrack_adsorb\n    \n    def test_mix_mode_types_available(self):\n        \"\"\"测试所有混合模式类型可用\"\"\"\n        expected_modes = [\n            \"正片叠底\", \"颜色减淡\", \"颜色加深\", \"线性加深\",\n            \"柔光\", \"强光\", \"滤色\", \"叠加\", \"变亮\", \"变暗\"\n        ]\n        for mode_name in expected_modes:\n            self.assertTrue(\n                hasattr(MixModeType, mode_name),\n                f\"MixModeType 缺少 {mode_name}\"\n            )\n\n\nif __name__ == '__main__':\n    unittest.main(verbosity=2)\n"
  },
  {
    "path": "tests/test_logic_validation.py",
    "content": "\"\"\"\n这个文件用于验证我们对add_videos接口修复的逻辑是否正确\n\"\"\"\n\ndef test_duration_handling_logic():\n    \"\"\"\n    测试duration处理逻辑\n    \n    场景：\n    1. 视频实际时长为2000000微秒(2秒)\n    2. 用户指定duration为3000000微秒(3秒)\n    3. start=3000000, end=6000000 (播放时长3秒)\n    \n    预期行为：\n    - 视频正常播放前2秒\n    - 第3秒显示视频最后一帧（静态画面）\n    \"\"\"\n    \n    # 模拟视频信息\n    video_info = {\n        \"video_url\": \"https://example.com/video.mp4\",\n        \"duration\": 3000000,  # 用户指定的总时长\n        \"start\": 3000000,     # 在时间轴上的开始时间\n        \"end\": 6000000,       # 在时间轴上的结束时间\n        \"width\": 576,\n        \"height\": 1024\n    }\n    \n    # 实际视频时长（从文件中获取）\n    actual_video_duration = 2000000  # 2秒\n    \n    print(\"输入参数:\")\n    print(f\"  video_url: {video_info['video_url']}\")\n    print(f\"  指定duration: {video_info['duration']} 微秒 ({video_info['duration']/1000000}秒)\")\n    print(f\"  start: {video_info['start']} 微秒 ({video_info['start']/1000000}秒)\")\n    print(f\"  end: {video_info['end']} 微秒 ({video_info['end']/1000000}秒)\")\n    print(f\"  实际视频时长: {actual_video_duration} 微秒 ({actual_video_duration/1000000}秒)\")\n    \n    # 计算播放时长\n    play_duration = video_info['end'] - video_info['start']\n    print(f\"\\n计算结果:\")\n    print(f\"  播放时长 (end-start): {play_duration} 微秒 ({play_duration/1000000}秒)\")\n    \n    # 检查是否超出实际时长\n    if video_info['duration'] > actual_video_duration:\n        extension_duration = video_info['duration'] - actual_video_duration\n        print(f\"  超出时长: {extension_duration} 微秒 ({extension_duration/1000000}秒)\")\n        print(f\"  结论: 视频播放{actual_video_duration/1000000}秒后，显示静态画面{extension_duration/1000000}秒\")\n    else:\n        print(f\"  结论: 视频按时长正常播放\")\n    \n    # 验证我们的解决方案\n    print(f\"\\n解决方案验证:\")\n    print(f\"  使用source_timerange: [0, {min(video_info['duration'], actual_video_duration)}]\")\n    print(f\"  使用target_timerange: [{video_info['start']}, {play_duration}]\")\n    print(f\"  保持speed=1.0，确保视频以原始速度播放\")\n    \n    # 验证参数\n    assert video_info['duration'] == 3000000\n    assert play_duration == 3000000\n    assert actual_video_duration == 2000000\n    assert video_info['duration'] > actual_video_duration\n    \n    print(\"\\n✅ 逻辑验证通过!\")\n\nif __name__ == \"__main__\":\n    test_duration_handling_logic()"
  },
  {
    "path": "tests/test_media_utils.py",
    "content": "import sys\nimport os\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\nfrom src.utils.media import get_media_duration, get_media_duration_formatted\n\n\ndef test_media_duration():\n    \"\"\"测试媒体时长获取功能\"\"\"\n    # 测试不存在的文件\n    print(\"测试不存在的文件:\")\n    duration = get_media_duration(\"nonexistent.mp3\")\n    print(f\"时长: {duration}\")\n    \n    # 测试存在的音频文件\n    print(\"\\n测试存在的音频文件:\")\n    duration = get_media_duration(\"test_audio.wav\")\n    print(f\"WAV文件时长(微秒): {duration}\")\n    \n    formatted = get_media_duration_formatted(\"test_audio.wav\")\n    print(f\"WAV文件时长(格式化): {formatted}\")\n    \n    # 清理测试文件\n    if os.path.exists(\"test_audio.wav\"):\n        os.remove(\"test_audio.wav\")\n        print(\"已清理测试文件\")\n\n\nif __name__ == \"__main__\":\n    test_media_duration()"
  },
  {
    "path": "tests/test_middleware.py",
    "content": "import os\nimport asyncio\nfrom fastapi import FastAPI, Request\nfrom src.middlewares import init_env_middleware\nfrom src.customException.setttings import DRAFT_DIR\n\n# 创建测试应用\napp = FastAPI()\n\n# 注册中间件\napp.middleware(\"http\")(init_env_middleware)\n\n# 测试路由\n@app.get(\"/\")\nasync def test(request: Request):\n    return {\n        \"message\": \"测试成功\",\n        \"draft_dir\": os.environ.get(\"DRAFT_DIR\"),\n        \"today_draft_dir\": os.environ.get(\"TODAY_DRAFT_DIR\"),\n        \"dir_exists\": os.path.exists(DRAFT_DIR)\n    }\n\n# 运行测试\nif __name__ == \"__main__\":\n    import uvicorn\n    print(\"启动测试服务器...\")\n    print(f\"草稿目录: {DRAFT_DIR}\")\n    uvicorn.run(app, host=\"0.0.0.0\", port=8000)"
  },
  {
    "path": "tests/test_param_pass.py",
    "content": "import requests\n\n\ndef test_create_draft_with_custom_params():\n    \"\"\"测试使用自定义参数创建草稿\"\"\"\n    # 测试不同的参数值\n    test_cases = [\n        (1080, 1920),  # 默认值\n        (720, 1280),   # 720p\n        (2160, 3840)   # 4K\n    ]\n\n    # 假设API运行在本地8000端口\n    base_url = \"http://localhost:60000\"\n    endpoint = \"/openapi/v1/create_draft\"\n    url = f\"{base_url}{endpoint}\"\n\n    for height, width in test_cases:\n        print(f\"Testing with height={height}, width={width}\")\n        # 使用JSON body传递参数\n        try:\n            response = requests.post(\n                url,\n                json={\"height\": height, \"width\": width}\n            )\n            print(f\"Response status code: {response.status_code}\")\n            print(f\"Response body: {response.json()}\")\n            \n            if response.status_code != 200:\n                print(f\"Error: Request failed with status code {response.status_code}\")\n                continue\n\n            if \"message\" not in response.json() or \"draft_id\" not in response.json():\n                print(\"Error: Response missing required fields\")\n                continue\n\n            if response.json()[\"message\"] != \"草稿创建成功\":\n                print(f\"Error: Unexpected message: {response.json()['message']}\")\n                continue\n\n            print(\"Test passed!\")\n        except Exception as e:\n            print(f\"Error occurred: {e}\")\n            print(\"Make sure the server is running on http://localhost:8000\")\n\n\nif __name__ == \"__main__\":\n    test_create_draft_with_custom_params()"
  },
  {
    "path": "tests/test_parse_video_data.py",
    "content": "import json\n\ndef parse_video_data(json_str: str) -> list:\n    \"\"\"\n    解析视频数据的JSON字符串，处理可选字段的默认值\n    这是add_videos.py中parse_video_data函数的简化版本，用于测试\n    \"\"\"\n    try:\n        # 解析JSON字符串\n        data = json.loads(json_str)\n    except json.JSONDecodeError as e:\n        raise Exception(f\"JSON parse error: {e.msg}\")\n    \n    # 确保输入是列表\n    if not isinstance(data, list):\n        raise Exception(\"video_infos should be a list\")\n    \n    result = []\n    \n    for i, item in enumerate(data):\n        if not isinstance(item, dict):\n            raise Exception(f\"the {i}th item should be a dict\")\n        \n        # 检查必选字段\n        required_fields = [\"video_url\", \"width\", \"height\", \"start\", \"end\"]\n        missing_fields = [field for field in required_fields if field not in item]\n        \n        if missing_fields:\n            raise Exception(f\"the {i}th item is missing required fields: {', '.join(missing_fields)}\")\n        \n        # 如果没有提供duration，则计算为end-start\n        duration = item.get(\"duration\", item[\"end\"] - item[\"start\"])\n        \n        # 创建处理后的对象，设置默认值\n        processed_item = {\n            \"video_url\": item[\"video_url\"],\n            \"width\": item[\"width\"],\n            \"height\": item[\"height\"],\n            \"start\": item[\"start\"],\n            \"end\": item[\"end\"],\n            \"duration\": duration,\n            \"mask\": item.get(\"mask\", None),  # 默认值 None\n            \"transition\": item.get(\"transition\", None),  # 默认值 None\n            \"transition_duration\": item.get(\"transition_duration\", 500000),  # 默认值 500000\n            \"volume\": item.get(\"volume\", 1.0)  # 默认值 1.0\n        }\n        \n        # 验证数值范围\n        if processed_item[\"volume\"] < 0 or processed_item[\"volume\"] > 1:\n            # 音量值必须在[0, 1]范围内，给默认值\n            processed_item[\"volume\"] = 1.0\n        \n        if processed_item[\"transition_duration\"] < 0:\n            # 转场持续时间必须为非负数，给默认值\n            processed_item[\"transition_duration\"] = 500000\n        \n        result.append(processed_item)\n    \n    return result\n\ndef test_parse_video_data_with_duration():\n    \"\"\"测试解析带duration参数的视频数据\"\"\"\n    \n    # 测试数据：指定duration与实际播放时长不同\n    video_infos = [\n        {\n            \"video_url\": \"https://example.com/video1.mp4\",\n            \"width\": 1920,\n            \"height\": 1080,\n            \"start\": 0,\n            \"end\": 3000000,  # 3秒\n            \"duration\": 6000000,  # 指定6秒，比实际播放时长长\n            \"volume\": 0.8\n        },\n        {\n            \"video_url\": \"https://example.com/video2.mp4\",\n            \"width\": 1280,\n            \"height\": 720,\n            \"start\": 3000000,  # 从第3秒开始\n            \"end\": 5000000,    # 到第5秒结束\n            \"duration\": 1000000,  # 指定1秒，比实际播放时长短\n            \"volume\": 1.0\n        },\n        # 测试不提供duration字段的情况\n        {\n            \"video_url\": \"https://example.com/video3.mp4\",\n            \"width\": 1920,\n            \"height\": 1080,\n            \"start\": 5000000,  # 从第5秒开始\n            \"end\": 8000000,    # 到第8秒结束\n            \"volume\": 0.5\n        }\n    ]\n    \n    json_str = json.dumps(video_infos)\n    parsed_videos = parse_video_data(json_str)\n    \n    print(\"Parsed video data:\")\n    for i, video in enumerate(parsed_videos):\n        print(f\"Video {i+1}:\")\n        print(f\"  URL: {video['video_url']}\")\n        print(f\"  Width: {video['width']}\")\n        print(f\"  Height: {video['height']}\")\n        print(f\"  Start: {video['start']}\")\n        print(f\"  End: {video['end']}\")\n        print(f\"  Duration: {video['duration']}\")\n        print(f\"  Play Duration (end-start): {video['end'] - video['start']}\")\n        print(f\"  Volume: {video['volume']}\")\n        print()\n    \n    # 验证第一个视频：指定duration为6秒，播放时长为3秒\n    assert parsed_videos[0]['duration'] == 6000000\n    assert parsed_videos[0]['end'] - parsed_videos[0]['start'] == 3000000\n    \n    # 验证第二个视频：指定duration为1秒，播放时长为2秒\n    assert parsed_videos[1]['duration'] == 1000000\n    assert parsed_videos[1]['end'] - parsed_videos[1]['start'] == 2000000\n    \n    # 验证第三个视频：未指定duration，应该等于end-start\n    assert parsed_videos[2]['duration'] == 3000000\n    assert parsed_videos[2]['end'] - parsed_videos[2]['start'] == 3000000\n    \n    print(\"All tests passed!\")\n\nif __name__ == \"__main__\":\n    test_parse_video_data_with_duration()"
  },
  {
    "path": "tests/test_search_sticker.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\n\"\"\"\n测试 search_sticker 功能\n\"\"\"\n\nimport sys\nimport os\n\n# 添加项目根目录到 Python 路径\nsys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\n\nfrom src.service.search_sticker import search_sticker\n\n\ndef test_search_sticker():\n    \"\"\"测试搜索贴纸功能\"\"\"\n    \n    print(\"测试搜索贴纸功能\")\n    \n    # 测试正常搜索\n    print(\"\\n1. 测试正常搜索 '梦幻':\")\n    result = search_sticker(\"梦幻\")\n    print(f\"   找到 {len(result)} 条记录\")\n    if result:\n        print(f\"   第一条记录标题: {result[0]['title']}\")\n    \n    # 测试搜索不到内容的情况\n    print(\"\\n2. 测试搜索不存在的关键词 '不存在的关键词':\")\n    result = search_sticker(\"不存在的关键词\")\n    print(f\"   找到 {len(result)} 条记录（应该是随机的50条）\")\n    if result:\n        print(f\"   第一条记录标题: {result[0]['title']}\")\n    \n    # 测试空关键词\n    print(\"\\n3. 测试空关键词:\")\n    result = search_sticker(\"\")\n    print(f\"   找到 {len(result)} 条记录\")\n    if len(result) > 50:\n        print(\"   应该只返回前50条记录\")\n    else:\n        print(f\"   返回了 {len(result)} 条记录\")\n    \n    print(\"\\n测试完成!\")\n\n\nif __name__ == \"__main__\":\n    test_search_sticker()"
  },
  {
    "path": "tests/test_search_sticker_basic.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\n\"\"\"\n基本测试 search_sticker 功能\n\"\"\"\n\nimport json\nimport random\nimport os\n\n\ndef search_sticker(keyword: str, sticker_config_path: str) -> list:\n    \"\"\"\n    搜索贴纸的业务逻辑（简化版）\n    \n    Args:\n        keyword: 搜索关键词\n        sticker_config_path: 贴纸配置文件路径\n        \n    Returns:\n        list: 贴纸数据列表，最多返回50条记录\n    \"\"\"\n    print(f\"Searching stickers with keyword: {keyword}\")\n    \n    # 从配置文件中读取贴纸数据\n    try:\n        with open(sticker_config_path, 'r', encoding='utf-8') as f:\n            sticker_data = json.load(f)\n    except FileNotFoundError:\n        print(f\"Sticker config file not found: {sticker_config_path}\")\n        return []\n    except json.JSONDecodeError as e:\n        print(f\"Failed to parse sticker config file: {e}\")\n        return []\n    except Exception as e:\n        print(f\"Failed to read sticker config file: {e}\")\n        return []\n    \n    # 根据关键词过滤数据（简单匹配标题）\n    filtered_data = []\n    for item in sticker_data:\n        if keyword in item[\"title\"]:\n            filtered_data.append(item)\n    \n    print(f\"Found {len(filtered_data)} stickers matching keyword: {keyword}\")\n    \n    # 如果没有找到匹配的贴纸，随机返回50条记录\n    if not filtered_data:\n        print(\"No matching stickers found, returning 50 random stickers\")\n        # 确保不会超出总数据量\n        sample_size = min(50, len(sticker_data))\n        filtered_data = random.sample(sticker_data, sample_size)\n    \n    # 如果找到的贴纸超过50条，只返回前50条\n    if len(filtered_data) > 50:\n        print(f\"Too many matching stickers ({len(filtered_data)}), returning only 50\")\n        filtered_data = filtered_data[:50]\n    \n    return filtered_data\n\n\ndef test_search_sticker():\n    \"\"\"测试搜索贴纸功能\"\"\"\n    \n    print(\"测试搜索贴纸功能\")\n    \n    # 设置贴纸配置文件路径\n    sticker_config_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), \"config\", \"sticker.json\")\n    \n    # 测试正常搜索\n    print(\"\\n1. 测试正常搜索 '梦幻':\")\n    result = search_sticker(\"梦幻\", sticker_config_path)\n    print(f\"   找到 {len(result)} 条记录\")\n    if result:\n        print(f\"   第一条记录标题: {result[0]['title']}\")\n    \n    # 测试搜索不到内容的情况\n    print(\"\\n2. 测试搜索不存在的关键词 '不存在的关键词':\")\n    result = search_sticker(\"不存在的关键词\", sticker_config_path)\n    print(f\"   找到 {len(result)} 条记录（应该是随机的50条）\")\n    if result:\n        print(f\"   第一条记录标题: {result[0]['title']}\")\n    \n    # 测试空关键词\n    print(\"\\n3. 测试空关键词:\")\n    result = search_sticker(\"\", sticker_config_path)\n    print(f\"   找到 {len(result)} 条记录\")\n    if len(result) > 50:\n        print(\"   应该只返回前50条记录\")\n    else:\n        print(f\"   返回了 {len(result)} 条记录\")\n    \n    print(\"\\n测试完成!\")\n\n\nif __name__ == \"__main__\":\n    test_search_sticker()"
  },
  {
    "path": "tests/test_search_sticker_simple.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\n\"\"\"\n简化测试 search_sticker 功能\n\"\"\"\n\nimport sys\nimport os\nimport json\nimport random\nimport config\n\n# 添加项目根目录到 Python 路径\nsys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\n\n\ndef search_sticker(keyword: str) -> list:\n    \"\"\"\n    搜索贴纸的业务逻辑（简化版）\n    \n    Args:\n        keyword: 搜索关键词\n        \n    Returns:\n        list: 贴纸数据列表，最多返回50条记录\n    \"\"\"\n    print(f\"Searching stickers with keyword: {keyword}\")\n    \n    # 从配置文件中读取贴纸数据\n    try:\n        with open(config.STICKER_CONFIG_PATH, 'r', encoding='utf-8') as f:\n            sticker_data = json.load(f)\n    except FileNotFoundError:\n        print(f\"Sticker config file not found: {config.STICKER_CONFIG_PATH}\")\n        return []\n    except json.JSONDecodeError as e:\n        print(f\"Failed to parse sticker config file: {e}\")\n        return []\n    except Exception as e:\n        print(f\"Failed to read sticker config file: {e}\")\n        return []\n    \n    # 根据关键词过滤数据（简单匹配标题）\n    filtered_data = []\n    for item in sticker_data:\n        if keyword in item[\"title\"]:\n            filtered_data.append(item)\n    \n    print(f\"Found {len(filtered_data)} stickers matching keyword: {keyword}\")\n    \n    # 如果没有找到匹配的贴纸，随机返回50条记录\n    if not filtered_data:\n        print(\"No matching stickers found, returning 50 random stickers\")\n        # 确保不会超出总数据量\n        sample_size = min(50, len(sticker_data))\n        filtered_data = random.sample(sticker_data, sample_size)\n    \n    # 如果找到的贴纸超过50条，只返回前50条\n    if len(filtered_data) > 50:\n        print(f\"Too many matching stickers ({len(filtered_data)}), returning only 50\")\n        filtered_data = filtered_data[:50]\n    \n    return filtered_data\n\n\ndef test_search_sticker():\n    \"\"\"测试搜索贴纸功能\"\"\"\n    \n    print(\"测试搜索贴纸功能\")\n    \n    # 测试正常搜索\n    print(\"\\n1. 测试正常搜索 '梦幻':\")\n    result = search_sticker(\"梦幻\")\n    print(f\"   找到 {len(result)} 条记录\")\n    if result:\n        print(f\"   第一条记录标题: {result[0]['title']}\")\n    \n    # 测试搜索不到内容的情况\n    print(\"\\n2. 测试搜索不存在的关键词 '不存在的关键词':\")\n    result = search_sticker(\"不存在的关键词\")\n    print(f\"   找到 {len(result)} 条记录（应该是随机的50条）\")\n    if result:\n        print(f\"   第一条记录标题: {result[0]['title']}\")\n    \n    # 测试空关键词\n    print(\"\\n3. 测试空关键词:\")\n    result = search_sticker(\"\")\n    print(f\"   找到 {len(result)} 条记录\")\n    if len(result) > 50:\n        print(\"   应该只返回前50条记录\")\n    else:\n        print(f\"   返回了 {len(result)} 条记录\")\n    \n    print(\"\\n测试完成!\")\n\n\nif __name__ == \"__main__\":\n    test_search_sticker()"
  },
  {
    "path": "tests/test_storage_upload_retry.py",
    "content": "\"\"\"\nstrict unit tests for src.utils.storage_upload_retry\n\"\"\"\nimport errno\nfrom unittest.mock import MagicMock, patch\n\nimport pytest\nimport requests\nimport urllib3.exceptions\nfrom requests.exceptions import ChunkedEncodingError\nfrom qcloud_cos.cos_exception import CosClientError, CosServiceError\n\nimport src.utils.storage_upload_retry as sur\n\n\n@pytest.fixture\ndef no_sleep_no_random_delay():\n    \"\"\"Make retries cheap and deterministic in tests.\"\"\"\n    with (\n        patch.object(sur, \"time\") as m_time,\n        patch.object(sur, \"random\") as m_random,\n    ):\n        m_time.sleep = MagicMock()\n        m_random.uniform = MagicMock(return_value=0.0)\n        yield m_time\n\n\nclass TestIterExceptionChain:\n    def test_yields_self_then_cause(self) -> None:\n        root = requests.ConnectionError(\"outer\")\n        root.__cause__ = OSError(errno.ETIMEDOUT, \"inner\")\n        seen = list(sur._iter_exception_chain(root))\n        assert len(seen) == 2\n        assert seen[0] is root\n        assert seen[1] is root.__cause__\n\n    def test_stops_on_cycle(self) -> None:\n        a = Exception(\"a\")\n        b = Exception(\"b\")\n        a.__context__ = b\n        b.__context__ = a\n        seen = list(sur._iter_exception_chain(a))\n        assert len(seen) == 2\n\n\nclass TestIsRetryableStorageError:\n    @pytest.mark.parametrize(\n        \"exc\",\n        [\n            requests.ConnectionError(\"refused\"),\n            requests.Timeout(\"t\"),\n            ChunkedEncodingError(),\n        ],\n    )\n    def test_requests_transient(self, exc: Exception) -> None:\n        assert sur.is_retryable_storage_error(exc) is True\n\n    def test_urllib3_new_connection(self) -> None:\n        from urllib3.connection import HTTPConnection\n\n        exc = urllib3.exceptions.NewConnectionError(HTTPConnection(\"127.0.0.1\", 9), \"nope\")\n        assert sur.is_retryable_storage_error(exc) is True\n\n    def test_urllib3_read_timeout(self) -> None:\n        pool = MagicMock()\n        exc = urllib3.exceptions.ReadTimeoutError(pool, \"http://example\", \"read\")\n        assert sur.is_retryable_storage_error(exc) is True\n\n    def test_urllib3_connect_timeout(self) -> None:\n        assert sur.is_retryable_storage_error(urllib3.exceptions.ConnectTimeoutError(\"c\")) is True\n\n    def test_urllib3_protocol(self) -> None:\n        assert sur.is_retryable_storage_error(urllib3.exceptions.ProtocolError(\"p\")) is True\n\n    @pytest.mark.parametrize(\"code\", (errno.ECONNRESET, errno.ETIMEDOUT, 10054))\n    def test_oserror_errno(self, code: int) -> None:\n        assert sur.is_retryable_storage_error(OSError(code, \"x\")) is True\n\n    def test_oserror_not_retryable(self) -> None:\n        assert sur.is_retryable_storage_error(OSError(errno.ENOENT, \"nope\")) is False\n\n    def test_cos_client_error(self) -> None:\n        assert sur.is_retryable_storage_error(CosClientError(\"timeout\")) is True\n\n    @pytest.mark.parametrize(\"status, expected\", [(503, True), (500, True), (400, False), (404, False)])\n    def test_cos_service_error(self, status: int, expected: bool) -> None:\n        err = CosServiceError(\"PUT\", {\"code\": \"K\", \"message\": \"m\", \"resource\": \"r\", \"requestid\": \"q\", \"traceid\": \"t\"}, status)\n        assert sur.is_retryable_storage_error(err) is expected\n\n    def test_exception_chain_finds_cause(self) -> None:\n        inner = requests.ConnectionError(\"c\")\n        outer = ValueError(\"wrap\")\n        outer.__cause__ = inner\n        assert sur.is_retryable_storage_error(outer) is True\n\n    def test_exception_chain_valueerror_first_in_chain_still_finds_cause(self) -> None:\n        \"\"\"Outer not retryable, __cause__ is: must still return True.\"\"\"\n        inner = requests.ConnectionError(\"c\")\n        outer = ValueError(\"v\")\n        outer.__cause__ = inner\n        assert sur.is_retryable_storage_error(outer) is True\n\n    def test_oss_request_error(self) -> None:\n        import oss2.exceptions as ox\n\n        e = ox.RequestError(requests.ConnectionError(\"r\"))\n        assert sur.is_retryable_storage_error(e) is True\n\n    @pytest.mark.parametrize(\"status, expected\", [(503, True), (500, True), (408, True), (400, False), (404, False)])\n    def test_oss_oss_error_status(self, status: int, expected: bool) -> None:\n        import oss2.exceptions as ox\n\n        e = ox.OssError(status, {}, \"\", {})\n        assert sur.is_retryable_storage_error(e) is expected\n\n\nclass TestRunWithStorageRetry:\n    def test_success_first_call(self, no_sleep_no_random_delay) -> None:\n        op = MagicMock(return_value=\"ok\")\n        assert sur.run_with_storage_retry(op, context=\"T\") == \"ok\"\n        op.assert_called_once()\n\n    def test_retries_then_success(self, no_sleep_no_random_delay) -> None:\n        m_time = no_sleep_no_random_delay\n        op = MagicMock(side_effect=[requests.ConnectionError(\"1\"), requests.ConnectionError(\"2\"), \"done\"])\n        assert sur.run_with_storage_retry(op) == \"done\"\n        assert op.call_count == 3\n        assert m_time.sleep.call_count == 2\n\n    def test_non_retryable_raises_immediately(self, no_sleep_no_random_delay) -> None:\n        m_time = no_sleep_no_random_delay\n        op = MagicMock(side_effect=ValueError(\"bad\"))\n        with pytest.raises(ValueError, match=\"bad\"):\n            sur.run_with_storage_retry(op)\n        op.assert_called_once()\n        m_time.sleep.assert_not_called()\n\n    def test_exhausts_attempts(self, no_sleep_no_random_delay) -> None:\n        m_time = no_sleep_no_random_delay\n        err = requests.ConnectionError(\"x\")\n        with patch.object(sur, \"_STORAGE_UPLOAD_MAX_ATTEMPTS\", 3):\n            op = MagicMock(side_effect=err)\n            with pytest.raises(requests.ConnectionError):\n                sur.run_with_storage_retry(op, context=\"X\")\n        assert op.call_count == 3\n        assert m_time.sleep.call_count == 2\n\n    def test_context_passed_to_warning_logger(self, no_sleep_no_random_delay) -> None:\n        op = MagicMock(side_effect=[requests.ConnectionError(\"f\"), \"ok\"])\n        with patch.object(sur.logger, \"warning\") as m_warn:\n            sur.run_with_storage_retry(op, context=\"COS\")\n        m_warn.assert_called_once()\n        assert m_warn.call_args is not None\n        flat = \" \".join(str(x) for x in m_warn.call_args[0])\n        assert \"COS\" in flat and \"storage upload attempt\" in flat\n"
  },
  {
    "path": "tests/test_text_segment_add_animation.py",
    "content": "\"\"\"TextSegment.add_animation：循环动画修正后的回归与行为测试。\n\n保证入场/出场逻辑不变；循环动画 start 在入场结束后，duration 为单次循环时长（可受中间空隙限制）。\n\"\"\"\n\nfrom __future__ import annotations\n\nimport sys\nimport os\n\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), \"..\")))\n\nimport pytest\n\nfrom src.pyJianYingDraft.text_segment import TextSegment, TextStyle\nfrom src.pyJianYingDraft.time_util import Timerange\nfrom src.pyJianYingDraft.metadata import TextIntro, TextOutro, TextLoopAnim\n\n\ndef _anim(seg: TextSegment, animation_type: str):\n    assert seg.animations_instance is not None\n    return next(a for a in seg.animations_instance.animations if a.animation_type == animation_type)\n\n\n# --- 入场 / 出场：与改动前一致 ---\n\n\ndef test_intro_only_start_zero_and_respects_duration():\n    seg = TextSegment(\"t\", Timerange(0, 10_000_000), style=TextStyle())\n    seg.add_animation(TextIntro.弹入, duration=400_000)\n    a = _anim(seg, \"in\")\n    assert a.start == 0\n    assert a.duration == 400_000\n\n\ndef test_outro_only_start_is_segment_end_minus_duration():\n    seg = TextSegment(\"t\", Timerange(0, 10_000_000), style=TextStyle())\n    seg.add_animation(TextOutro.弹弓, duration=600_000)\n    a = _anim(seg, \"out\")\n    assert a.start == 10_000_000 - 600_000\n    assert a.duration == 600_000\n\n\ndef test_intro_then_outro_both_unchanged():\n    seg = TextSegment(\"t\", Timerange(0, 10_000_000), style=TextStyle())\n    seg.add_animation(TextIntro.弹入, duration=500_000)\n    seg.add_animation(TextOutro.弹弓, duration=500_000)\n    tin, tout = _anim(seg, \"in\"), _anim(seg, \"out\")\n    assert tin.start == 0 and tin.duration == 500_000\n    assert tout.start == 9_500_000 and tout.duration == 500_000\n\n\ndef test_intro_duration_still_capped_by_segment_length():\n    \"\"\"公共前缀 min(tim(duration), segment) 对入场仍生效。\"\"\"\n    seg = TextSegment(\"t\", Timerange(0, 300_000), style=TextStyle())\n    seg.add_animation(TextIntro.弹入, duration=500_000)\n    assert _anim(seg, \"in\").duration == 300_000\n\n\ndef test_outro_duration_still_capped_by_segment_length():\n    seg = TextSegment(\"t\", Timerange(0, 400_000), style=TextStyle())\n    seg.add_animation(TextOutro.弹弓, duration=900_000)\n    tout = _anim(seg, \"out\")\n    assert tout.duration == 400_000\n    assert tout.start == 0\n\n\n# --- 循环动画：新语义 ---\n\n\ndef test_loop_only_start_zero_uses_explicit_cycle():\n    seg = TextSegment(\"t\", Timerange(0, 8_000_000), style=TextStyle())\n    seg.add_animation(TextLoopAnim.旋转, duration=1_200_000)\n    lo = _anim(seg, \"loop\")\n    assert lo.start == 0\n    assert lo.duration == 1_200_000\n\n\ndef test_loop_only_cycle_limited_by_segment_before_loop_branch():\n    \"\"\"先被全局 min(..., segment) 限制，再在 loop 分支与 available 取 min。\"\"\"\n    seg = TextSegment(\"t\", Timerange(0, 1_000_000), style=TextStyle())\n    seg.add_animation(TextLoopAnim.旋转, duration=3_000_000)\n    lo = _anim(seg, \"loop\")\n    assert lo.start == 0\n    assert lo.duration == 1_000_000\n\n\ndef test_loop_none_duration_uses_enum_default_microseconds():\n    # 旋转 元数据默认 0.5s\n    seg = TextSegment(\"t\", Timerange(0, 5_000_000), style=TextStyle())\n    seg.add_animation(TextLoopAnim.旋转, duration=None)\n    lo = _anim(seg, \"loop\")\n    assert lo.start == 0\n    assert lo.duration == 500_000\n\n\ndef test_loop_after_intro_outro_starts_at_intro_end():\n    seg = TextSegment(\"t\", Timerange(0, 10_000_000), style=TextStyle())\n    seg.add_animation(TextIntro.弹入, duration=500_000)\n    seg.add_animation(TextOutro.弹弓, duration=500_000)\n    seg.add_animation(TextLoopAnim.旋转, duration=1_000_000)\n    tin, tout, lo = _anim(seg, \"in\"), _anim(seg, \"out\"), _anim(seg, \"loop\")\n    assert tin.start == 0 and tin.duration == 500_000\n    assert tout.start == 9_500_000 and tout.duration == 500_000\n    assert lo.start == 500_000\n    assert lo.duration == 1_000_000\n\n\ndef test_loop_cycle_capped_by_available_between_in_and_out():\n    seg = TextSegment(\"t\", Timerange(0, 2_000_000), style=TextStyle())\n    seg.add_animation(TextIntro.弹入, duration=800_000)\n    seg.add_animation(TextOutro.弹弓, duration=800_000)\n    # 中间仅剩 400_000 μs；请求 3s 单次循环，先被 min(..., 2s) 成 2s，再 cap 到 400_000\n    seg.add_animation(TextLoopAnim.旋转, duration=3_000_000)\n    lo = _anim(seg, \"loop\")\n    assert lo.start == 800_000\n    assert lo.duration == 400_000\n\n\ndef test_loop_accepts_int_duration_microseconds():\n    seg = TextSegment(\"t\", Timerange(0, 6_000_000), style=TextStyle())\n    seg.add_animation(TextLoopAnim.旋转, duration=900_000)\n    assert _anim(seg, \"loop\").duration == 900_000\n\n\ndef test_add_in_out_loop_order_required_by_contract():\n    \"\"\"与文档一致：先入场、再出场、再循环。\"\"\"\n    seg = TextSegment(\"t\", Timerange(0, 10_000_000), style=TextStyle())\n    seg.add_animation(TextIntro.弹入, duration=100_000)\n    seg.add_animation(TextOutro.弹弓, duration=100_000)\n    seg.add_animation(TextLoopAnim.旋转, duration=200_000)\n    assert len(seg.animations_instance.animations) == 3\n\n\ndef test_add_loop_before_in_raises():\n    seg = TextSegment(\"t\", Timerange(0, 5_000_000), style=TextStyle())\n    seg.add_animation(TextLoopAnim.旋转, duration=500_000)\n    with pytest.raises(ValueError, match=\"入出场动画\"):\n        seg.add_animation(TextIntro.弹入, duration=100_000)\n"
  },
  {
    "path": "tests/test_transform_coordinate_fix.py",
    "content": "import requests\nimport json\nimport time\n\ndef test_transform_coordinate_fix():\n    \"\"\"测试transform坐标计算修复\"\"\"\n    \n    # 1. 创建一个自定义尺寸的草稿 (1280x720)\n    create_draft_url = \"http://localhost:8000/v1/create_draft\"\n    create_draft_data = {\n        \"width\": 1280,\n        \"height\": 720\n    }\n    \n    try:\n        print(\"创建草稿...\")\n        create_response = requests.post(create_draft_url, json=create_draft_data)\n        \n        if create_response.status_code != 200:\n            print(f\"草稿创建失败: {create_response.status_code}\")\n            print(create_response.text)\n            return\n            \n        draft_url = create_response.json()[\"draft_url\"]\n        print(f\"草稿创建成功: {draft_url}\")\n        \n        # 2. 添加带transform坐标的图片\n        # 使用较大的transform值来测试坐标转换\n        add_images_url = \"http://localhost:8000/v1/add_images\"\n        image_infos = [\n            {\n                \"image_url\": \"https://example.com/test_image.jpg\",\n                \"width\": 1920,  # 图片尺寸大于草稿尺寸\n                \"height\": 1080,\n                \"start\": 0,\n                \"end\": 3000000,  #显示3秒\n                \"transform_x\": 320,  #相草稿宽度的偏移 (1280/4 = 320)\n                \"transform_y\": 180   #相对于草稿高度的偏移 (720/4 = 180)\n            }\n        ]\n        \n        add_images_data = {\n            \"draft_url\": draft_url,\n            \"image_infos\": json.dumps(image_infos)\n        }\n        \n        print(\"添加带transform坐标的图片...\")\n        add_response = requests.post(add_images_url, json=add_images_data)\n        \n        if add_response.status_code == 200:\n            result = add_response.json()\n            print(\"✅ Transform坐标计算修复测试通过!\")\n            print(f\"返回的image_timeline_ids: {result.get('image_timeline_ids', [])}\")\n            \n            #验证transform值是否正确处理\n            # 320/1280 = 0.25, 180/720 = 0.25\n            print(\"预期的transform_x计算结果: 320/1280 = 0.25\")\n            print(\"预期的transform_y计算结果: 180/720 = 0.25\")\n            print(\"✅坐转换使用草稿宽高而非图片宽高 - 修复验证通过!\")\n            \n        else:\n            print(f\"❌ 添加图片失败: {add_response.status_code}\")\n            print(add_response.text)\n            \n    except Exception as e:\n        print(f\"测试执行出错: {e}\")\n\ndef test_transform_with_different_draft_sizes():\n    \"\"\"测试不同草稿尺寸下的transform坐标\"\"\"\n    \n    test_cases = [\n        {\"draft_width\": 1920, \"draft_height\": 1080, \"transform_x\": 480, \"transform_y\": 270},  # 1/4位置\n        {\"draft_width\": 1280, \"draft_height\": 720, \"transform_x\": 320, \"transform_y\": 180},   # 1/4位置\n        {\"draft_width\": 3840, \"draft_height\": 2160, \"transform_x\": 960, \"transform_y\": 540}   # 1/4位置\n    ]\n    \n    for i, test_case in enumerate(test_cases):\n        print(f\"\\n=== 测试用例 {i+1}:尺寸 {test_case['draft_width']}x{test_case['draft_height']} ===\")\n        \n        # 创建对应尺寸的草稿\n        create_draft_data = {\n            \"width\": test_case['draft_width'],\n            \"height\": test_case['draft_height']\n        }\n        \n        try:\n            create_response = requests.post(\"http://localhost:8000/v1/create_draft\", json=create_draft_data)\n            if create_response.status_code != 200:\n                print(f\"草稿创建失败: {create_response.status_code}\")\n                continue\n                \n            draft_url = create_response.json()[\"draft_url\"]\n            \n            # 添加图片测试transform\n            image_infos = [{\n                \"image_url\": \"https://example.com/test.jpg\",\n                \"width\": 1000,\n                \"height\": 1000,\n                \"start\": 0,\n                \"end\": 1000000,\n                \"transform_x\": test_case['transform_x'],\n                \"transform_y\": test_case['transform_y']\n            }]\n            \n            add_images_data = {\n                \"draft_url\": draft_url,\n                \"image_infos\": json.dumps(image_infos)\n            }\n            \n            add_response = requests.post(\"http://localhost:8000/v1/add_images\", json=add_images_data)\n            \n            if add_response.status_code == 200:\n                expected_x = test_case['transform_x'] / test_case['draft_width']\n                expected_y = test_case['transform_y'] / test_case['draft_height']\n                print(f\"✅ Transform计算正确: {test_case['transform_x']}/{test_case['draft_width']} = {expected_x:.3f}\")\n                print(f\"✅ Transform计算正确: {test_case['transform_y']}/{test_case['draft_height']} = {expected_y:.3f}\")\n            else:\n                print(f\"❌ 添加图片失败: {add_response.status_code}\")\n                \n        except Exception as e:\n            print(f\"测试用例执行出错: {e}\")\n\nif __name__ == \"__main__\":\n    print(\"开始测试transform坐标计算修复...\")\n    test_transform_coordinate_fix()\n    test_transform_with_different_draft_sizes()\n    print(\"\\n所有测试完成!\")"
  },
  {
    "path": "tests/test_upload_file.py",
    "content": "\"\"\"Unit tests for src.utils.upload_file routing (COS / OSS selection).\"\"\"\nfrom unittest.mock import patch\n\nimport pytest\n\nfrom exceptions import CustomError, CustomException\n\n\n@pytest.fixture\ndef upload_mocks():\n    with (\n        patch(\"src.utils.upload_file.cos_upload_file\") as m_cos,\n        patch(\"src.utils.upload_file.oss_upload_file\") as m_oss,\n        patch(\"src.utils.upload_file._is_cos_configured\") as m_ic,\n        patch(\"src.utils.upload_file._is_oss_configured\") as m_io,\n    ):\n        yield m_cos, m_oss, m_ic, m_io\n\n\ndef test_upload_file_prefers_cos_when_configured(upload_mocks) -> None:\n    m_cos, m_oss, m_ic, m_io = upload_mocks\n    m_ic.return_value = True\n    m_io.return_value = True\n    m_cos.return_value = \"https://cos.example/signed\"\n    from src.utils.upload_file import upload_file\n\n    assert upload_file(\"/tmp/a.mp4\") == \"https://cos.example/signed\"\n    m_cos.assert_called_once()\n    m_oss.assert_not_called()\n\n\ndef test_upload_file_fallback_oss_when_cos_not_configured(upload_mocks) -> None:\n    m_cos, m_oss, m_ic, m_io = upload_mocks\n    m_ic.return_value = False\n    m_io.return_value = True\n    m_oss.return_value = \"https://oss.example/signed\"\n    from src.utils.upload_file import upload_file\n\n    assert upload_file(\"/tmp/b.mp4\") == \"https://oss.example/signed\"\n    m_oss.assert_called_once()\n    m_cos.assert_not_called()\n\n\ndef test_upload_file_neither_storage_raises(upload_mocks) -> None:\n    m_cos, m_oss, m_ic, m_io = upload_mocks\n    m_ic.return_value = False\n    m_io.return_value = False\n    from src.utils.upload_file import upload_file\n\n    with pytest.raises(CustomException) as ei:\n        upload_file(\"/tmp/c.mp4\")\n    assert ei.value.err == CustomError.INTERNAL_SERVER_ERROR\n    m_cos.assert_not_called()\n    m_oss.assert_not_called()\n\n\ndef test_upload_file_passes_expire_days(upload_mocks) -> None:\n    m_cos, m_oss, m_ic, m_io = upload_mocks\n    m_ic.return_value = True\n    m_cos.return_value = \"u\"\n    from src.utils.upload_file import upload_file\n\n    upload_file(\"/x\", expire_days=14)\n    m_cos.assert_called_once_with(file_path=\"/x\", expire_days=14)\n"
  },
  {
    "path": "tests/test_video_duration_extension.py",
    "content": "import sys\nimport os\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\n# Mock pymediainfo to avoid dependency issues\nclass MockMediaInfo:\n    def __init__(self, duration=2000000, width=576, height=1024):\n        self.duration = duration\n        self.width = width\n        self.height = height\n    \n    def parse(self, path, **kwargs):\n        # Return mock video track info\n        class MockVideoTrack:\n            def __init__(self, duration, width, height):\n                self.duration = duration / 1000  # Convert to milliseconds\n                self.width = width\n                self.height = height\n        \n        class MockInfo:\n            def __init__(self, duration, width, height):\n                self.video_tracks = [MockVideoTrack(duration, width, height)]\n        \n        return MockInfo(self.duration, self.width, self.height)\n    \n    @staticmethod\n    def can_parse():\n        return True\n\n# Replace pymediainfo with mock\nimport src.pyJianYingDraft.local_materials\nsrc.pyJianYingDraft.local_materials.pymediainfo = MockMediaInfo()\n\nfrom src.pyJianYingDraft.local_materials import VideoMaterial\nfrom src.pyJianYingDraft.time_util import Timerange\nfrom src.pyJianYingDraft.video_segment import VideoSegment\nimport uuid\n\ndef test_video_duration_extension():\n    \"\"\"测试视频时长扩展功能\"\"\"\n    \n    # Mock the uuid to make tests deterministic\n    original_uuid4 = uuid.uuid4\n    uuid.uuid4 = lambda: type('MockUUID', (), {'hex': 'mock-uuid'})()\n    \n    try:\n        # 创建一个模拟的视频文件路径\n        mock_video_path = \"test_video.mp4\"\n        \n        # 创建视频素材（模拟2秒的视频）\n        video_material = VideoMaterial(mock_video_path)\n        print(f\"视频素材时长: {video_material.duration} 微秒\")\n        print(f\"视频尺寸: {video_material.width}x{video_material.height}\")\n        \n        # 测试场景1：指定duration超过实际视频时长\n        # 视频实际时长2秒(2000000微秒)，但指定时长3秒(3000000微秒)\n        specified_duration = 3000000  # 3秒\n        source_duration = 2000000      # 2秒（实际播放时长）\n        start_time = 3000000          # 从3秒开始\n        end_time = 5000000            # 到5秒结束\n        \n        print(f\"\\n测试场景1：\")\n        print(f\"指定duration: {specified_duration} 微秒\")\n        print(f\"实际播放时长: {source_duration} 微秒\")\n        print(f\"时间轴开始时间: {start_time} 微秒\")\n        print(f\"时间轴结束时间: {end_time} 微秒\")\n        \n        # 创建视频片段\n        video_segment = VideoSegment(\n            material=video_material,\n            target_timerange=Timerange(start=start_time, duration=source_duration),\n            source_timerange=Timerange(start=0, duration=min(specified_duration, video_material.duration)),\n            speed=1.0,\n            volume=1.0\n        )\n        \n        print(f\"片段创建成功！\")\n        print(f\"片段ID: {video_segment.segment_id}\")\n        print(f\"素材ID: {video_segment.material_id}\")\n        print(f\"目标时间范围: start={video_segment.target_timerange.start}, duration={video_segment.target_timerange.duration}\")\n        print(f\"源时间范围: start={video_segment.source_timerange.start}, duration={video_segment.source_timerange.duration}\")\n        print(f\"播放速度: {video_segment.speed.speed}\")\n        \n        # 验证结果\n        assert video_segment.target_timerange.start == start_time\n        assert video_segment.target_timerange.duration == source_duration\n        assert video_segment.source_timerange.duration <= video_material.duration\n        print(\"测试场景1通过！\")\n        \n        # 测试场景2：指定duration小于实际视频时长\n        specified_duration = 1000000   # 1秒\n        source_duration = 2000000      # 2秒（实际播放时长）\n        start_time = 6000000          # 从6秒开始\n        end_time = 8000000            # 到8秒结束\n        \n        print(f\"\\n测试场景2：\")\n        print(f\"指定duration: {specified_duration} 微秒\")\n        print(f\"实际播放时长: {source_duration} 微秒\")\n        print(f\"时间轴开始时间: {start_time} 微秒\")\n        print(f\"时间轴结束时间: {end_time} 微秒\")\n        \n        # 创建视频片段\n        video_segment2 = VideoSegment(\n            material=video_material,\n            target_timerange=Timerange(start=start_time, duration=source_duration),\n            source_timerange=Timerange(start=0, duration=min(specified_duration, video_material.duration)),\n            speed=1.0,\n            volume=1.0\n        )\n        \n        print(f\"片段创建成功！\")\n        print(f\"片段ID: {video_segment2.segment_id}\")\n        print(f\"素材ID: {video_segment2.material_id}\")\n        print(f\"目标时间范围: start={video_segment2.target_timerange.start}, duration={video_segment2.target_timerange.duration}\")\n        print(f\"源时间范围: start={video_segment2.source_timerange.start}, duration={video_segment2.source_timerange.duration}\")\n        print(f\"播放速度: {video_segment2.speed.speed}\")\n        \n        # 验证结果\n        assert video_segment2.target_timerange.start == start_time\n        assert video_segment2.target_timerange.duration == source_duration\n        assert video_segment2.source_timerange.duration <= video_material.duration\n        print(\"测试场景2通过！\")\n        \n    finally:\n        # Restore original uuid\n        uuid.uuid4 = original_uuid4\n\nif __name__ == \"__main__\":\n    test_video_duration_extension()\n    print(\"\\n所有测试通过！\")"
  },
  {
    "path": "tests/test_video_task_draft_duration.py",
    "content": "\"\"\"云渲染草稿时长校验：低于 3 秒视为空草稿。\"\"\"\nimport json\nimport os\nimport tempfile\nfrom datetime import datetime\nfrom unittest.mock import patch\n\nimport pytest\n\nfrom src.utils.video_task_manager import (\n    MIN_DRAFT_EXPORT_DURATION_US,\n    TaskStatus,\n    VideoGenTask,\n    VideoGenTaskManager,\n)\n\n\ndef _task(draft_id: str = \"d_test\") -> VideoGenTask:\n    return VideoGenTask(\n        draft_url=f\"http://example/openapi?draft_id={draft_id}\",\n        draft_id=draft_id,\n        status=TaskStatus.PENDING,\n        created_at=datetime.now(),\n    )\n\n\n@pytest.fixture\ndef draft_home():\n    with tempfile.TemporaryDirectory() as td:\n        yield td\n\n\nclass TestCheckDraftDuration:\n    def test_below_three_seconds_returns_false(self, draft_home) -> None:\n        did = \"below_three\"\n        root = os.path.join(draft_home, did)\n        os.makedirs(root, exist_ok=True)\n        path = os.path.join(root, \"draft_content.json\")\n        with open(path, \"w\", encoding=\"utf-8\") as f:\n            json.dump({\"duration\": MIN_DRAFT_EXPORT_DURATION_US - 1}, f)\n\n        with patch(\"src.utils.video_task_manager.config\") as cfg:\n            cfg.DRAFT_SAVE_PATH = draft_home\n            assert VideoGenTaskManager()._check_draft_duration(_task(did)) is False\n\n    def test_exactly_three_seconds_returns_true(self, draft_home) -> None:\n        did = \"exact_three\"\n        root = os.path.join(draft_home, did)\n        os.makedirs(root, exist_ok=True)\n        path = os.path.join(root, \"draft_content.json\")\n        with open(path, \"w\", encoding=\"utf-8\") as f:\n            json.dump({\"duration\": MIN_DRAFT_EXPORT_DURATION_US}, f)\n\n        with patch(\"src.utils.video_task_manager.config\") as cfg:\n            cfg.DRAFT_SAVE_PATH = draft_home\n            assert VideoGenTaskManager()._check_draft_duration(_task(did)) is True\n\n    def test_zero_duration_returns_false(self, draft_home) -> None:\n        did = \"zero_d\"\n        root = os.path.join(draft_home, did)\n        os.makedirs(root, exist_ok=True)\n        path = os.path.join(root, \"draft_content.json\")\n        with open(path, \"w\", encoding=\"utf-8\") as f:\n            json.dump({\"duration\": 0}, f)\n\n        with patch(\"src.utils.video_task_manager.config\") as cfg:\n            cfg.DRAFT_SAVE_PATH = draft_home\n            assert VideoGenTaskManager()._check_draft_duration(_task(did)) is False\n\n\nclass TestPhaseDownloadPrepareMessage:\n    \"\"\"时长不通过时，阶段函数返回带 draft_id 的提示文案。\"\"\"\n\n    @patch(\"src.utils.video_task_manager.sys.platform\", \"win32\")\n    @patch.object(VideoGenTaskManager, \"_download_draft\", return_value=True)\n    def test_phase_returns_duration_too_short_message(\n        self, m_dl, draft_home\n    ) -> None:\n        did = \"phase_short\"\n        root = os.path.join(draft_home, did)\n        os.makedirs(root, exist_ok=True)\n        path = os.path.join(root, \"draft_content.json\")\n        with open(path, \"w\", encoding=\"utf-8\") as f:\n            json.dump({\"duration\": 1000}, f)\n\n        with patch(\"src.utils.video_task_manager.config\") as cfg:\n            cfg.DRAFT_SAVE_PATH = draft_home\n            cfg.DRAFT_DIR = draft_home\n            out = VideoGenTaskManager()._phase_download_and_prepare(_task(did))\n            assert (\n                out\n                == f\"草稿中视频时长不大于3秒，请检查草稿内容: {did}\"\n            )\n"
  },
  {
    "path": "tests/test_video_transform.py",
    "content": "import sys\nimport os\nimport json\nimport requests\n\n# 添加项目根目录到 Python 路径\nsys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n\ndef test_video_transform():\n    \"\"\"测试视频位置变换功能\"\"\"\n    \n    # 1. 先创建一个草稿\n    create_draft_url = \"http://localhost:8000/v1/create_draft\"\n    create_draft_data = {\n        \"width\": 1920,\n        \"height\": 1080\n    }\n    \n    try:\n        print(\"Creating draft...\")\n        create_response = requests.post(create_draft_url, json=create_draft_data)\n        \n        if create_response.status_code != 200:\n            print(f\"Failed to create draft: {create_response.status_code}\")\n            print(create_response.text)\n            return\n            \n        draft_url = create_response.json()[\"draft_url\"]\n        print(f\"Draft created successfully: {draft_url}\")\n        \n        # 2. 添加带位置变换的视频\n        add_videos_url = \"http://localhost:8000/v1/add_videos\"\n        video_infos = [\n            {\n                \"video_url\": \"https://example.com/test.mp4\",\n                \"width\": 1920,\n                \"height\": 1080,\n                \"start\": 0,\n                \"end\": 5000000,  # 5秒\n                \"duration\": 5000000\n            }\n        ]\n        \n        add_videos_data = {\n            \"draft_url\": draft_url,\n            \"video_infos\": json.dumps(video_infos),\n            \"transform_x\": 100,  # X轴位置偏移100像素\n            \"transform_y\": -50   # Y轴位置偏移-50像素\n        }\n        \n        print(\"Adding videos with position transformation...\")\n        add_response = requests.post(add_videos_url, json=add_videos_data)\n        \n        if add_response.status_code == 200:\n            result = add_response.json()\n            print(f\"Videos added successfully!\")\n            print(f\"Track ID: {result['track_id']}\")\n            print(f\"Video IDs: {result['video_ids']}\")\n            print(f\"Segment IDs: {result['segment_ids']}\")\n            print(f\"Draft URL: {result['draft_url']}\")\n        else:\n            print(f\"Failed to add videos: {add_response.status_code}\")\n            print(add_response.text)\n            \n    except Exception as e:\n        print(f\"Error occurred: {e}\")\n        print(\"Make sure the server is running on http://localhost:8000\")\n\nif __name__ == \"__main__\":\n    test_video_transform()"
  },
  {
    "path": "tests/test_video_transform_fix.py",
    "content": "import requests\nimport json\nimport time\n\ndef test_video_transform_coordinate_fix():\n    \"\"\"测试视频transform坐标计算修复\"\"\"\n    \n    # 1. 创建一个自定义尺寸的草稿 (1280x720)\n    create_draft_url = \"http://localhost:8000/v1/create_draft\"\n    create_draft_data = {\n        \"width\": 1280,\n        \"height\": 720\n    }\n    \n    try:\n        print(\"创建草稿...\")\n        create_response = requests.post(create_draft_url, json=create_draft_data)\n        \n        if create_response.status_code != 200:\n            print(f\"草稿创建失败: {create_response.status_code}\")\n            print(create_response.text)\n            return\n            \n        draft_url = create_response.json()[\"draft_url\"]\n        print(f\"草稿创建成功: {draft_url}\")\n        \n        # 2. 添加带transform坐标的视频\n        # 使用较大的transform值来测试坐标转换\n        add_videos_url = \"http://localhost:8000/v1/add_videos\"\n        video_infos = [\n            {\n                \"video_url\": \"https://example.com/test_video.mp4\",\n                \"width\": 1920,  #视频尺寸大于草稿尺寸\n                \"height\": 1080,\n                \"start\": 0,\n                \"end\": 3000000,  #显示3秒\n                \"transform_x\": 320,  #相草稿宽度的偏移 (1280/4 = 320)\n                \"transform_y\": 180   #相对于草稿高度的偏移 (720/4 = 180)\n            }\n        ]\n        \n        add_videos_data = {\n            \"draft_url\": draft_url,\n            \"video_infos\": json.dumps(video_infos)\n        }\n        \n        print(\"添加带transform坐标的视频...\")\n        add_response = requests.post(add_videos_url, json=add_videos_data)\n        \n        if add_response.status_code == 200:\n            result = add_response.json()\n            print(\"✅视频Transform坐标计算修复测试通过!\")\n            print(f\"返回的segment_ids: {result.get('segment_ids', [])}\")\n            \n            #验证transform值是否正确处理\n            # 320/1280 = 0.25, 180/720 = 0.25\n            print(\"预期的transform_x计算结果: 320/1280 = 0.25\")\n            print(\"预期的transform_y计算结果: 180/720 = 0.25\")\n            print(\"✅转换使用草稿宽高而非视频宽高 - 修复验证通过!\")\n            \n        else:\n            print(f\"❌ 添加视频失败: {add_response.status_code}\")\n            print(add_response.text)\n            \n    except Exception as e:\n        print(f\"测试执行出错: {e}\")\n\ndef test_video_transform_with_different_draft_sizes():\n    \"\"\"测试不同草稿尺寸下的视频transform坐标\"\"\"\n    \n    test_cases = [\n        {\"draft_width\": 1920, \"draft_height\": 1080, \"transform_x\": 480, \"transform_y\": 270},  # 1/4位置\n        {\"draft_width\": 1280, \"draft_height\": 720, \"transform_x\": 320, \"transform_y\": 180},   # 1/4位置\n        {\"draft_width\": 3840, \"draft_height\": 2160, \"transform_x\": 960, \"transform_y\": 540}   # 1/4位置\n    ]\n    \n    for i, test_case in enumerate(test_cases):\n        print(f\"\\n=== 测试用例 {i+1}:尺寸 {test_case['draft_width']}x{test_case['draft_height']} ===\")\n        \n        # 创建对应尺寸的草稿\n        create_draft_data = {\n            \"width\": test_case['draft_width'],\n            \"height\": test_case['draft_height']\n        }\n        \n        try:\n            create_response = requests.post(\"http://localhost:8000/v1/create_draft\", json=create_draft_data)\n            if create_response.status_code != 200:\n                print(f\"草稿创建失败: {create_response.status_code}\")\n                continue\n                \n            draft_url = create_response.json()[\"draft_url\"]\n            \n            # 添加视频测试transform\n            video_infos = [{\n                \"video_url\": \"https://example.com/test_video.mp4\",\n                \"width\": 1000,\n                \"height\": 1000,\n                \"start\": 0,\n                \"end\": 1000000,\n                \"transform_x\": test_case['transform_x'],\n                \"transform_y\": test_case['transform_y']\n            }]\n            \n            add_videos_data = {\n                \"draft_url\": draft_url,\n                \"video_infos\": json.dumps(video_infos)\n            }\n            \n            add_response = requests.post(\"http://localhost:8000/v1/add_videos\", json=add_videos_data)\n            \n            if add_response.status_code == 200:\n                expected_x = test_case['transform_x'] / test_case['draft_width']\n                expected_y = test_case['transform_y'] / test_case['draft_height']\n                print(f\"✅ Transform计算正确: {test_case['transform_x']}/{test_case['draft_width']} = {expected_x:.3f}\")\n                print(f\"✅ Transform计算正确: {test_case['transform_y']}/{test_case['draft_height']} = {expected_y:.3f}\")\n            else:\n                print(f\"❌ 添加视频失败: {add_response.status_code}\")\n                \n        except Exception as e:\n            print(f\"测试用例执行出错: {e}\")\n\ndef test_video_transform_vs_image_transform_consistency():\n    \"\"\"测试视频和图片transform计算的一致性\"\"\"\n    \n    print(\"\\n=== 测试视频和图片transform计算一致性 ===\")\n    \n    # 使用相同的草稿和transform参数\n    create_draft_data = {\"width\": 1920, \"height\": 1080}\n    \n    try:\n        # 创建草稿\n        create_response = requests.post(\"http://localhost:8000/v1/create_draft\", json=create_draft_data)\n        draft_url = create_response.json()[\"draft_url\"]\n        \n        #相同的transform参数\n        transform_x, transform_y = 480, 270  # 1/4位置\n        \n        # 添加视频\n        video_infos = [{\n            \"video_url\": \"https://example.com/test_video.mp4\",\n            \"width\": 1000,\n            \"height\": 1000,\n            \"start\": 0,\n            \"end\": 1000000,\n            \"transform_x\": transform_x,\n            \"transform_y\": transform_y\n        }]\n        \n        video_response = requests.post(\"http://localhost:8000/v1/add_videos\", \n                                     json={\"draft_url\": draft_url, \"video_infos\": json.dumps(video_infos)})\n        \n        # 添加图片\n        image_infos = [{\n            \"image_url\": \"https://example.com/test_image.jpg\",\n            \"width\": 1000,\n            \"height\": 1000,\n            \"start\": 0,\n            \"end\": 1000000,\n            \"transform_x\": transform_x,\n            \"transform_y\": transform_y\n        }]\n        \n        image_response = requests.post(\"http://localhost:8000/v1/add_images\",\n                                     json={\"draft_url\": draft_url, \"image_infos\": json.dumps(image_infos)})\n        \n        if video_response.status_code == 200 and image_response.status_code == 200:\n            expected_result = transform_x / 1920  # 480/1920 = 0.25\n            print(f\"✅ 视频和图片transform计算一致!\")\n            print(f\"✅都草稿宽度1920进行计算，结果: {expected_result:.3f}\")\n        else:\n            print(\"❌视频或图片添加失败\")\n            \n    except Exception as e:\n        print(f\"一致性测试出错: {e}\")\n\nif __name__ == \"__main__\":\n    print(\"开始测试视频transform坐标计算修复...\")\n    test_video_transform_coordinate_fix()\n    test_video_transform_with_different_draft_sizes()\n    test_video_transform_vs_image_transform_consistency()\n    print(\"\\n所有视频transform测试完成!\")"
  },
  {
    "path": "tests/verify_get_text_effects_api.py",
    "content": "\"\"\"\n验证 get_text_effects API 端点是否正确注册\n\"\"\"\nimport sys\nimport os\n\n# 添加项目根目录到 Python 路径\nsys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\n\ndef test_imports():\n    \"\"\"测试所有导入是否正常\"\"\"\n    print(\"=\" * 60)\n    print(\"测试 1: 检查模块导入\")\n    print(\"=\" * 60)\n    \n    try:\n        from src.schemas.get_text_effects import (\n            GetTextEffectsRequest,\n            TextEffectItem,\n            GetTextEffectsResponse\n        )\n        print(\"✅ Schema 模块导入成功\")\n        \n        from src.service.get_text_effects import (\n            get_text_effects,\n            resolve_text_effect\n        )\n        print(\"✅ Service 模块导入成功\")\n        \n        # 检查 router 源码中是否有该端点\n        import inspect\n        from src.router import v1 as router_module\n        source = inspect.getsource(router_module)\n        \n        if '@router.post(path=\"/get_text_effects\"' in source:\n            print(\"✅ Router 端点注册成功：/get_text_effects\")\n        else:\n            print(\"❌ Router 端点未在源码中找到：/get_text_effects\")\n            return False\n        \n        return True\n        \n    except Exception as e:\n        print(f\"❌ 导入失败：{str(e)}\")\n        import traceback\n        traceback.print_exc()\n        return False\n\n\ndef test_schema_validation():\n    \"\"\"测试 Schema 验证\"\"\"\n    print(\"\\n\" + \"=\" * 60)\n    print(\"测试 2: Schema 验证\")\n    print(\"=\" * 60)\n    \n    try:\n        from src.schemas.get_text_effects import GetTextEffectsRequest\n        \n        # 测试默认值\n        req1 = GetTextEffectsRequest()\n        assert req1.mode == 0, \"默认 mode 应该是 0\"\n        print(\"✅ 默认参数验证通过\")\n        \n        # 测试有效值\n        req2 = GetTextEffectsRequest(mode=2)\n        assert req2.mode == 2, \"mode 应该可以是 2\"\n        print(\"✅ 有效参数验证通过\")\n        \n        # 测试无效值\n        try:\n            req3 = GetTextEffectsRequest(mode=5)\n            print(\"❌ 应该拒绝 mode=5\")\n            return False\n        except Exception:\n            print(\"✅ 无效参数正确被拒绝\")\n        \n        return True\n        \n    except Exception as e:\n        print(f\"❌ Schema 验证失败：{str(e)}\")\n        import traceback\n        traceback.print_exc()\n        return False\n\n\ndef test_service_logic():\n    \"\"\"测试 Service 层逻辑\"\"\"\n    print(\"\\n\" + \"=\" * 60)\n    print(\"测试 3: Service 层逻辑\")\n    print(\"=\" * 60)\n    \n    try:\n        from src.service.get_text_effects import get_text_effects, resolve_text_effect\n        \n        # 测试获取所有效果\n        effects = get_text_effects(mode=0)\n        assert isinstance(effects, list), \"应该返回列表\"\n        print(f\"✅ 获取所有效果成功，共 {len(effects)} 个\")\n        \n        # 测试获取免费效果\n        free_effects = get_text_effects(mode=2)\n        assert isinstance(free_effects, list), \"应该返回列表\"\n        assert len(free_effects) <= len(effects), \"免费效果数不应超过总数\"\n        print(f\"✅ 获取免费效果成功，共 {len(free_effects)} 个\")\n        \n        # 测试解析功能\n        effect_info = resolve_text_effect(\"红黄火焰综艺花字\")\n        if effect_info:\n            assert \"resource_id\" in effect_info, \"应该包含 resource_id\"\n            assert \"effect_id\" in effect_info, \"应该包含 effect_id\"\n            print(\"✅ 效果解析功能正常\")\n        else:\n            print(\"⚠️  效果解析返回 None（可能是数据问题）\")\n        \n        return True\n        \n    except Exception as e:\n        print(f\"❌ Service 层测试失败：{str(e)}\")\n        import traceback\n        traceback.print_exc()\n        return False\n\n\ndef main():\n    print(\"\\n🚀 开始验证 get_text_effects API\\n\")\n    \n    results = []\n    \n    results.append((\"模块导入\", test_imports()))\n    results.append((\"Schema 验证\", test_schema_validation()))\n    results.append((\"Service 逻辑\", test_service_logic()))\n    \n    print(\"\\n\" + \"=\" * 60)\n    print(\"验证总结\")\n    print(\"=\" * 60)\n    \n    for name, passed in results:\n        status = \"✅ 通过\" if passed else \"❌ 失败\"\n        print(f\"{status}: {name}\")\n    \n    all_passed = all(result[1] for result in results)\n    \n    if all_passed:\n        print(\"\\n🎉 所有验证通过！API 已准备就绪。\")\n        return 0\n    else:\n        print(\"\\n❌ 部分验证失败，请检查代码。\")\n        return 1\n\n\nif __name__ == \"__main__\":\n    exit(main())\n"
  },
  {
    "path": "tools/extract_text_effects.py",
    "content": "\"\"\"\n从 data.ts 文件提取所有花字效果并生成 Python 映射表\n\"\"\"\nimport re\nimport json\n\n\ndef extract_text_effects_from_data_ts(file_path: str) -> dict:\n    \"\"\"\n    从 data.ts 文件中提取所有花字效果\n    \n    Args:\n        file_path: data.ts 文件路径\n    \n    Returns:\n        花字效果映射字典 {title: {\"effect_id\": ..., \"resource_id\": ..., \"is_vip\": ...}}\n    \"\"\"\n    with open(file_path, 'r', encoding='utf-8') as f:\n        content = f.read()\n    \n    # 使用正则表达式匹配所有花字对象\n    # 匹配 common_attr 块\n    pattern = r'common_attr:\\s*\\{([^}]+(?:\\{[^}]*\\}[^}]*)*)\\}'\n    \n    text_effects = {}\n    \n    for match in re.finditer(pattern, content, re.DOTALL):\n        block = match.group(1)\n        \n        # 提取 effect_id\n        effect_id_match = re.search(r'effect_id:\\s*[\"\\'](\\d+)[\"\\']', block)\n        if not effect_id_match:\n            continue\n        effect_id = effect_id_match.group(1)\n        \n        # 提取 title\n        title_match = re.search(r'title:\\s*[\"\\']([^\"\\']+)[\"\\']', block)\n        if not title_match:\n            continue\n        title = title_match.group(1)\n        \n        # 提取 is_vip 信息 (从 business_info.json_str 中)\n        is_vip = False\n        json_str_match = re.search(r'json_str:\\s*[\"\\']({[^}]+})[\"\\']', block)\n        if json_str_match:\n            try:\n                business_info = json.loads(json_str_match.group(1).replace('\\\\\"', '\"'))\n                is_vip = business_info.get('is_vip', False)\n            except:\n                pass\n        \n        # 添加到字典\n        text_effects[title] = {\n            \"resource_id\": effect_id,\n            \"effect_id\": effect_id,\n            \"name\": title,\n            \"is_vip\": is_vip\n        }\n    \n    return text_effects\n\n\ndef generate_python_mapping(text_effects: dict) -> str:\n    \"\"\"\n    生成 Python 格式的映射表代码\n    \n    Args:\n        text_effects: 花字效果字典\n    \n    Returns:\n        Python 代码字符串\n    \"\"\"\n    code_lines = [\n        \"# 从 data.ts 自动生成的花字效果映射表\",\n        \"# 格式：{effect_name: {\\\"resource_id\\\": \\\"...\\\", \\\"effect_id\\\": \\\"...\\\", \\\"name\\\": \\\"...\\\", \\\"is_vip\\\": ...}}\",\n        \"TEXT_EFFECT_MAP = {\",\n    ]\n    \n    # 按名称排序\n    sorted_effects = sorted(text_effects.items(), key=lambda x: x[0])\n    \n    for i, (name, data) in enumerate(sorted_effects):\n        is_last = i == len(sorted_effects) - 1\n        comma = \",\" if not is_last else \"\"\n        \n        code_lines.append(f'    \"{name}\": {{')\n        code_lines.append(f'        \"resource_id\": \"{data[\"resource_id\"]}\",')\n        code_lines.append(f'        \"effect_id\": \"{data[\"effect_id\"]}\",')\n        code_lines.append(f'        \"name\": \"{data[\"name\"]}\",')\n        code_lines.append(f'        \"is_vip\": {data[\"is_vip\"]}')  # Use Python boolean directly\n        code_lines.append(f\"    }}{comma}\")\n    \n    code_lines.append(\"}\")\n    \n    return \"\\n\".join(code_lines)\n\n\ndef main():\n    # 读取 data.ts 文件\n    data_file = \"d:\\\\code\\\\GitHub\\\\capcut-mate\\\\data.ts\"\n    \n    print(\"=\" * 60)\n    print(\"开始从 data.ts 提取花字效果...\")\n    print(\"=\" * 60)\n    \n    # 提取花字效果\n    text_effects = extract_text_effects_from_data_ts(data_file)\n    \n    print(f\"\\n成功提取 {len(text_effects)} 个花字效果\")\n    \n    # 显示前 20 个效果\n    print(\"\\n前 20 个花字效果:\")\n    for i, (name, data) in enumerate(list(text_effects.items())[:20]):\n        vip_tag = \" [VIP]\" if data[\"is_vip\"] else \"\"\n        print(f\"  {i+1}. {name}{vip_tag} (ID: {data['effect_id']})\")\n    \n    # 统计 VIP 和免费数量\n    vip_count = sum(1 for data in text_effects.values() if data[\"is_vip\"])\n    free_count = len(text_effects) - vip_count\n    \n    print(f\"\\nVIP 效果数量：{vip_count}\")\n    print(f\"免费效果数量：{free_count}\")\n    \n    # 生成 Python 映射代码\n    print(\"\\n生成 Python 映射代码...\")\n    python_code = generate_python_mapping(text_effects)\n    \n    # 保存到文件\n    output_file = \"d:\\\\code\\\\GitHub\\\\capcut-mate\\\\text_effect_map_generated.py\"\n    with open(output_file, 'w', encoding='utf-8') as f:\n        f.write(python_code)\n    \n    print(f\"\\n映射表已保存到：{output_file}\")\n    print(\"=\" * 60)\n    \n    return text_effects\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "tools/query_sticker.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\n\"\"\"\n获取贴纸信息的工具脚本\n通过调用 Coze API 的 workflow 接口获取贴纸信息，并将结果保存为 JSON 文件\n\"\"\"\n\nimport json\nimport urllib.request\nimport sys\nimport os\n\n# 配置文件路径\nOUTPUT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)))\n\n# 默认配置\nDEFAULT_CONFIG = {\n    \"workflow_id\": \"7583908377370361871\",\n    \"auth_token\": \"pat_fUi05j4gGqMOPZMun2n3uRlK0o7SATWX3bPPh1lSJuFktmpJjRStWiG7LtlmIOrc\",\n    \"output_file\": os.path.join(OUTPUT_DIR, \"sticker.json\")\n}\n\ndef query_stickers(keyword, workflow_id=None, auth_token=None):\n    \"\"\"\n    调用 Coze API 获取贴纸信息\n    \n    Args:\n        keyword (str): 搜索关键词\n        workflow_id (str): workflow ID\n        auth_token (str): 认证令牌\n        \n    Returns:\n        dict: API 响应结果\n    \"\"\"\n    \n    # 使用传入参数或配置文件中的参数\n    wid = workflow_id or DEFAULT_CONFIG[\"workflow_id\"]\n    token = auth_token or DEFAULT_CONFIG[\"auth_token\"]\n    \n    # 构造请求\n    url = \"https://api.coze.cn/v1/workflow/run\"\n    headers = {\n        \"Authorization\": f\"Bearer {token}\",\n        \"Content-Type\": \"application/json\"\n    }\n    \n    payload = {\n        \"workflow_id\": wid,\n        \"parameters\": {\n            \"keyword\": keyword\n        },\n        \"is_async\": False\n    }\n    \n    # 发送请求\n    try:\n        req = urllib.request.Request(\n            url=url,\n            data=json.dumps(payload).encode('utf-8'),\n            headers=headers,\n            method='POST'\n        )\n        \n        with urllib.request.urlopen(req) as response:\n            result = json.loads(response.read().decode('utf-8'))\n            \n        return result\n    except urllib.error.HTTPError as e:\n        error_response = e.read().decode('utf-8')\n        print(f\"HTTP 错误 {e.code}: {error_response}\")\n        return {\"error\": f\"HTTP Error {e.code}\", \"message\": error_response}\n    except Exception as e:\n        print(f\"请求失败: {e}\")\n        return {\"error\": \"Request Failed\", \"message\": str(e)}\n\n\ndef save_result(result, output_file=None):\n    \"\"\"\n    保存结果到 JSON 文件，格式与 config/sticker.json 一致\n    \n    Args:\n        result (dict): 要保存的结果\n        output_file (str): 输出文件路径\n    \"\"\"\n    \n    try:\n        # 如果没有提供输出文件路径，则使用默认配置\n        if output_file is None:\n            output_file = DEFAULT_CONFIG[\"output_file\"]\n            \n        # 确保输出目录存在\n        os.makedirs(os.path.dirname(output_file), exist_ok=True)\n        \n        # 解析实际的贴纸数据\n        sticker_data = []\n        if \"data\" in result:\n            # 解析嵌套的 JSON 数据\n            data_content = result[\"data\"]\n            if isinstance(data_content, str):\n                # 如果是字符串，需要再次解析为 JSON\n                try:\n                    data_content = json.loads(data_content)\n                except json.JSONDecodeError as e:\n                    print(f\"解析JSON数据失败: {e}\")\n                    data_content = {}\n                \n            if isinstance(data_content, dict) and \"data\" in data_content:\n                sticker_data = data_content[\"data\"]\n                # 确保sticker_data是一个列表，即使它是None\n                if sticker_data is None:\n                    sticker_data = []\n                elif not isinstance(sticker_data, list):\n                    print(f\"警告: sticker_data不是列表类型，而是 {type(sticker_data)}\")\n                    sticker_data = []        \n        # 保存结果，只保存贴纸数组部分\n        with open(output_file, 'w', encoding='utf-8') as f:\n            json.dump(sticker_data, f, indent=2, ensure_ascii=False)\n            \n        return output_file\n    except Exception as e:\n        print(f\"保存结果失败: {e}\")\n        return None\n\n\ndef query_multiple_keywords(keywords, output_file=None):\n    \"\"\"\n    循环调用query_stickers接口，查询多个关键词并将结果合并输出到文件\n    \n    Args:\n        keywords (list): 关键词列表\n        output_file (str): 输出文件路径\n    \"\"\"\n    all_stickers = []\n    \n    for keyword in keywords:\n        print(f\"正在搜索关键词 '{keyword}' 的贴纸...\")\n        \n        # 查询贴纸\n        result = query_stickers(keyword)\n        \n        # 显示结果\n        if \"error\" in result:\n            print(f\"查询关键词 '{keyword}' 失败: {result}\")\n        else:\n            print(f\"查询关键词 '{keyword}' 成功!\")\n            # 解析实际的贴纸数据\n            sticker_data = []\n            if \"data\" in result:\n                data_content = result[\"data\"]\n                if isinstance(data_content, str):\n                    # 如果是字符串，需要再次解析为 JSON\n                    try:\n                        data_content = json.loads(data_content)\n                    except json.JSONDecodeError as e:\n                        print(f\"解析JSON数据失败: {e}\")\n                        data_content = {}\n                    \n                if isinstance(data_content, dict) and \"data\" in data_content:\n                    sticker_data = data_content[\"data\"]\n                    # 确保sticker_data是一个列表，即使它是None\n                    if sticker_data is None:\n                        sticker_data = []\n                    elif not isinstance(sticker_data, list):\n                        print(f\"警告: sticker_data不是列表类型，而是 {type(sticker_data)}\")\n                        sticker_data = []\n            \n            print(f\"关键词 '{keyword}' 找到 {len(sticker_data)} 个贴纸\")\n            # 合并贴纸数据\n            all_stickers.extend(sticker_data)\n    \n    # 去重处理，根据sticker_id去重\n    unique_stickers = []\n    seen_ids = set()\n    for sticker in all_stickers:\n        sticker_id = sticker.get(\"sticker_id\")\n        if sticker_id and sticker_id not in seen_ids:\n            unique_stickers.append(sticker)\n            seen_ids.add(sticker_id)\n    \n    print(f\"总共找到 {len(unique_stickers)} 个不重复的贴纸\")\n    \n    # 保存合并后的结果\n    try:\n        # 如果没有提供输出文件路径，则使用默认配置\n        if output_file is None:\n            output_file = DEFAULT_CONFIG[\"output_file\"]\n            \n        # 确保输出目录存在\n        os.makedirs(os.path.dirname(output_file), exist_ok=True)\n        \n        # 保存结果，只保存贴纸数组部分\n        with open(output_file, 'w', encoding='utf-8') as f:\n            json.dump(unique_stickers, f, indent=2, ensure_ascii=False)\n            \n        print(f\"合并结果已保存到: {output_file}\")\n        return output_file\n    except Exception as e:\n        print(f\"保存合并结果失败: {e}\")\n        return None\n\n\ndef get_common_chinese_characters():\n    \"\"\"\n    返回常用汉字列表（部分）\n    这里只列出一部分常用汉字作为示例，实际应用中可以扩展到3500个常用汉字\n    \"\"\"\n    # 常用汉字示例（实际应用中应包含更多汉字）\n    common_chars = [\n        # 高频汉字\n        \"的\", \"一\", \"是\", \"在\", \"不\", \"了\", \"有\", \"和\", \"人\", \"这\",\n        \"中\", \"大\", \"为\", \"上\", \"个\", \"国\", \"我\", \"以\", \"要\", \"他\",\n        \"时\", \"来\", \"用\", \"们\", \"生\", \"到\", \"作\", \"地\", \"于\", \"出\",\n        \"就\", \"分\", \"对\", \"成\", \"会\", \"可\", \"主\", \"发\", \"年\", \"动\",\n        \"同\", \"工\", \"也\", \"能\", \"下\", \"过\", \"子\", \"说\", \"产\", \"种\",\n        \"面\", \"而\", \"方\", \"后\", \"多\", \"定\", \"行\", \"学\", \"法\", \"所\",\n        \"民\", \"得\", \"经\", \"十\", \"三\", \"之\", \"进\", \"着\", \"等\", \"部\",\n        \"度\", \"家\", \"电\", \"力\", \"里\", \"如\", \"水\", \"化\", \"高\", \"自\",\n        \"二\", \"理\", \"起\", \"小\", \"物\", \"现\", \"实\", \"加\", \"量\", \"都\",\n        \"两\", \"体\", \"制\", \"机\", \"当\", \"使\", \"点\", \"从\", \"业\", \"本\",\n        \"去\", \"把\", \"性\", \"好\", \"应\", \"开\", \"它\", \"合\", \"还\", \"因\",\n        \"由\", \"其\", \"些\", \"然\", \"前\", \"外\", \"天\", \"政\", \"四\", \"日\",\n        \"那\", \"社\", \"义\", \"事\", \"平\", \"形\", \"相\", \"全\", \"表\", \"间\",\n        \"样\", \"与\", \"关\", \"各\", \"重\", \"新\", \"线\", \"内\", \"数\", \"正\",\n        \"心\", \"反\", \"你\", \"明\", \"看\", \"原\", \"又\", \"么\", \"利\", \"比\",\n        \"或\", \"但\", \"质\", \"气\", \"第\", \"向\", \"道\", \"命\", \"此\", \"变\",\n        \"条\", \"只\", \"没\", \"结\", \"解\", \"问\", \"意\", \"建\", \"月\", \"公\",\n        \"无\", \"系\", \"军\", \"很\", \"情\", \"者\", \"最\", \"立\", \"代\", \"想\",\n        \"已\", \"通\", \"并\", \"提\", \"直\", \"题\", \"党\", \"程\", \"展\", \"五\",\n        \"果\", \"料\", \"象\", \"员\", \"革\", \"位\", \"入\", \"常\", \"文\", \"总\",\n        \"次\", \"品\", \"式\", \"活\", \"设\", \"及\", \"管\", \"特\", \"件\", \"长\",\n        \"求\", \"老\", \"头\", \"基\", \"资\", \"边\", \"流\", \"路\", \"级\", \"少\",\n        \"图\", \"山\", \"统\", \"接\", \"知\", \"较\", \"将\", \"组\", \"见\", \"计\",\n        \"别\", \"她\", \"手\", \"角\", \"期\", \"根\", \"论\", \"运\", \"农\", \"指\",\n        \"几\", \"九\", \"区\", \"强\", \"放\", \"决\", \"西\", \"被\", \"干\", \"做\",\n        \"必\", \"战\", \"先\", \"回\", \"则\", \"任\", \"取\", \"据\", \"处\", \"队\",\n        \"南\", \"给\", \"色\", \"光\", \"门\", \"即\", \"保\", \"治\", \"北\", \"造\",\n        \"百\", \"规\", \"热\", \"领\", \"七\", \"海\", \"口\", \"东\", \"导\", \"器\",\n        \"压\", \"志\", \"世\", \"金\", \"增\", \"争\", \"济\", \"阶\", \"油\", \"思\",\n        \"术\", \"极\", \"交\", \"受\", \"联\", \"什\", \"认\", \"六\", \"共\", \"权\",\n        \"收\", \"证\", \"改\", \"清\", \"美\", \"再\", \"采\", \"转\", \"更\", \"单\",\n        \"风\", \"切\", \"打\", \"白\", \"教\", \"速\", \"花\", \"带\", \"安\", \"场\",\n        \"身\", \"车\", \"例\", \"真\", \"务\", \"具\", \"万\", \"每\", \"目\", \"至\",\n        \"达\", \"走\", \"积\", \"示\", \"议\", \"声\", \"报\", \"斗\", \"完\", \"类\",\n        \"八\", \"离\", \"华\", \"名\", \"确\", \"才\", \"科\", \"张\", \"信\", \"马\",\n        \"节\", \"话\", \"米\", \"整\", \"空\", \"元\", \"况\", \"今\", \"集\", \"温\",\n        \"传\", \"土\", \"许\", \"步\", \"群\", \"广\", \"石\", \"记\", \"需\", \"段\",\n        \"研\", \"界\", \"拉\", \"林\", \"律\", \"叫\", \"且\", \"究\", \"观\", \"越\",\n        \"织\", \"装\", \"影\", \"算\", \"低\", \"持\", \"音\", \"众\", \"书\", \"布\",\n        \"复\", \"容\", \"儿\", \"须\", \"际\", \"商\", \"非\", \"验\", \"连\", \"断\",\n        \"深\", \"难\", \"近\", \"矿\", \"千\", \"周\", \"委\", \"素\", \"技\", \"备\",\n        \"半\", \"办\", \"青\", \"省\", \"列\", \"习\", \"响\", \"约\", \"支\", \"般\",\n        \"史\", \"感\", \"劳\", \"便\", \"团\", \"往\", \"酸\", \"历\", \"市\", \"克\",\n        \"何\", \"除\", \"消\", \"构\", \"府\", \"称\", \"太\", \"准\", \"精\", \"值\",\n        \"号\", \"率\", \"族\", \"维\", \"划\", \"选\", \"标\", \"写\", \"存\", \"候\",\n        \"毛\", \"亲\", \"快\", \"效\", \"斯\", \"院\", \"查\", \"江\", \"型\", \"眼\",\n        \"王\", \"按\", \"格\", \"养\", \"易\", \"置\", \"派\", \"层\", \"片\", \"始\",\n        \"却\", \"专\", \"状\", \"育\", \"厂\", \"京\", \"识\", \"适\", \"属\", \"圆\",\n        \"包\", \"火\", \"住\", \"调\", \"满\", \"县\", \"局\", \"照\", \"参\", \"红\",\n        \"细\", \"引\", \"听\", \"该\", \"铁\", \"价\", \"严\", \"首\", \"底\", \"液\",\n        \"官\", \"德\", \"随\", \"病\", \"苏\", \"失\", \"尔\", \"死\", \"讲\", \"配\",\n        \"女\", \"黄\", \"推\", \"显\", \"谈\", \"罪\", \"神\", \"艺\", \"呢\", \"席\",\n        \"含\", \"企\", \"望\", \"密\", \"批\", \"营\", \"项\", \"防\", \"举\", \"球\",\n        \"英\", \"氧\", \"势\", \"告\", \"李\", \"台\", \"落\", \"木\", \"帮\", \"轮\",\n        \"破\", \"亚\", \"师\", \"围\", \"注\", \"远\", \"字\", \"材\", \"排\", \"供\",\n        \"河\", \"态\", \"封\", \"另\", \"施\", \"减\", \"树\", \"溶\", \"怎\", \"止\",\n        \"案\", \"言\", \"士\", \"均\", \"武\", \"固\", \"叶\", \"鱼\", \"波\", \"视\",\n        \"仅\", \"费\", \"紧\", \"爱\", \"左\", \"章\", \"早\", \"朝\", \"害\", \"续\",\n        \"轻\", \"服\", \"试\", \"食\", \"充\", \"兵\", \"源\", \"判\", \"护\", \"司\",\n        \"足\", \"某\", \"练\", \"差\", \"致\", \"板\", \"田\", \"降\", \"黑\", \"犯\",\n        \"负\", \"击\", \"范\", \"继\", \"兴\", \"似\", \"余\", \"坚\", \"曲\", \"输\",\n        \"修\", \"故\", \"城\", \"夫\", \"够\", \"送\", \"笔\", \"船\", \"占\", \"右\",\n        \"财\", \"吃\", \"富\", \"春\", \"职\", \"觉\", \"汉\", \"画\", \"功\", \"巴\",\n        \"跟\", \"虽\", \"杂\", \"飞\", \"检\", \"吸\", \"助\", \"升\", \"阳\", \"互\",\n        \"初\", \"创\", \"抗\", \"考\", \"投\", \"坏\", \"策\", \"古\", \"径\", \"换\",\n        \"未\", \"跑\", \"留\", \"钢\", \"曾\", \"端\", \"责\", \"站\", \"简\", \"述\",\n        \"钱\", \"副\", \"尽\", \"帝\", \"射\", \"草\", \"冲\", \"承\", \"独\", \"令\",\n        \"限\", \"阿\", \"宣\", \"环\", \"双\", \"请\", \"超\", \"微\", \"让\", \"控\",\n        \"州\", \"良\", \"轴\", \"找\", \"否\", \"纪\", \"益\", \"依\", \"优\", \"顶\",\n        \"础\", \"载\", \"倒\", \"房\", \"突\", \"坐\", \"粉\", \"敌\", \"略\", \"客\",\n        \"袁\", \"冷\", \"胜\", \"绝\", \"析\", \"块\", \"剂\", \"测\", \"丝\", \"协\",\n        \"诉\", \"念\", \"陈\", \"仍\", \"罗\", \"盐\", \"友\", \"洋\", \"错\", \"苦\",\n        \"夜\", \"刑\", \"移\", \"频\", \"逐\", \"靠\", \"混\", \"母\", \"短\", \"皮\",\n        \"终\", \"聚\", \"汽\", \"村\", \"云\", \"哪\", \"既\", \"距\", \"卫\", \"停\",\n        \"烈\", \"央\", \"察\", \"烧\", \"迅\", \"境\", \"若\", \"印\", \"洲\", \"刻\",\n        \"括\", \"激\", \"孔\", \"搞\", \"甚\", \"室\", \"待\", \"核\", \"校\", \"散\",\n        \"侵\", \"吧\", \"甲\", \"游\", \"久\", \"菜\", \"味\", \"旧\", \"模\", \"湖\",\n        \"货\", \"损\", \"预\", \"阻\", \"毫\", \"普\", \"稳\", \"乙\", \"妈\", \"植\",\n        \"息\", \"扩\", \"银\", \"语\", \"挥\", \"酒\", \"守\", \"拿\", \"序\", \"纸\",\n        \"医\", \"缺\", \"雨\", \"吗\", \"针\", \"刘\", \"啊\", \"急\", \"唱\", \"误\",\n        \"训\", \"愿\", \"审\", \"附\", \"获\", \"茶\", \"鲜\", \"粮\", \"斤\", \"孩\",\n        \"脱\", \"硫\", \"肥\", \"善\", \"龙\", \"演\", \"父\", \"渐\", \"血\", \"欢\",\n        \"械\", \"掌\", \"歌\", \"沙\", \"刚\", \"攻\", \"谓\", \"盾\", \"讨\", \"晚\",\n        \"粒\", \"乱\", \"燃\", \"矛\", \"乎\", \"杀\", \"药\", \"宁\", \"鲁\", \"贵\",\n        \"钟\", \"煤\", \"读\", \"班\", \"伯\", \"香\", \"介\", \"迫\", \"句\", \"丰\",\n        \"培\", \"握\", \"兰\", \"担\", \"弦\", \"蛋\", \"沉\", \"假\", \"穿\", \"执\",\n        \"答\", \"乐\", \"谁\", \"顺\", \"烟\", \"缩\", \"征\", \"脸\", \"喜\", \"松\",\n        \"脚\", \"困\", \"异\", \"免\", \"背\", \"星\", \"福\", \"买\", \"染\", \"井\",\n        \"概\", \"慢\", \"怕\", \"磁\", \"倍\", \"祖\", \"皇\", \"促\", \"静\", \"补\",\n        \"评\", \"翻\", \"肉\", \"践\", \"尼\", \"衣\", \"宽\", \"扬\", \"棉\", \"希\",\n        \"伤\", \"操\", \"垂\", \"秋\", \"宜\", \"氢\", \"套\", \"督\", \"振\", \"架\",\n        \"亮\", \"末\", \"宪\", \"庆\", \"编\", \"牛\", \"触\", \"映\", \"雷\", \"销\",\n        \"诗\", \"座\", \"居\", \"抓\", \"裂\", \"胞\", \"呼\", \"娘\", \"景\", \"威\",\n        \"绿\", \"晶\", \"厚\", \"盟\", \"衡\", \"鸡\", \"孙\", \"延\", \"危\", \"胶\",\n        \"屋\", \"乡\", \"临\", \"陆\", \"顾\", \"掉\", \"呀\", \"灯\", \"岁\", \"措\",\n        \"束\", \"耐\", \"剧\", \"玉\", \"赵\", \"跳\", \"哥\", \"季\", \"课\", \"凯\",\n        \"胡\", \"额\", \"款\", \"绍\", \"卷\", \"齐\", \"伟\", \"蒸\", \"殖\", \"永\",\n        \"宗\", \"苗\", \"川\", \"炉\", \"岩\", \"弱\", \"零\", \"杨\", \"奏\", \"沿\",\n        \"露\", \"杆\", \"探\", \"滑\", \"镇\", \"饭\", \"浓\", \"航\", \"怀\", \"赶\",\n        \"库\", \"夺\", \"伊\", \"灵\", \"税\", \"途\", \"灭\", \"赛\", \"归\", \"召\",\n        \"鼓\", \"播\", \"盘\", \"裁\", \"险\", \"康\", \"唯\", \"录\", \"菌\", \"纯\",\n        \"借\", \"糖\", \"盖\", \"横\", \"符\", \"私\", \"努\", \"堂\", \"域\", \"枪\",\n        \"润\", \"幅\", \"哈\", \"竟\", \"熟\", \"虫\", \"泽\", \"脑\", \"壤\", \"碳\",\n        \"欧\", \"遍\", \"侧\", \"寨\", \"敢\", \"彻\", \"虑\", \"斜\", \"薄\", \"庭\",\n        \"纳\", \"弹\", \"饲\", \"伸\", \"折\", \"麦\", \"湿\", \"暗\", \"荷\", \"瓦\",\n        \"塞\", \"床\", \"筑\", \"恶\", \"户\", \"访\", \"塔\", \"奇\", \"透\", \"梁\",\n        \"刀\", \"旋\", \"迹\", \"卡\", \"氯\", \"遇\", \"份\", \"毒\", \"泥\", \"退\",\n        \"洗\", \"摆\", \"灰\", \"彩\", \"卖\", \"耗\", \"夏\", \"择\", \"忙\", \"铜\",\n        \"献\", \"硬\", \"予\", \"繁\", \"圈\", \"雪\", \"函\", \"亦\", \"抽\", \"篇\",\n        \"阵\", \"阴\", \"丁\", \"尺\", \"追\", \"堆\", \"雄\", \"迎\", \"泛\", \"爸\",\n        \"楼\", \"避\", \"谋\", \"吨\", \"野\", \"猪\", \"旗\", \"累\", \"偏\", \"典\",\n        \"馆\", \"索\", \"秦\", \"脂\", \"潮\", \"爷\", \"豆\", \"忽\", \"托\", \"惊\",\n        \"塑\", \"遗\", \"愈\", \"朱\", \"替\", \"纤\", \"粗\", \"倾\", \"尚\", \"痛\",\n        \"楚\", \"谢\", \"奋\", \"购\", \"磨\", \"君\", \"池\", \"旁\", \"碎\", \"骨\",\n        \"监\", \"捕\", \"弟\", \"暴\", \"割\", \"贯\", \"殊\", \"释\", \"词\", \"亡\",\n        \"壁\", \"顿\", \"宝\", \"午\", \"尘\", \"闻\", \"揭\", \"炮\", \"残\", \"冬\",\n        \"桥\", \"妇\", \"警\", \"综\", \"招\", \"吴\", \"付\", \"浮\", \"遭\", \"徐\",\n        \"您\", \"摇\", \"谷\", \"赞\", \"箱\", \"隔\", \"订\", \"男\", \"吹\", \"园\",\n        \"纷\", \"唐\", \"败\", \"宋\", \"玻\", \"巨\", \"耕\", \"坦\", \"荣\", \"闭\",\n        \"湾\", \"键\", \"凡\", \"驻\", \"锅\", \"救\", \"恩\", \"剥\", \"凝\", \"碱\",\n        \"齿\", \"截\", \"炼\", \"麻\", \"纺\", \"禁\", \"废\", \"盛\", \"版\", \"缓\",\n        \"净\", \"睛\", \"昌\", \"婚\", \"涉\", \"筒\", \"嘴\", \"插\", \"岸\", \"朗\",\n        \"庄\", \"街\", \"藏\", \"姑\", \"贸\", \"腐\", \"奴\", \"啦\", \"惯\", \"乘\",\n        \"伙\", \"恢\", \"匀\", \"纱\", \"扎\", \"辩\", \"耳\", \"彪\", \"臣\", \"亿\",\n        \"璃\", \"抵\", \"脉\", \"秀\", \"萨\", \"俄\", \"网\", \"舞\", \"店\", \"喷\",\n        \"纵\", \"寸\", \"汗\", \"挂\", \"洪\", \"贺\", \"闪\", \"柬\", \"爆\", \"烯\",\n        \"津\", \"稻\", \"墙\", \"软\", \"勇\", \"像\", \"滚\", \"厘\", \"蒙\", \"芳\",\n        \"肯\", \"坡\", \"柱\", \"荡\", \"腿\", \"仪\", \"旅\", \"尾\", \"轧\", \"冰\",\n        \"贡\", \"登\", \"黎\", \"削\", \"钻\", \"勒\", \"逃\", \"障\", \"氨\", \"郭\",\n        \"峰\", \"币\", \"港\", \"伏\", \"轨\", \"亩\", \"毕\", \"擦\", \"莫\", \"刺\",\n        \"浪\", \"秘\", \"援\", \"株\", \"健\", \"售\", \"股\", \"岛\", \"甘\", \"泡\",\n        \"睡\", \"童\", \"铸\", \"汤\", \"阀\", \"休\", \"汇\", \"舍\", \"牧\", \"绕\",\n        \"炸\", \"哲\", \"磷\", \"绩\", \"朋\", \"淡\", \"尖\", \"启\", \"陷\", \"柴\",\n        \"呈\", \"徒\", \"颜\", \"泪\", \"稍\", \"忘\", \"泵\", \"蓝\", \"拖\", \"洞\",\n        \"授\", \"镜\", \"辛\", \"壮\", \"锋\", \"贫\", \"虚\", \"弯\", \"摩\", \"泰\",\n        \"幼\", \"廷\", \"尊\", \"窗\", \"纲\", \"弄\", \"隶\", \"疑\", \"氏\", \"宫\",\n        \"姐\", \"震\", \"瑞\", \"怪\", \"尤\", \"琴\", \"循\", \"描\", \"膜\", \"违\",\n        \"夹\", \"腰\", \"缘\", \"珠\", \"穷\", \"森\", \"枝\", \"竹\", \"沟\", \"催\",\n        \"绳\", \"忆\", \"邦\", \"剩\", \"幸\", \"浆\", \"栏\", \"拥\", \"牙\", \"贮\",\n        \"礼\", \"滤\", \"钠\", \"纹\", \"罢\", \"拍\", \"咱\", \"喊\", \"袖\", \"埃\",\n        \"勤\", \"罚\", \"焦\", \"潜\", \"伍\", \"墨\", \"欲\", \"缝\", \"姓\", \"刊\",\n        \"饱\", \"仿\", \"奖\", \"铝\", \"鬼\", \"丽\", \"跨\", \"默\", \"挖\", \"链\",\n        \"扫\", \"喝\", \"袋\", \"炭\", \"污\", \"幕\", \"诸\", \"弧\", \"励\", \"梅\",\n        \"奶\", \"洁\", \"灾\", \"舟\", \"鉴\", \"苯\", \"讼\", \"抱\", \"毁\", \"懂\",\n        \"寒\", \"智\", \"埔\", \"寄\", \"届\", \"跃\", \"渡\", \"挑\", \"丹\", \"艰\",\n        \"贝\", \"碰\", \"拔\", \"爹\", \"戴\", \"码\", \"梦\", \"芽\", \"熔\", \"赤\",\n        \"渔\", \"哭\", \"敬\", \"颗\", \"奔\", \"铅\", \"仲\", \"虎\", \"稀\", \"妹\",\n        \"乏\", \"珍\", \"申\", \"桌\", \"遵\", \"允\", \"隆\", \"螺\", \"仓\", \"魏\",\n        \"锐\", \"晓\", \"氮\", \"兼\", \"隐\", \"碍\", \"赫\", \"拨\", \"忠\", \"肃\",\n        \"缸\", \"牵\", \"抢\", \"博\", \"巧\", \"壳\", \"兄\", \"杜\", \"讯\", \"诚\",\n        \"碧\", \"祥\", \"柯\", \"页\", \"巡\", \"矩\", \"悲\", \"灌\", \"龄\", \"伦\",\n        \"票\", \"寻\", \"桂\", \"铺\", \"圣\", \"恐\", \"恰\", \"郑\", \"趣\", \"抬\",\n        \"荒\", \"腾\", \"贴\", \"柔\", \"滴\", \"猛\", \"阔\", \"辆\", \"妻\", \"填\",\n        \"撤\", \"储\", \"签\", \"闹\", \"扰\", \"紫\", \"砂\", \"递\", \"戏\", \"吊\",\n        \"陶\", \"伐\", \"喂\", \"疗\", \"瓶\", \"婆\", \"抚\", \"臂\", \"摸\", \"忍\",\n        \"虾\", \"蜡\", \"邻\", \"胸\", \"巩\", \"挤\", \"偶\", \"弃\", \"槽\", \"劲\",\n        \"乳\", \"邓\", \"吉\", \"仁\", \"烂\", \"砖\", \"租\", \"乌\", \"舰\", \"伴\",\n        \"瓜\", \"浅\", \"丙\", \"暂\", \"燥\", \"橡\", \"柳\", \"迷\", \"暖\", \"牌\",\n        \"秧\", \"胆\", \"详\", \"簧\", \"踏\", \"瓷\", \"谱\", \"呆\", \"宾\", \"糊\",\n        \"洛\", \"辉\", \"愤\", \"竞\", \"隙\", \"怒\", \"粘\", \"乃\", \"绪\", \"肩\",\n        \"籍\", \"敏\", \"涂\", \"熙\", \"皆\", \"侦\", \"悬\", \"掘\", \"享\", \"纠\",\n        \"醒\", \"狂\", \"锁\", \"淀\", \"恨\", \"牲\", \"霸\", \"爬\", \"赏\", \"逆\",\n        \"玩\", \"陵\", \"祝\", \"秒\", \"浙\", \"貌\", \"役\", \"彼\", \"悉\", \"鸭\",\n        \"趋\", \"凤\", \"晨\", \"畜\", \"辈\", \"秩\", \"卵\", \"署\", \"梯\", \"炎\",\n        \"滩\", \"棋\", \"驱\", \"筛\", \"峡\", \"冒\", \"啥\", \"寿\", \"译\", \"浸\",\n        \"泉\", \"帽\", \"迟\", \"硅\", \"疆\", \"贷\", \"漏\", \"稿\", \"冠\", \"嫩\",\n        \"胁\", \"芯\", \"牢\", \"叛\", \"蚀\", \"奥\", \"鸣\", \"岭\", \"羊\", \"凭\",\n        \"串\", \"塘\", \"绘\", \"酵\", \"融\", \"盆\", \"锡\", \"庙\", \"筹\", \"冻\",\n        \"辅\", \"摄\", \"袭\", \"筋\", \"拒\", \"僚\", \"旱\", \"钾\", \"鸟\", \"漆\",\n        \"沈\", \"眉\", \"疏\", \"添\", \"棒\", \"穗\", \"硝\", \"韩\", \"逼\", \"扭\",\n        \"侨\", \"凉\", \"挺\", \"碗\", \"栽\", \"炒\", \"杯\", \"患\", \"馏\", \"劝\",\n        \"豪\", \"辽\", \"勃\", \"鸿\", \"旦\", \"吏\", \"拜\", \"狗\", \"埋\", \"辊\",\n        \"掩\", \"饮\", \"搬\", \"骂\", \"辞\", \"勾\", \"扣\", \"估\", \"蒋\", \"绒\",\n        \"雾\", \"丈\", \"朵\", \"姆\", \"拟\", \"宇\", \"辑\", \"陕\", \"雕\", \"偿\",\n        \"蓄\", \"崇\", \"剪\", \"倡\", \"厅\", \"咬\", \"驶\", \"薯\", \"刷\", \"斥\",\n        \"番\", \"赋\", \"奉\", \"佛\", \"浇\", \"漫\", \"曼\", \"扇\", \"钙\", \"桃\",\n        \"扶\", \"仔\", \"返\", \"俗\", \"亏\", \"腔\", \"鞋\", \"棱\", \"覆\", \"框\",\n        \"悄\", \"叔\", \"撞\", \"骗\", \"勘\", \"旺\", \"沸\", \"孤\", \"吐\", \"孟\",\n        \"渠\", \"屈\", \"疾\", \"妙\", \"惜\", \"仰\", \"狠\", \"胀\", \"谐\", \"抛\",\n        \"霉\", \"桑\", \"岗\", \"嘛\", \"衰\", \"盗\", \"渗\", \"脏\", \"赖\", \"涌\",\n        \"甜\", \"曹\", \"阅\", \"肌\", \"哩\", \"厉\", \"烃\", \"纬\", \"毅\", \"昨\",\n        \"伪\", \"症\", \"煮\", \"叹\", \"钉\", \"搭\", \"茎\", \"笼\", \"酷\", \"偷\",\n        \"弓\", \"锥\", \"恒\", \"杰\", \"坑\", \"鼻\", \"翼\", \"纶\", \"叙\", \"狱\",\n        \"逮\", \"罐\", \"络\", \"棚\", \"抑\", \"膨\", \"蔬\", \"寺\", \"骤\", \"穆\",\n        \"冶\", \"枯\", \"册\", \"尸\", \"凸\", \"绅\", \"坯\", \"牺\", \"焰\", \"轰\",\n        \"欣\", \"晋\", \"瘦\", \"御\", \"锭\", \"锦\", \"丧\", \"旬\", \"锻\", \"垄\",\n        \"搜\", \"扑\", \"邀\", \"亭\", \"酯\", \"迈\", \"舒\", \"脆\", \"酶\", \"闲\",\n        \"忧\", \"酚\", \"顽\", \"羽\", \"涨\", \"卸\", \"仗\", \"陪\", \"辟\", \"惩\",\n        \"杭\", \"姚\", \"肚\", \"捉\", \"飘\", \"漂\", \"昆\", \"欺\", \"吾\", \"郎\",\n        \"烷\", \"汁\", \"呵\", \"饰\", \"萧\", \"雅\", \"邮\", \"迁\", \"燕\", \"撒\",\n        \"姻\", \"赴\", \"宴\", \"烦\", \"债\", \"帐\", \"斑\", \"铃\", \"旨\", \"醇\",\n        \"董\", \"饼\", \"雏\", \"姿\", \"拌\", \"傅\", \"腹\", \"妥\", \"揉\", \"贤\",\n        \"拆\", \"歪\", \"葡\", \"胺\", \"丢\", \"浩\", \"徽\", \"昂\", \"垫\", \"挡\",\n        \"览\", \"贪\", \"慰\", \"缴\", \"汪\", \"慌\", \"冯\", \"诺\", \"姜\", \"谊\",\n        \"凶\", \"劣\", \"诬\", \"耀\", \"昏\", \"躺\", \"盈\", \"骑\", \"乔\", \"溪\",\n        \"丛\", \"卢\", \"抹\", \"闷\", \"咨\", \"刮\", \"驾\", \"缆\", \"悟\", \"摘\",\n        \"铒\", \"掷\", \"颇\", \"幻\", \"柄\", \"惠\", \"惨\", \"佳\", \"仇\", \"腊\",\n        \"窝\", \"涤\", \"剑\", \"瞧\", \"堡\", \"泼\", \"葱\", \"罩\", \"霍\", \"捞\",\n        \"胎\", \"苍\", \"滨\", \"俩\", \"捅\", \"湘\", \"砍\", \"霞\", \"邵\", \"萄\",\n        \"疯\", \"淮\", \"遂\", \"熊\", \"粪\", \"烘\", \"宿\", \"档\", \"戈\", \"驳\",\n        \"嫂\", \"裕\", \"徙\", \"箭\", \"捐\", \"肠\", \"撑\", \"晒\", \"辨\", \"殿\",\n        \"莲\", \"摊\", \"搅\", \"酱\", \"屏\", \"疫\", \"哀\", \"蔡\", \"堵\", \"沫\",\n        \"皱\", \"畅\", \"叠\", \"阁\", \"莱\", \"敲\", \"辖\", \"钩\", \"痕\", \"坝\",\n        \"巷\", \"饿\", \"祸\", \"丘\", \"玄\", \"溜\", \"曰\", \"逻\", \"彭\", \"尝\",\n        \"卿\", \"妨\", \"艇\", \"吞\", \"韦\", \"怨\", \"矮\", \"歇\"\n    ]\n    \n    return common_chars\n\n\ndef main():\n    \"\"\"主函数\"\"\"\n    # 剪映贴纸搜索关键词大全 - 按功能/风格等维度分类的字符串数组\n    # 核心功能类\n    function_keywords = [\n        \"箭头\", \"圆圈\", \"高亮\", \"进度条\", \"序号\", \"标签\", \"重点\", \"划重点\",\n        \"标题\", \"字幕\", \"弹幕\", \"泡泡字\", \"立体字\", \"花字\", \"手写体\", \"空心字\",\n        \"按钮\", \"图标\", \"导航栏\", \"弹窗\", \"加载\", \"二维码\", \"水印\",\n        \"马赛克\", \"遮挡\", \"模糊\", \"相框\", \"边框\", \"画框\", \"圆角\", \"虚线框\",\n        \"点赞\", \"关注\", \"收藏\", \"评论\", \"分享\", \"箭头指示\", \"手势\"\n    ]\n\n    # 风格/质感类\n    style_keywords = [\n        \"动态\", \"静态\", \"透明\", \"渐变\", \"发光\", \"闪烁\", \"粒子\", \"线条风\",\n        \"手绘\", \"卡通\", \"简约\", \"复古\", \"国潮\", \"赛博朋克\", \"科技感\", \"ins风\",\n        \"梦幻\", \"唯美\", \"治愈\", \"暗黑\", \"清新\", \"可爱\", \"搞怪\", \"酷飒\",\n        \"3D\", \"立体\", \"浮雕\", \"水墨\", \"剪纸\", \"像素\", \"涂鸦\", \"水彩\"\n    ]\n\n    # 情绪/表情类\n    emotion_keywords = [\n        \"爱心\", \"星星眼\", \"撒花\", \"开心\", \"快乐\", \"感动\", \"惊喜\", \"比心\",\n        \"无语\", \"满头问号\", \"难过\", \"生气\", \"尴尬\", \"流汗\", \"晕\", \"崩溃\",\n        \"震惊\", \"吐槽\", \"吃瓜\", \"doge\", \"捂脸\", \"大笑\", \"嘘\", \"害羞\",\n        \"优雅永不过时\", \"可云式震惊\", \"电子包浆\", \"栓Q\", \"绝绝子\"\n    ]\n\n    # 场景/节日类\n    scene_keywords = [\n        \"vlog\", \"美食\", \"旅行\", \"运动\", \"学习\", \"办公\", \"游戏\", \"宠物\",\n        \"春日\", \"夏日\", \"秋日\", \"冬日\", \"美拉德\", \"雪景\", \"落叶\", \"樱花\",\n        \"春节\", \"中秋\", \"国庆\", \"圣诞\", \"元旦\", \"情人节\", \"七夕\", \"端午\", \"开学季\",\n        \"直播\", \"促销\", \"抽奖\", \"婚礼\", \"生日\", \"派对\", \"毕业\", \"年会\"\n    ]\n\n    # 元素/对象类\n    element_keywords = [\n        \"太阳\", \"月亮\", \"星星\", \"云朵\", \"雨滴\", \"雪花\", \"火焰\", \"植物\", \"花朵\",\n        \"爱心\", \"气球\", \"礼物\", \"蛋糕\", \"汽车\", \"飞机\", \"动物\", \"水果\", \"零食\",\n        \"emoji\", \"标点\", \"数学符号\", \"货币符号\", \"国旗\", \"logo\", \"徽章\",\n        \"彩带\", \"气球\", \"烟花\", \"光斑\", \"爱心雨\", \"花瓣\", \"蝴蝶\", \"星星\"\n    ]\n\n    # 热门/分类类\n    hot_keywords = [\n        \"热门\", \"推荐\", \"爆款\", \"新贴纸\", \"VIP\", \"免费\",\n        \"抖音\", \"快手\", \"小红书\", \"B站\", \"视频号\",\n        \"脸部装饰\", \"手势识别\", \"AR贴纸\", \"特效贴纸\", \"动态贴纸\"\n    ]\n\n    # 获取常用汉字\n    chinese_characters = get_common_chinese_characters()\n\n    # 合并所有关键词到一个总数组（去重）\n    keywords = list(set(\n        function_keywords + style_keywords + emotion_keywords + scene_keywords + element_keywords + hot_keywords + chinese_characters\n    ))\n    \n    # 查询多个关键词并合并结果\n    output_file = query_multiple_keywords(keywords)\n    if not output_file:\n        print(\"查询或保存结果失败\")\n        sys.exit(1)\n\n\nif __name__ == \"__main__\":\n    main()"
  }
]