Crystalia Collector
Generate dataset descriptors for large S3-hosted datasets as RDF annotations.
For architecture, extensibility, and infrastructure details see docs/architecture.md.
Installation
uv sync
Usage
# List files in an S3 prefix
crystalia-collector list my-bucket/path/to/data
# List and generate task files for parallel processing
crystalia-collector list my-bucket/path/to/data --task-dir ./tasks --method-id md5-8gb
# Compute checksum for a single S3 object
crystalia-collector checksum s3://my-bucket/path/to/file.gz
# Compute checksum for a byte range
crystalia-collector checksum s3://my-bucket/path/to/file.gz --offset 0 --length 8589934592
# Process a task file and generate RDF annotations
crystalia-collector annotate tasks/task_1 --output-file annotations.rdf
# Combine annotations (placeholder — not yet implemented)
crystalia-collector combine
Checksum Methods
| Method ID | Block Size | Description |
|---|---|---|
md5 |
Unbounded | MD5 of the entire file |
md5-2gb |
2 GB | MD5 in 2 GB blocks |
md5-8gb |
8 GB | MD5 in 8 GB blocks (default) |
Block-based methods split large files into offset/length pairs in task files, enabling parallel checksum computation.
Configuration
Settings load in this order (highest priority first):
- Environment variables (
CRYSTALIA_*prefix, or bareSENTRY_DSN) ./crystalia.tomlin the current directory~/.config/crystalia-collector/config.toml- Built-in defaults
Environment Variables
| Variable | Default | Description |
|---|---|---|
CRYSTALIA_DEFAULT_METHOD_ID |
md5-8gb |
Checksum method |
CRYSTALIA_DEFAULT_OUTPUT_FILE |
out.rdf |
Output file for annotations |
CRYSTALIA_ENABLE_TELEMETRY |
false |
Send crash reports to Sentry |
CRYSTALIA_SENTRY_DSN |
project default | Override Sentry DSN |
SENTRY_DSN |
— | Bare DSN fallback |
CRYSTALIA_LOG_JSON |
true |
JSON-formatted log output |
AWS_PROFILE |
default |
AWS credentials profile |
AWS_DEFAULT_REGION |
us-east-1 |
AWS region |
Config File
# crystalia.toml or ~/.config/crystalia-collector/config.toml
default_method_id = "md5-8gb"
default_output_file = "out.rdf"
enable_telemetry = false
log_json = false
Copy .envrc.example to .envrc and adjust as needed.
Docker
docker build -t crystalia-collector .
docker run --rm crystalia-collector --help
Development
uv sync
uv run pytest
uv run ruff check .
uv run mypy src/
License
Apache-2.0
Metadata
Release files for crystalia-collector 0.2.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 | |
|---|---|---|---|---|
| crystalia_collector-0.2.0.tar.gz | 52.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| crystalia_collector-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 97.6 kB
Release files / crystalia_collector-0.2.0.tar.gz
| Download URL | crystalia_collector-0.2.0.tar.gz |
|---|---|
| Size | 52.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3e502b9a16a98d3a9f917c43afb6b108f144be01722bf905930f32918e8d1f5e
|
|
BLAKE2b-256 checksum How to use checksums |
98fe395814e7b8178dbabb163c5a080c451b01d57a932028b82302ca68ebd0ff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Release files / crystalia_collector-0.2.0-py3-none-any.whl
| Download URL | crystalia_collector-0.2.0-py3-none-any.whl |
|---|---|
| Size | 45.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0ef23ec97945d31252fad19cb0b5d43f2b505dee9547e0ee8c17a4d8f44cfbfe
|
|
BLAKE2b-256 checksum How to use checksums |
9236f2298a7cff88611ce297d8634a0365a25948724fb0417efc4228e1276c0e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Security for crystalia-collector 0.2.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.