picturesq
Turn a folder of RAW photos into consistently graded exports. No photo editor needed.
picturesq run ./lisbon # decode → normalise → grade → export
picturesq ui ./lisbon # choose looks, fix exposure and dates, export, in a local web UI
- Any camera LibRaw supports; built and tested on DJI Osmo Pocket DNGs
- Runs on an 8 GB, CPU-only laptop (Linux, WSL2, Windows)
- 18 built-in looks in four categories (B/W · Cold · Warm · Cinematic), each with adjustable intensity
- Each photo is normalised first (exposure, colour noise), so one look gives a consistent result across a whole shoot
- Everything you choose is saved in one YAML file,
picturesq.yaml, which a coding agent can edit too - Your originals are never changed: exports go to
<project>/exports/
Status: alpha (v0.1). Feedback and bug reports are welcome on GitHub issues.
Install
Python 3.11 or newer. With uv (or pipx install picturesq):
uv tool install picturesq
picturesq doctor # checks the libraries, CPU and memory picturesq will use
Quick start
A project is a folder of RAW files. Point picturesq at it:
picturesq ui ./lisbon
The browser opens with your photos. Pick a look for the whole project or one photo, set its intensity, nudge exposure, warmth or highlights, step through the photos picturesq flagged for review (f), compare photos against every look in a grid (g), then Export. Every change is saved to ./lisbon/picturesq.yaml as you make it.
From the command line instead:
picturesq looks # the look library and each look's parameters
picturesq preview ./lisbon --category cinematic # a contact sheet: your photos × the cinematic looks
picturesq export ./lisbon # web (2048 px) and archive (full size) JPEGs
Wrong dates on the camera?
If the camera's clock was never set (photos dated 2000, say), tell picturesq the real time of one photo and every export is corrected by the same amount:
picturesq metadata shift ./lisbon --photo DJI_0042.DNG --actual "2026-10-17 20:05"
picturesq metadata show ./lisbon # camera time vs corrected time, per photo
picturesq metadata apply ./lisbon # fix the dates in exports already written
The UI's Date and time panel does the same.
Using it with a coding agent
picturesq ships a skill: instructions that teach a coding agent its workflow (edit picturesq.yaml, render a preview, look at it) and how words map to edits ("warmer", "softer highlights", "less of the look").
picturesq skill install # Claude Code, every project (~/.claude/skills)
picturesq skill install --project ./lisbon # Claude Code, this project only
picturesq skill install --dir PATH # another agent's skills folder
picturesq skill show # print it, e.g. to paste into AGENTS.md
Then ask your agent things like "make the sunset photos warmer and the rest nordic at 80 %". Keep the UI open while it works: its edits appear in the browser within a second. Rerun picturesq skill install --force after upgrading picturesq to get the matching skill.
Agents (and scripts) can also discover everything from the CLI itself: picturesq looks --json, picturesq schema project, picturesq normalise PROJECT --json. An invalid edit makes any command exit with code 2 and name the key.
Documentation
- Configuration reference: every key in
picturesq.yaml, look files, and worked examples - Project plan: what picturesq does and how, and the full CLI
- Glossary: the words picturesq uses
- Contributing: development setup and releases
Licence
MIT, except the third-party LUT files bundled with the looks, which are CC BY 4.0: see NOTICE.
Metadata
Release files for picturesq 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| picturesq-0.1.0.tar.gz | 2.4 MB | Without provenance | Details for picturesq-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| picturesq-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for picturesq-0.1.0-py3-none-any.whl |
Total release size: 4.0 MB
Release files / picturesq-0.1.0.tar.gz
| Download URL | picturesq-0.1.0.tar.gz |
|---|---|
| Size | 2.4 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5741d6b9ecd88f4a98965c6e50911e3245e536ab439cf54e92c0e25bbc51156f
|
|
BLAKE2b-256 checksum How to use checksums |
cbd6546818eb64763c24a4df0102f8005e2a44f28eb4623ab1f773fdfc9332b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / picturesq-0.1.0-py3-none-any.whl
| Download URL | picturesq-0.1.0-py3-none-any.whl |
|---|---|
| Size | 1.6 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
664ee1c753566a7c8b2d63e838fdf6ae4091896dfa7e31b3b99274d32a9d36dd
|
|
BLAKE2b-256 checksum How to use checksums |
26c4e2f663da85a0673c13306b11eaa0f6511406882661122bde024048047e0f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for picturesq 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.