Pyuploadcare
Build file handling in minutes. Upload or accept user-generated content, store, transform, optimize, and deliver images, videos, and documents to billions of users.
Install / Use
/learn @uploadcare/PyuploadcareREADME
Python API client for Uploadcare
Build file handling in minutes. Upload or accept user-generated content, store, transform, optimize, and deliver images, videos, and documents to billions of users.
Description
This library consists of the APIs interface and a couple of Django goodies, 100% covering Upload, REST and URL Uploadcare APIs.
- Upload files from anywhere via API or ready-made File Uploader
- Manage stored files and perform various actions and conversions with them
- Optimize and transform images on the fly
- Deliver files fast and secure
Documentation
Detailed specification of this library is available on RTD.
Please note that this package uses Uploadcare API keys and is intended to be used in server-side code only.
Installation
In order to install pyuploadcare, run these command in CLI:
pip install pyuploadcare
To use in Django project install with extra dependencies:
pip install pyuploadcare[django]
Requirements
- Python 3.8, 3.9, 3.10, 3.11, 3.12, 3.13
To use pyuploadcare with Python 3.6 or 3.7 please install pyuploadcare < 5.0.
To use pyuploadcare with Python 2.7 please install pyuploadcare < 3.0.
Django compatibility:
| Py/Dj | 2.2 | 3.0 | 3.1 | 3.2 | 4.0 | 4.1 | 4.2 | 5.0 | 5.1 | 5.2 | | ----- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 3.8 | v | v | v | v | v | v | v | | | | | 3.9 | v | v | v | v | v | v | v | | | | | 3.10 | | | | v | v | v | v | v | v | v | | 3.11 | | | | | | v | v | v | v | v | | 3.12 | | | | | | | v | v | v | v | | 3.13 | | | | | | | | | v | v |
Note: See .github/workflows/test.yml for the exact tested matrix.
Usage
After package installation, you’ll need API keys: public and secret. Get them in Uploadcare dashboard. If you don’t have an account yet, you can use demo keys, as in example. However, the files on demo account are regularly removed, so create an account as soon as Uploadcare catches your fancy.
In these examples we’re going to use the aforementioned demo keys and demo.ucarecd.net domain.
Check your project's subdomain in the Dashboard.
Basic usage
Let’s start with the basics. Say, you want to upload a file:
from pyuploadcare import Uploadcare
uploadcare = Uploadcare(public_key="demopublickey", secret_key="demoprivatekey")
with open("sample-file.jpeg", "rb") as file_object:
ucare_file = uploadcare.upload(file_object)
And your file is now uploaded to the Uploadcare CDN. But how do you access it from the web? It’s really simple:
print(ucare_file.cdn_url) # file URL, e.g.: https://demo.ucarecd.net/640fe4b7-7352-42ca-8d87-0e4387957157/
And what about information about the file?
from pprint import pprint
pprint(ucare_file.info)
# {'appdata': None,
# 'content_info': {'image': {'color_mode': <ColorMode.RGB: 'RGB'>,
# 'datetime_original': datetime.datetime(2023, 3, 10, 16, 23, 15),
# 'dpi': (72, 72),
# 'format': 'JPEG',
# 'geo_location': None,
# 'height': 4516,
# 'orientation': 1,
# 'sequence': False,
# 'width': 3011},
# 'mime': {'mime': 'image/jpeg',
# 'subtype': 'jpeg',
# 'type': 'image'},
# 'video': None},
# 'datetime_removed': None,
# 'datetime_stored': datetime.datetime(2024, 2, 16, 14, 44, 29, 637342, tzinfo=TzInfo(UTC)),
# 'datetime_uploaded': datetime.datetime(2024, 2, 16, 14, 44, 29, 395043, tzinfo=TzInfo(UTC)),
# 'is_image': True,
# 'is_ready': True,
# 'metadata': {},
# 'mime_type': 'image/jpeg',
# 'original_file_url': 'https://demo.ucarecd.net/640fe4b7-7352-42ca-8d87-0e4387957157/samplefile.jpeg',
# 'original_filename': 'sample-file.jpeg',
# 'size': 3518420,
# 'source': None,
# 'url': 'https://api.uploadcare.com/files/640fe4b7-7352-42ca-8d87-0e4387957157/',
# 'uuid': UUID('640fe4b7-7352-42ca-8d87-0e4387957157'),
# 'variations': None}
A whole slew of different file operations are available. Do you want to crop your image, but don't want important information (faces, objects) to be cropped? You can do that with content-aware (“smart”) crop:
from pyuploadcare.transformations.image import ImageTransformation, ScaleCropMode
# These two function calls are equivalent
ucare_file.set_effects("scale_crop/512x512/smart/")
ucare_file.set_effects(ImageTransformation().scale_crop(512, 512, mode=ScaleCropMode.smart))
print(ucare_file.cdn_url) # https://demo.ucarecd.net/640fe4b7-7352-42ca-8d87-0e4387957157/-/scale_crop/512x512/smart/
There’s a lot more to uncover. For more information please refer to the documentation.
Django integration
Let's add File Uploader to an existing Django project.
We will allow users to upload their images through a nice and modern UI within the standard Django admin or outside of it, and then display these images on the website and modify them using advanced Uploadcare CDN features.
Assume you have a Django project with gallery app.
Add pyuploadcare.dj into INSTALLED_APPS:
INSTALLED_APPS = (
# ...
"pyuploadcare.dj",
"gallery",
)
Add API keys to your Django settings file:
UPLOADCARE = {
"pub_key": "demopublickey",
"secret": "demoprivatekey",
}
Uploadcare image field adding to your gallery/models.py is really simple. Like that:
from django.db import models
from pyuploadcare.dj.models import ImageField
class Photo(models.Model):
title = models.CharField(max_length=255)
photo = ImageField()
ImageField doesn’t require any arguments, file paths or whatever. It just works. That’s the point of it all. It looks nice in the admin interface as well:
Obviously, you would want to use Uploadcare field outside an admin. It’s going to work just as well, but, however, you have to remember to add {{ form.media }} in the <head> tag of your page:
{{ form.media }}
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Save"/>
</form>
This is a default Django form property which is going to render any scripts needed for the form to work, in our case — Uploadcare scripts.

After an image is uploaded, you can deliver it while transforming it on the fly:
{% for photo in photos %}
<h2>{{ photo.title }}</h2>
<img src="{{ photo.photo.cdn_url }}-/resize/400x300/-/effect/flip/-/effect/grayscale/">
{% endfor %}
(Refer to Uploadcare image processing docs for more information).
Testing
To run tests using Github Actions workflows, but locally, install the act utility, and then run it:
make test_with_github_actions
This runs t
Related Skills
qqbot-channel
343.3kQQ 频道管理技能。查询频道列表、子频道、成员、发帖、公告、日程等操作。使用 qqbot_channel_api 工具代理 QQ 开放平台 HTTP 接口,自动处理 Token 鉴权。当用户需要查看频道、管理子频道、查询成员、发布帖子/公告/日程时使用。
claude-opus-4-5-migration
92.1kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
docs-writer
99.7k`docs-writer` skill instructions As an expert technical writer and editor for the Gemini CLI project, you produce accurate, clear, and consistent documentation. When asked to write, edit, or revie
model-usage
343.3kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
