Official Python SDK for Blendflare API - Search and download 3D assets for Blender
Project description
Blendflare Python SDK
Official Python SDK for the Blendflare API - Search and download Blender projects with powerful filtering options.
[!IMPORTANT] API keys are intended for personal use only. Do not expose your API key in public apps, client-side code, or any environment where it could be accessed by others. Keep your key secure and private.
Features
- 🔍 Advanced Search - Filter by category, style, features, and technical specs
- 📦 Easy Downloads - Generate download URLs for any asset
- 🎯 Type Safety - Full type hints and enum support for all parameters
- 🔧 Blender Integration - Perfect for building Blender add-ons
Installation
pip install blendflare
Quick Start
from blendflare import BlendflareClient, Category, Feature, SortBy
# Initialize the client with your API key
client = BlendflareClient(api_key="sk_live_your_api_key")
# Search for rigged and animated sports cars
results = client.search_projects(
q="sports car",
category=Category.TRANSPORT,
features=[Feature.RIGGED, Feature.ANIMATED],
sort_by=SortBy.POPULAR,
limit=20
)
# Display results
for project in results.items:
# Project info
print(f"Title: {project.project_info.title}")
print(f"Tags: {', '.join(project.project_info.tags)}")
# Slug
print(f"Slug: {project.slug}")
# Category and subcategory
print(f"Category: {project.category}")
print(f"Subcategory: {project.subcategory}")
# Author
print(f"Author: {project.author.nickname}")
print(f"Avatar: {project.author.avatar_url}")
# Stats
print(f"Downloads: {project.stats.downloads_count}")
print(f"Likes: {project.stats.likes_count}")
print(f"Views: {project.stats.views_count}")
# Technical specs
print(f"Blender: {project.technical_specs.blender_version.full_version}")
print(f"Render engine: {project.technical_specs.render_engine}")
# File info
print(f"File size: {project.file_info.file_size_mb:.2f} MB")
print(f"Polygons: {project.file_info.poly_count}")
# Legal
print(f"License: {project.legal.license_type}")
# Download the first result
if results.items:
download = client.download_project(
project_slug=results.items[0].slug,
nickname=results.items[0].author.nickname
)
print(f"Download URL: {download.data.download_url}")
print(f"File size: {download.data.file_size_mb:.2f} MB")
Getting Your API Key
- Sign up at Blendflare
- Go to your API Keys settings
- Create a new API key
- Copy your key (format:
sk_live_...)
Usage Guide
Basic Search
from blendflare import BlendflareClient, Category
client = BlendflareClient(api_key="sk_live_your_api_key")
# Simple keyword search
results = client.search_projects(q="dragon")
# Search with category
results = client.search_projects(
q="chair",
category=Category.DECORATION
)
# Search by tags
results = client.search_projects(
tags=["vehicle", "red", "sports"]
)
Advanced Filtering
from blendflare import (
BlendflareClient,
Category,
Subcategory,
Style,
Feature,
RenderEngine,
LicenseType,
SortBy
)
client = BlendflareClient(api_key="sk_live_your_api_key")
results = client.search_projects(
# Basic filters
q="character",
category=Category.CHARACTER,
subcategory=Subcategory.ROBOT,
style=Style.REALISTIC,
# Technical specs
render_engine=RenderEngine.CYCLES,
blender_version="4.4",
# Features
features=[Feature.RIGGED, Feature.ANIMATED, Feature.GAME_READY],
# Polygon count range
min_poly_count=1000,
max_poly_count=50000,
# License
license_type=LicenseType.CC0,
# Popularity filters
min_downloads=100,
min_likes=50,
# Sorting
sort_by=SortBy.POPULAR,
# Pagination
page=1,
limit=20
)
Working with Results
results = client.search_projects(q="tree", category=Category.NATURE)
# Access metadata
print(f"Total results: {results.pagination.total}")
print(f"Search time: {results.metadata.search_time_ms}ms")
# Iterate through projects
for project in results.items:
# Project info
print(f"Title: {project.project_info.title}")
print(f"Tags: {', '.join(project.project_info.tags)}")
# Author
print(f"Author: {project.author.nickname}")
print(f"Avatar: {project.author.avatar_url}")
# Stats
print(f"Downloads: {project.stats.downloads_count}")
print(f"Likes: {project.stats.likes_count}")
print(f"Views: {project.stats.views_count}")
# Technical specs
print(f"Blender: {project.technical_specs.blender_version.full_version}")
print(f"Render engine: {project.technical_specs.render_engine}")
# File info
print(f"File size: {project.file_info.file_size_mb:.2f} MB")
print(f"Polygons: {project.file_info.poly_count}")
# Legal
print(f"License: {project.legal.license_type}")
# Pagination
if results.pagination.has_next_page:
next_page = client.search_projects(
q="tree",
category=Category.NATURE,
page=results.pagination.page + 1
)
Downloading Projects
# Download a specific project
download = client.download_project(
project_slug="sign-decal-pack",
nickname="example_nickname"
)
# Access download information
print(f"Download URL: {download.data.download_url}")
print(f"File name: {download.data.file_name}")
print(f"File size: {download.data.file_size_mb:.2f} MB")
print(f"Expires in: {download.data.expires_in} seconds")
print(f"Is owner: {download.data.is_owner}")
# Download the file
import requests
response = requests.get(download.data.download_url)
with open(download.data.file_name, "wb") as f:
f.write(response.content)
Error Handling
from blendflare import (
BlendflareClient,
AuthenticationError,
ValidationError,
RateLimitError,
NotFoundError
)
client = BlendflareClient(api_key="sk_live_your_api_key")
try:
results = client.search_projects(q="car", category="invalid_category")
except AuthenticationError:
print("Invalid API key")
except ValidationError as e:
print(f"Validation error: {e}")
print(f"Details: {e.details}")
except RateLimitError as e:
print(f"Rate limit exceeded")
except NotFoundError:
print("Resource not found")
except Exception as e:
print(f"Unexpected error: {e}")
See the Types Reference for all available enums and their values.
API Reference
BlendflareClient
__init__(api_key, base_url=None, timeout=30)
Initialize the client.
Parameters:
api_key(str): Your Blendflare API key (format:sk_live_...)base_url(str, optional): Custom API base URLtimeout(int, optional): Request timeout in seconds
search_projects(**kwargs) -> SearchResponse
Search for projects with advanced filters.
Parameters: See Usage Guide for all available parameters.
Returns: SearchResponse object containing:
message: Response messagemetadata: Search metadata and statisticsitems: List ofProjectobjectspagination: Pagination information
download_project(project_slug, nickname) -> DownloadResponse
Generate a download URL for a project.
Parameters:
project_slug(str): Project slug identifiernickname(str): Author's nickname
Returns: DownloadResponse object containing:
message: Response messagedata:DownloadDataobject with URL and file info
Rate Limits
API requests are rate-limited per API key. If you exceed the limit, you'll receive a RateLimitError.
Support
- 📖 Documentation
- 📧 Email: support@blendflare.com
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file blendflare-1.0.2.tar.gz.
File metadata
- Download URL: blendflare-1.0.2.tar.gz
- Upload date:
- Size: 19.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9fc1b2b593b8c115a3603b019c45b889041f02fd093a94b4395ce8afc214009
|
|
| MD5 |
b0fcec2024ea81a44fb08849a5e93e29
|
|
| BLAKE2b-256 |
1bbf167c87c33b7d426bb609c7ef87df26d2a6706a4517e39bd3c63b1e6d97e6
|
File details
Details for the file blendflare-1.0.2-py3-none-any.whl.
File metadata
- Download URL: blendflare-1.0.2-py3-none-any.whl
- Upload date:
- Size: 18.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9810a1592c5868f75f3add5aaa67cbda5158d3815a803a40052921e8a184ad3
|
|
| MD5 |
d9a494d404b987fe52480e1f2d9534a2
|
|
| BLAKE2b-256 |
851392a32e6638d784fb7b0f93cfe5482b52e58ca6d5211db8089666714adc58
|