Downloading Wallpapers¶
download() fetches the full-resolution image of a wallpaper and returns it as bytes. Optionally, it also writes the file to disk.
Download to memory¶
from xanax import Wallhaven
client = Wallhaven(api_key="your-api-key")
wallpaper = client.wallpaper("94x38z")
image_bytes: bytes = client.download(wallpaper)
Download to disk¶
Pass a file path as the second argument:
from pathlib import Path
client.download(wallpaper, path="wallpaper.jpg")
# Or use a Path object
client.download(wallpaper, path=Path("~/wallpapers/94x38z.jpg").expanduser())
The bytes are also returned, so you can write to disk and process in memory at the same time:
data = client.download(wallpaper, path="wallpaper.jpg")
# data is the image bytes; file is also saved
Async download¶
AsyncWallhaven.download() works the same way:
import asyncio
from xanax import AsyncWallhaven
async def main():
async with AsyncWallhaven(api_key="your-api-key") as client:
wallpaper = await client.wallpaper("94x38z")
data = await client.download(wallpaper, path="wallpaper.jpg")
asyncio.run(main())
Batch download¶
Combine with iter_media() or aiter_media() to download multiple wallpapers:
from pathlib import Path
from xanax import Wallhaven, SearchParams, Sort
client = Wallhaven(api_key="your-api-key")
output_dir = Path("wallpapers")
output_dir.mkdir(exist_ok=True)
params = SearchParams(query="space", sorting=Sort.TOPLIST)
for wallpaper in client.iter_media(params):
# Derive a filename from the wallpaper ID and file type
ext = wallpaper.file_type.split("/")[-1] # "image/jpeg" -> "jpeg"
filename = output_dir / f"{wallpaper.id}.{ext}"
client.download(wallpaper, path=filename)
print(f"Saved {filename}")
Async batch download¶
import asyncio
from pathlib import Path
from xanax import AsyncWallhaven, SearchParams, Sort
async def main():
async with AsyncWallhaven(api_key="your-api-key") as client:
output_dir = Path("wallpapers")
output_dir.mkdir(exist_ok=True)
params = SearchParams(query="nature", sorting=Sort.TOPLIST)
async for wallpaper in client.aiter_media(params):
ext = wallpaper.file_type.split("/")[-1]
filename = output_dir / f"{wallpaper.id}.{ext}"
await client.download(wallpaper, path=filename)
print(f"Saved {filename}")
asyncio.run(main())
Notes¶
The download URL comes from
wallpaper.path— the full CDN URL to the image file.Redirects are followed automatically.
If the CDN returns an error,
httpx.HTTPStatusErroris raised viaraise_for_status().Large images (some are 50+ MB) are loaded fully into memory before being written to disk.