🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

luci-upload

by @gimlettt

Upload a video or image to memories.ai. Use when the user wants to upload media, add a video/photo to their memory, or send a file to Luci. This skill is des...

Versionv1.0.4
Downloads195
Stars⭐ 1
TERMINAL
clawhub install luci-upload

πŸ“– About This Skill


name: luci-upload description: "Upload a video or image to memories.ai. Use when the user wants to upload media, add a video/photo to their memory, or send a file to Luci. This skill is designed to work with luci-memory skill from clawhub" metadata: {"clawdbot":{"emoji":"πŸ“€","requires":{"bins":["python3","ffprobe"],"env":["MEMORIES_AI_KEY"]},"primaryEnv":"MEMORIES_AI_KEY"}}

luci-upload

Upload a video or image file to memories.ai with capture time and location metadata. User can also download LUCI AI app to manually upload as well.

Setup

Requires MEMORIES_AI_KEY β€” same key as luci-memory. If not found, create {baseDir}/.env:

MEMORIES_AI_KEY=sk-your-key-here

Also requires ffprobe (from ffmpeg) for auto-extracting video metadata. Images can be uploaded without ffprobe finding anything β€” in that case the agent must supply time and location explicitly.

When to use

  • User wants to upload a video or image to memories.ai
  • User says "add this video/photo to my memory" or similar
  • User wants to send/import media to Luci
  • How it works

    The script tries to auto-extract capture time and GPS coordinates from the file metadata (via ffprobe). Videos from phones and JPEGs with EXIF usually work; PNGs and screenshots rarely have this info. If metadata is missing, the agent should ask the user for:

    1. When was it taken? β†’ pass as --datetime with --timezone 2. Where was it taken? β†’ pass as --location (geocoded automatically) or --lat/--lon

    The multipart Content-Type is chosen by file extension (.mp4 β†’ video/mp4, .png β†’ image/png, .jpg β†’ image/jpeg, etc.).

    How to invoke

    # Probe metadata only (no upload) β€” do this first to check what info is available
    bash {baseDir}/run.sh --probe --file /path/to/file

    Upload a video with auto-detected metadata

    bash {baseDir}/run.sh --file /path/to/video.mp4

    Upload a video with explicit time and location name (geocoded to lat/lon)

    bash {baseDir}/run.sh --file /path/to/video.mp4 --datetime "2025-06-22 14:00:00" --timezone Asia/Shanghai --location "Suzhou, China"

    Upload an image β€” usually needs explicit time/location since EXIF is often missing

    bash {baseDir}/run.sh --file /path/to/photo.png --datetime "2025-09-01 00:00:00" --timezone Asia/Shanghai --location "Shunde, China"

    Upload with explicit coordinates and epoch timestamp

    bash {baseDir}/run.sh --file /path/to/video.mp4 --time 1769097600000 --lat 31.3 --lon 120.59

    Parameters

    | Flag | Short | Description | |------|-------|-------------| | --file | -f | Path to video or image file (required) | | --probe | | Only show extracted metadata, don't upload | | --time | | Start time as epoch milliseconds | | --datetime | | Start time as readable datetime (e.g. 2025-06-22 14:00:00) | | --timezone | | Timezone for --datetime (e.g. Asia/Shanghai, UTC, +8) | | --lat | | Latitude | | --lon | | Longitude | | --location | | Location name to geocode (e.g. Suzhou, China) |

    Workflow

    1. Probe first: run with --probe to see what metadata the file has 2. If time and GPS are both present β†’ upload directly 3. If missing (common for images, screenshots), ask the user for the missing info (time and/or location) 4. Upload with all parameters filled in

    ⚑ When to Use

    TriggerAction
    - User says "add this video/photo to my memory" or similar
    - User wants to send/import media to Luci

    βš™οΈ Configuration

    Requires MEMORIES_AI_KEY β€” same key as luci-memory. If not found, create {baseDir}/.env:

    MEMORIES_AI_KEY=sk-your-key-here
    

    Also requires ffprobe (from ffmpeg) for auto-extracting video metadata. Images can be uploaded without ffprobe finding anything β€” in that case the agent must supply time and location explicitly.