npx skills add https://github.com/vm0-ai/vm0-skills --skill cloudinaryCloudinary 提供图像和视频托管服务,具备 CDN 交付、自动优化和实时转换功能。
设置以下环境变量:
export CLOUDINARY_CLOUD_NAME=your_cloud_name
export CLOUDINARY_TOKEN=your_api_key
export CLOUDINARY_API_SECRET=your_api_secret
从以下网址获取凭证:https://console.cloudinary.com/settings/api-keys
首先,在 Cloudinary 控制台中创建一个无签名上传预设:Settings > Upload > Upload presets > Add upload preset > Signing Mode: Unsigned
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/image/upload" -F "file=@/path/to/image.png" -F "upload_preset=your_preset_name"
生成签名并上传:
# 生成时间戳
TIMESTAMP=$(date +%s)
# 生成签名(参数按字母顺序排列)
SIGNATURE=$(echo -n "timestamp=$TIMESTAMP$(printenv CLOUDINARY_API_SECRET)" | sha1sum | cut -d" " -f1)
# 上传
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/image/upload" -F "file=@/path/to/image.png" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
TIMESTAMP=$(date +%s)
SIGNATURE=$(echo -n "timestamp=$TIMESTAMP$(printenv CLOUDINARY_API_SECRET)" | sha1sum | cut -d" " -f1)
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/image/upload" -F "file=https://example.com/image.png" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
TIMESTAMP=$(date +%s)
SIGNATURE=$(echo -n "timestamp=$TIMESTAMP$(printenv CLOUDINARY_API_SECRET)" | sha1sum | cut -d" " -f1)
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/video/upload" -F "file=@/path/to/video.mp4" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
TIMESTAMP=$(date +%s)
PUBLIC_ID="my-videos/clip1"
SIGNATURE=$(echo -n "public_id=$PUBLIC_ID×tamp=$TIMESTAMP$(printenv CLOUDINARY_API_SECRET)" | sha1sum | cut -d" " -f1)
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/video/upload" -F "file=@/path/to/video.mp4" -F "public_id=$PUBLIC_ID" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
TIMESTAMP=$(date +%s)
PUBLIC_ID="my-videos/clip1"
SIGNATURE=$(echo -n "public_id=$PUBLIC_ID×tamp=$TIMESTAMP$(printenv CLOUDINARY_API_SECRET)" | sha1sum | cut -d" " -f1)
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/video/upload" -F "file=https://example.com/video.mp4" -F "public_id=$PUBLIC_ID" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
TIMESTAMP=$(date +%s)
PUBLIC_ID="my-folder/my-image"
SIGNATURE=$(echo -n "public_id=$PUBLIC_ID×tamp=$TIMESTAMP$(printenv CLOUDINARY_API_SECRET)" | sha1sum | cut -d" " -f1)
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/image/upload" -F "file=@/path/to/image.png" -F "public_id=$PUBLIC_ID" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
{
"public_id": "sample",
"secure_url": "https://res.cloudinary.com/demo/image/upload/v1234567890/sample.png",
"url": "http://res.cloudinary.com/demo/image/upload/v1234567890/sample.png",
"format": "png",
"width": 800,
"height": 600
}
关键字段:secure_url - 在 Markdown 中使用:
Cloudinary URL 支持实时转换:
https://res.cloudinary.com/{cloud_name}/image/upload/{transformations}/{public_id}.{format}
示例:
# 调整大小为 300x200
.../image/upload/w_300,h_200/sample.png
# 自动格式和质量
.../image/upload/f_auto,q_auto/sample.png
# 裁剪为正方形
.../image/upload/w_200,h_200,c_fill/sample.png
# 组合转换
.../image/upload/w_400,h_300,c_fill,f_auto,q_auto/sample.png
使用带有 l_video:(叠加)和 fl_splice 标志的 URL 转换来拼接视频。
将 clip2 附加到 clip1 的末尾:
https://res.cloudinary.com/{cloud_name}/video/upload/l_video:clip2,fl_splice/fl_layer_apply/clip1.mp4
将 clip2 和 clip3 附加到 clip1:
https://res.cloudinary.com/{cloud_name}/video/upload/l_video:clip2,fl_splice/fl_layer_apply/l_video:clip3,fl_splice/fl_layer_apply/clip1.mp4
将所有视频调整为相同尺寸:
https://res.cloudinary.com/{cloud_name}/video/upload/w_640,h_360,c_fill/l_video:clip2,fl_splice,w_640,h_360,c_fill/fl_layer_apply/clip1.mp4
在第一个视频上添加淡出(-1000ms),在第二个视频上添加淡入(1000ms):
https://res.cloudinary.com/{cloud_name}/video/upload/w_640,h_360,c_fill,e_fade:-1000/l_video:clip2,fl_splice,e_fade:1000,w_640,h_360,c_fill/fl_layer_apply/clip1.mp4
在开头添加图像作为片头:
https://res.cloudinary.com/{cloud_name}/video/upload/l_intro_image,fl_splice,du_3/so_0,fl_layer_apply/clip1.mp4
TIMESTAMP=$(date +%s)
PUBLIC_ID="<your-public-id>"
SIGNATURE=$(echo -n "public_id=$PUBLIC_ID×tamp=$TIMESTAMP$(printenv CLOUDINARY_API_SECRET)" | sha1sum | cut -d" " -f1)
# 删除图像
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/image/destroy" -F "public_id=$PUBLIC_ID" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
# 删除视频
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/video/destroy" -F "public_id=$PUBLIC_ID" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
f_auto,q_auto 以实现自动格式/质量优化public_id="folder/subfolder/name" 来组织媒体每周安装数
96
代码仓库
GitHub 星标数
48
首次出现
2026 年 1 月 24 日
安全审计
安装于
opencode87
gemini-cli86
codex84
github-copilot83
amp75
kimi-cli75
Cloudinary provides image and video hosting with CDN delivery, automatic optimization, and on-the-fly transformations.
Set the following environment variables:
export CLOUDINARY_CLOUD_NAME=your_cloud_name
export CLOUDINARY_TOKEN=your_api_key
export CLOUDINARY_API_SECRET=your_api_secret
Get credentials from: https://console.cloudinary.com/settings/api-keys
First, create an unsigned upload preset in Cloudinary Console: Settings > Upload > Upload presets > Add upload preset > Signing Mode: Unsigned
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/image/upload" -F "file=@/path/to/image.png" -F "upload_preset=your_preset_name"
Generate signature and upload:
# Generate timestamp
TIMESTAMP=$(date +%s)
# Generate signature (alphabetical order of params)
SIGNATURE=$(echo -n "timestamp=$TIMESTAMP$(printenv CLOUDINARY_API_SECRET)" | sha1sum | cut -d" " -f1)
# Upload
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/image/upload" -F "file=@/path/to/image.png" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
TIMESTAMP=$(date +%s)
SIGNATURE=$(echo -n "timestamp=$TIMESTAMP$(printenv CLOUDINARY_API_SECRET)" | sha1sum | cut -d" " -f1)
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/image/upload" -F "file=https://example.com/image.png" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
TIMESTAMP=$(date +%s)
SIGNATURE=$(echo -n "timestamp=$TIMESTAMP$(printenv CLOUDINARY_API_SECRET)" | sha1sum | cut -d" " -f1)
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/video/upload" -F "file=@/path/to/video.mp4" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
TIMESTAMP=$(date +%s)
PUBLIC_ID="my-videos/clip1"
SIGNATURE=$(echo -n "public_id=$PUBLIC_ID×tamp=$TIMESTAMP$(printenv CLOUDINARY_API_SECRET)" | sha1sum | cut -d" " -f1)
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/video/upload" -F "file=@/path/to/video.mp4" -F "public_id=$PUBLIC_ID" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
TIMESTAMP=$(date +%s)
PUBLIC_ID="my-videos/clip1"
SIGNATURE=$(echo -n "public_id=$PUBLIC_ID×tamp=$TIMESTAMP$(printenv CLOUDINARY_API_SECRET)" | sha1sum | cut -d" " -f1)
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/video/upload" -F "file=https://example.com/video.mp4" -F "public_id=$PUBLIC_ID" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
TIMESTAMP=$(date +%s)
PUBLIC_ID="my-folder/my-image"
SIGNATURE=$(echo -n "public_id=$PUBLIC_ID×tamp=$TIMESTAMP$(printenv CLOUDINARY_API_SECRET)" | sha1sum | cut -d" " -f1)
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/image/upload" -F "file=@/path/to/image.png" -F "public_id=$PUBLIC_ID" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
{
"public_id": "sample",
"secure_url": "https://res.cloudinary.com/demo/image/upload/v1234567890/sample.png",
"url": "http://res.cloudinary.com/demo/image/upload/v1234567890/sample.png",
"format": "png",
"width": 800,
"height": 600
}
Key field: secure_url - Use this in Markdown: 
Cloudinary URLs support on-the-fly transformations:
https://res.cloudinary.com/{cloud_name}/image/upload/{transformations}/{public_id}.{format}
Examples:
# Resize to 300x200
.../image/upload/w_300,h_200/sample.png
# Auto format and quality
.../image/upload/f_auto,q_auto/sample.png
# Crop to square
.../image/upload/w_200,h_200,c_fill/sample.png
# Combine transformations
.../image/upload/w_400,h_300,c_fill,f_auto,q_auto/sample.png
Concatenate videos using URL transformations with l_video: (overlay) and fl_splice flag.
Append clip2 to the end of clip1:
https://res.cloudinary.com/{cloud_name}/video/upload/l_video:clip2,fl_splice/fl_layer_apply/clip1.mp4
Append clip2 and clip3 to clip1:
https://res.cloudinary.com/{cloud_name}/video/upload/l_video:clip2,fl_splice/fl_layer_apply/l_video:clip3,fl_splice/fl_layer_apply/clip1.mp4
Resize all videos to same dimensions:
https://res.cloudinary.com/{cloud_name}/video/upload/w_640,h_360,c_fill/l_video:clip2,fl_splice,w_640,h_360,c_fill/fl_layer_apply/clip1.mp4
Add fade out (-1000ms) on first video and fade in (1000ms) on second:
https://res.cloudinary.com/{cloud_name}/video/upload/w_640,h_360,c_fill,e_fade:-1000/l_video:clip2,fl_splice,e_fade:1000,w_640,h_360,c_fill/fl_layer_apply/clip1.mp4
Prepend an image as intro:
https://res.cloudinary.com/{cloud_name}/video/upload/l_intro_image,fl_splice,du_3/so_0,fl_layer_apply/clip1.mp4
TIMESTAMP=$(date +%s)
PUBLIC_ID="<your-public-id>"
SIGNATURE=$(echo -n "public_id=$PUBLIC_ID×tamp=$TIMESTAMP$(printenv CLOUDINARY_API_SECRET)" | sha1sum | cut -d" " -f1)
# Delete image
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/image/destroy" -F "public_id=$PUBLIC_ID" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
# Delete video
curl -X POST "https://api.cloudinary.com/v1_1/<your-cloud-name>/video/destroy" -F "public_id=$PUBLIC_ID" -F "api_key=$(printenv CLOUDINARY_TOKEN)" -F "timestamp=$TIMESTAMP" -F "signature=$SIGNATURE"
f_auto,q_auto to URLs for automatic format/qualitypublic_id="folder/subfolder/name" to organize mediaWeekly Installs
96
Repository
GitHub Stars
48
First Seen
Jan 24, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode87
gemini-cli86
codex84
github-copilot83
amp75
kimi-cli75
Azure 升级评估与自动化工具 - 轻松迁移 Functions 计划、托管层级和 SKU
111,700 周安装
UI/UX Pro Max 设计指南:50+样式、97调色板、57字体配对、99条UX规则
105,500 周安装
Azure AI 服务指南:AI Search、Speech、OpenAI 与 MCP 工具使用教程
103,800 周安装
Azure 升级评估与自动化工具 - 轻松迁移 Functions 计划、托管层级和 SKU
111,700 周安装
Azure 配额管理指南:服务限制、容量验证与配额增加方法
122,900 周安装
Azure Validate 验证工具:Microsoft Azure 部署前检查与预检指南
146,300 周安装
Azure虚拟机规格推荐与VMSS配置指南 | 免费成本估算工具
146,300 周安装