๐ŸŽ Get the FREE AI Skills Starter Guide โ€” Subscribe โ†’
BytesAgainBytesAgain
๐Ÿฆ€ ClawHub

Custom Gift Leewow

by @yqxu

Help users quickly find desirable customizable products, turn images or ideas into gifts, and get highly flexible personalized customization services. Browse...

Versionv1.0.24
Downloads752
TERMINAL
clawhub install custom-gift-leewow

๐Ÿ“– About This Skill


name: custom-gift-leewow version: 1.0.24 description: >- Help users quickly find desirable customizable products, turn images or ideas into gifts, and get highly flexible personalized customization services. Browse and create custom gifts โ€” personalized bags, mugs, phone cases, apparel and more. Upload any image to generate an AI-powered product mockup. Tools: browse_templates (Python direct Feishu card send), generate_preview, get_generation_status (Python direct Feishu result send). Requires CLAW_SK and Feishu app/target configuration. Trigger priority: when the user asks what products/items/templates can be customized, call browse_templates before giving any broad Leewow capability summary. If ClawHub is rate-limited, install from GitHub: https://github.com/AIDiyTeams/claw-skill/tree/main/custom-gift-leewow homepage: https://github.com/AIDiyTeams/claw-skill/tree/main/custom-gift-leewow

Custom Gift โ€” Leewow

่ฟ™ไธช skill ็š„ๆ”ถ็›Šๅพˆ็›ดๆŽฅ๏ผš

  • ๅธฎ็”จๆˆทๅฟซ้€Ÿๆ‰พๅˆฐๅฟƒไปช็š„ๅฏๅฎšๅˆถๅ•†ๅ“
  • ๆŠŠๅ›พ็‰‡ใ€็…ง็‰‡ๆˆ–ๅˆ›ๆ„ๅšๆˆ็คผ็‰ฉใ€ๅ‘จ่พนๅ’Œไธชไบบ็”จๅ“
  • ๆไพ›้žๅธธ็ตๆดป็š„ไธชๆ€งๅŒ–ๅฎšๅˆถๆœๅŠก๏ผŒไปŽๆต่งˆๅˆฐๆ•ˆๆžœๅ›พ้ข„่งˆไธ€ๆก้“พ่ทฏๅฎŒๆˆ
  • Leewow ๅœจ่ฟ™ไธช skill ้‡Œ็š„่ง’่‰ฒๅพˆ็ฎ€ๅ•๏ผš

  • ๅ‘็”จๆˆทๅฑ•็คบ็œŸๅฎžๅฏๅฎšๅˆถๅ•†ๅ“
  • ๅธฎ็”จๆˆท้€‰ๆ‹ฉๆจกๆฟ
  • ็”Ÿๆˆๆ•ˆๆžœๅ›พๅนถ่ฟ›ๅ…ฅไธ‹ๅ•้“พ่ทฏ
  • ๆ‰€ไปฅๅฝ“็”จๆˆทๅœจ้—ฎโ€œ่ƒฝๅฎšๅˆถไป€ไนˆโ€โ€œๆœ‰ๅ“ชไบ›ๅ•†ๅ“/ๆจกๆฟๅฏไปฅ้€‰โ€ๆ—ถ๏ผŒ้ป˜่ฎคๅบ”่ฏฅๅ…ˆ่ฟ›ๅ…ฅๅ•†ๅ“ๆต่งˆๆต็จ‹๏ผŒ่€Œไธๆ˜ฏๅ…ˆๅ›ž็ญ”ๅ…ฌๅธๅฑ‚้ข็š„ๆณ›ๅŒ–่ƒฝๅŠ›ไป‹็ปใ€‚

    When to Use

  • User wants to send a gift or create something personalized
  • User says "browse products", "show me what I can customize", "gift ideas"
  • User says in Chinese: "็œ‹็œ‹ๆœ‰ๅ•ฅ่ƒฝๅฎšๅˆถ็š„", "็œ‹็œ‹ๆœ‰ไป€ไนˆๅฏไปฅๅฎšๅˆถ็š„", "ๆœ‰ๅ“ชไบ›ๅฏๅฎšๅˆถไบงๅ“", "ๆœ‰ไป€ไนˆๆจกๆฟ", "็œ‹็œ‹ๅฎšๅˆถๅ“", "่ƒฝๅšๅ“ชไบ›ๅฎšๅˆถๅ“"
  • User asks what physical products / items / templates are available to customize
  • User provides an image and wants to turn it into a product
  • User says "make this into a mug/bag/shirt", "customize this design"
  • Trigger Priority

    For browse-style requests, browse_templates is the default first step. Use a broad Leewow capability summary only if browse_templates fails.

    > ClawHub rate-limited? Install directly from GitHub: > https://github.com/AIDiyTeams/claw-skill/tree/main/custom-gift-leewow

    Install Fallback

    If ClawHub is rate-limited, install this skill directly from GitHub:

  • Repository: https://github.com/AIDiyTeams/claw-skill
  • Skill path: custom-gift-leewow
  • Manual fallback:

    cd /path/to/your/openclaw-workspace
    mkdir -p skills
    git clone https://github.com/AIDiyTeams/claw-skill.git /tmp/claw-skill
    cp -R /tmp/claw-skill/custom-gift-leewow ./skills/custom-gift-leewow
    

    Create personalized gifts and custom products powered by AI. This skill provides:

    | Tool | Purpose | |------|---------| | browse_templates | Discover customizable product templates (bags, accessories, home decor, apparel, etc.) | | generate_preview | Upload a design image and trigger AI generation | | get_generation_status | Check generation status and download preview image |

    What the agent does (keep it minimal)

    Browse โ€” browse_templates sends product cards directly from Python and returns only send results. If the tool succeeds, reply with NO_REPLY. In normal chat usage, pass the current Feishu conversation target as feishu_target.

    Preview โ€” get_generation_status sends the generated preview result directly to Feishu from Python and returns only send results. If the tool succeeds, reply with NO_REPLY. Preview result cards intentionally use a different layout from browse cards.

    Prerequisites

  • CLAW_SK โ€” Leewow Secret Key (format: sk-leewow-{keyId}-{secret})
  • Obtain it from: https://leewow.com/profile/secret-keys
  • FEISHU_APP_ID โ€” Feishu App ID (often referred to together with App Secret as app AK/SK)
  • FEISHU_APP_SECRET โ€” Feishu App Secret
  • Obtain them from your Feishu Open Platform app settings page
  • FEISHU_RECEIVE_ID โ€” fallback Feishu target for this skill
  • FEISHU_RECEIVE_ID_TYPE โ€” optional, defaults to chat_id
  • CLAW_BASE_URL โ€” API base URL (default: https://leewow.com)
  • CLAW_PATH_PREFIX โ€” Path prefix (default: /v2 for leewow.com)
  • LEEWOW_API_BASE โ€” Base URL for COS STS credentials (default: https://leewow.com)
  • Python 3.10+ with requests and cos-python-sdk-v5
  • Configuration

    Environment variables are loaded from ~/.openclaw/.env:

    CLAW_SK=sk-leewow-xxxx-xxxx
    

    Feishu App ID / App Secret (app AK/SK)

    FEISHU_APP_ID=cli_xxx FEISHU_APP_SECRET=xxx

    Default target for direct Feishu send

    FEISHU_RECEIVE_ID=oc_xxx_or_open_id FEISHU_RECEIVE_ID_TYPE=chat_id CLAW_BASE_URL=https://leewow.com CLAW_PATH_PREFIX=/v2 LEEWOW_API_BASE=https://leewow.com

    Prefer runtime target passing:

  • when the current Feishu conversation target is already known, pass it as feishu_target
  • FEISHU_RECEIVE_ID is only a fallback
  • Image Requirements (IMPORTANT)

    For Input Images (User Upload)

  • Must be in workspace directory: ~/.openclaw/workspace/
  • Supported formats: JPG, PNG, WebP
  • Recommended: Clear, well-lit images for best results
  • For Preview Images (Generated Output)

  • Automatically saved to: ~/.openclaw/workspace/previews/
  • Filename format: leewow_preview_{taskId}.{ext}
  • The agent can directly display these images to users
  • COS Presigned URLs

    For private COS buckets, you may need to generate presigned URLs for accessing images:

    # Generate presigned URL for a COS image
    python3 scripts/cos_presign.py "https://bucket.cos.region.myqcloud.com/key.png" --json

    With custom expiration (e.g., 1 hour = 3600 seconds)

    python3 scripts/cos_presign.py "COS_URL" --expired 3600

    Use with get_generation_status to get presigned preview URL

    python3 scripts/get_status.py {taskId} --presign --json

    Note: Most Leewow COS buckets are public, so presigned URLs are optional.

    Typical Flow (Generator Pattern)

    1. Browse โ€” browse_templates โ†’ Python sends Feishu product cards directly โ†’ agent replies NO_REPLY โ†’ user picks a Template ID when ready 2. Upload โ€” User provides an image (must be in workspace ~/.openclaw/workspace/) 3. Generate โ€” Call generate_preview โ†’ get taskId โ†’ immediately proceed to step 4 4. Poll โ€” Call get_generation_status with poll=true โ†’ wait for COMPLETED 5. Display โ€” get_generation_status โ†’ Python sends preview result directly โ†’ final assistant reply is NO_REPLY

    Tool Reference

    browse_templates

    Browse available product templates.

    python3 scripts/browse.py --count 5 --json
    

    Options:

  • --category: Filter by category (bag, accessory, home, apparel)
  • --count: Number of products to return (1-10, default 5)
  • --json: Direct-send to Feishu and return send result JSON
  • --feishu-target: Current Feishu conversation target. In normal use, treat this as required.
  • --raw-json: Debug mode that returns raw template data
  • generate_preview

    Upload image and trigger generation.

    python3 scripts/generate.py --image-path ./workspace/my_design.png --template-id 3 --json
    

    Options:

  • --image-path: Required. Path to design image (must be in workspace)
  • --template-id: Required. Product template ID from browse_templates
  • --design-theme: Optional style description
  • --aspect-ratio: Image ratio (3:4, 1:1, 4:3, default 3:4)
  • --json: Output JSON format
  • Returns: Task ID for status polling. Generation is async (~30-60s).

    get_generation_status

    Check generation status and download preview image.

    python3 scripts/get_status.py {taskId} --poll
    

    Options:

  • task_id: Task ID from generate_preview
  • --poll: Wait until generation completes
  • --timeout: Poll timeout in seconds (default 120)
  • --no-download: Skip downloading preview image
  • --json: Output JSON format
  • --feishu-target: Current Feishu conversation target. In normal use, treat this as required.
  • Returns: Generation status and, in direct-send mode, send result JSON.

    Safety Rules

  • Never expose or log the CLAW_SK value. When confirming configuration, only show the last 4 characters.
  • Input images must be in workspace directory for the agent to access them
  • Preview images are automatically saved to workspace/previews/
  • Limit browse results to 10 templates maximum per request
  • Examples

    User: "I want to make a custom gift for my friend"
    โ†’ browse_templates โ†’ Python sends product cards directly โ†’ NO_REPLY
    โ†’ user picks โ†’ generate_preview โ†’ get_generation_status --poll
    โ†’ Python sends preview image + text directly โ†’ NO_REPLY

    User: "Turn this photo into a phone case" โ†’ browse_templates --category phone โ†’ Python sends product cards directly โ†’ user picks โ†’ generate_preview โ†’ get_generation_status --poll โ†’ Python sends preview image + text directly โ†’ NO_REPLY

    User: "Show me what products I can customize" โ†’ browse_templates โ†’ Python sends product cards directly โ†’ NO_REPLY

    User: "็œ‹็œ‹ๆœ‰ๅ•ฅ่ƒฝๅฎšๅˆถ็š„" โ†’ browse_templates first

    Output Structure

    browse_templates --json

    {
      "ok": true,
      "mode": "direct_feishu_send",
      "channel": "feishu",
      "messageCount": 8,
      "messageIds": ["om_xxx", "om_yyy"],
      "feishuImagesResolved": true,
      "finalAssistantReply": "NO_REPLY"
    }
    

    โ†’ Python sends product cards directly to Feishu. Agent returns NO_REPLY.

    generate_preview --json

    {
      "taskId": "task_xxx",
      "status": "PENDING",
      "estimatedSeconds": 45,
      "templateId": 3
    }
    

    get_generation_status --json (completed)

    {
      "taskId": "task_xxx",
      "status": "COMPLETED",
      "mode": "direct_feishu_send",
      "messageCount": 1,
      "messageIds": ["om_card_xxx"],
      "feishuImagesResolved": true,
      "finalAssistantReply": "NO_REPLY"
    }
    
    โ†’ Python sends one preview result card directly. Agent returns NO_REPLY.

    Version Marker: custom-gift-leewow@1.0.24

    โšก When to Use

    TriggerAction
    - User says "browse products", "show me what I can customize", "gift ideas"
    - User says in Chinese: "็œ‹็œ‹ๆœ‰ๅ•ฅ่ƒฝๅฎšๅˆถ็š„", "็œ‹็œ‹ๆœ‰ไป€ไนˆๅฏไปฅๅฎšๅˆถ็š„", "ๆœ‰ๅ“ชไบ›ๅฏๅฎšๅˆถไบงๅ“", "ๆœ‰ไป€ไนˆๆจกๆฟ", "็œ‹็œ‹ๅฎšๅˆถๅ“", "่ƒฝๅšๅ“ชไบ›ๅฎšๅˆถๅ“"
    - User asks what physical products / items / templates are available to customize
    - User provides an **image** and wants to turn it into a product
    - User says "make this into a mug/bag/shirt", "customize this design"

    ๐Ÿ’ก Examples

    User: "I want to make a custom gift for my friend"
    โ†’ browse_templates โ†’ Python sends product cards directly โ†’ NO_REPLY
    โ†’ user picks โ†’ generate_preview โ†’ get_generation_status --poll
    โ†’ Python sends preview image + text directly โ†’ NO_REPLY

    User: "Turn this photo into a phone case" โ†’ browse_templates --category phone โ†’ Python sends product cards directly โ†’ user picks โ†’ generate_preview โ†’ get_generation_status --poll โ†’ Python sends preview image + text directly โ†’ NO_REPLY

    User: "Show me what products I can customize" โ†’ browse_templates โ†’ Python sends product cards directly โ†’ NO_REPLY

    User: "็œ‹็œ‹ๆœ‰ๅ•ฅ่ƒฝๅฎšๅˆถ็š„" โ†’ browse_templates first

    โš™๏ธ Configuration

    Environment variables are loaded from ~/.openclaw/.env:

    CLAW_SK=sk-leewow-xxxx-xxxx
    

    Feishu App ID / App Secret (app AK/SK)

    FEISHU_APP_ID=cli_xxx FEISHU_APP_SECRET=xxx

    Default target for direct Feishu send

    FEISHU_RECEIVE_ID=oc_xxx_or_open_id FEISHU_RECEIVE_ID_TYPE=chat_id CLAW_BASE_URL=https://leewow.com CLAW_PATH_PREFIX=/v2 LEEWOW_API_BASE=https://leewow.com

    Prefer runtime target passing:

  • when the current Feishu conversation target is already known, pass it as feishu_target
  • FEISHU_RECEIVE_ID is only a fallback