Skip to main content

seal files now, open them later

Project description

MAGICICADA !!!!!!

image

magicicapsula

image

install

pip install magicicapsula

needs python 3.10+

the mcap command is a shorthand alias for magicicapsula; the two are interchangeable (mcap seal, mcap open capsule.mcap, ...).

how it works

the workflow is staged, so you don't have to add everything at once:

magicicapsula init -u 2030-01-01     # start a draft here
magicicapsula add letter.txt photos/ # stage files/folders
magicicapsula add diary.txt          # add more later
magicicapsula status                 # see what's staged
magicicapsula seal                   # pack it all into capsule.mcap

the draft lives in a .capsule/ directory (found by walking up from the current dir). seal reads everything staged and writes the .mcap file.

later, when the date has passed:

magicicapsula open capsule.mcap -d ./out

commands

init

start a new capsule draft in the current directory.

magicicapsula init [-u DATE] [-n NOTE] [-o OUT]

  -u, --unlock DATE  unlock date, can also be set at seal
  -n, --note NOTE    plaintext note shown by info
  -o, --out OUT      output file name (default: capsule.mcap)

add

stage files or folders to put in the capsule.

magicicapsula add <paths...>
magicicapsula add --text "dear future me" [--name letter.txt]
echo "..." | magicicapsula add -

  --text TEXT  stage text directly, no file needed
  --name NAME  filename for --text or stdin (default: note.txt)

status

show the draft: unlock date and staged files.

magicicapsula status

rm

unstage files. does not delete them from disk.

magicicapsula rm <paths...>

seal

seal everything staged into a capsule file. flags override the draft's settings and stick.

magicicapsula seal [-u DATE] [-o FILE] [-n NOTE] [-f] [-P] [--rm]

  -u, --unlock DATE  unlock date, overrides the draft's
  -o, --out FILE     output capsule file, overrides the draft's
  -n, --note NOTE    plaintext note, overrides the draft's
  -f, --force        overwrite the output if it exists
  -P, --no-password  seal without a password (anyone can open it after the date)
  --rm               delete staged files after sealing

info

show a capsule's dates and status. no password needed.

magicicapsula info <file> [--json]

  --json  print capsule metadata as JSON

open

open a capsule and extract it, once the unlock date has passed.

magicicapsula open [-d DEST] <file>

  -d, --dest DEST  directory to extract into (default: current dir)

verify

check a capsule's integrity (and the password, if any) without opening it.

magicicapsula verify <file>

remind

write a calendar (.ics) reminder for a capsule's unlock date. no account or api needed: import the file into any calendar (google, apple, outlook).

magicicapsula remind <file> [-o FILE] [-b DAYS] [-f]

  -o, --out FILE    output .ics path (default: <capsule>.ics)
  -b, --before DAYS remind this many days before the unlock date
  -f, --force       overwrite the output if it exists

version

magicicapsula version

config

show or edit configuration. settings resolve in the order default < config file < environment variable. the config file is ~/.config/magicicapsula/config.json; MAGICICAPSULA_PASSWORD overrides it.

magicicapsula config                  # list all (secrets masked)
magicicapsula config --reveal         # list all, secrets shown
magicicapsula config get <key>        # show one value and its source
magicicapsula config set <key> <val>  # write to the config file
magicicapsula config unset <key>      # remove from the config file

date format

absolute YYYY-MM-DD or YYYY-MM-DDTHH:MM (2030-01-01, 2030-01-01T08:00), or relative from now: +30d, +2w, +6m, +1y.

development

pip install -e ".[dev]"   # installs ruff + pytest
ruff check . && ruff format --check .
pytest                    # runs the suite with a 90% coverage gate

tests are spec-driven: each core feature (crypto, capsule, draft, ics, config) is exercised through its public api, and the command layer is tested by asserting the printed output with the core mocked out. lint and tests both run in CI on every push and pull request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

magicicapsula-1.1.0.tar.gz (23.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

magicicapsula-1.1.0-py3-none-any.whl (27.1 kB view details)

Uploaded Python 3

File details

Details for the file magicicapsula-1.1.0.tar.gz.

File metadata

  • Download URL: magicicapsula-1.1.0.tar.gz
  • Upload date:
  • Size: 23.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for magicicapsula-1.1.0.tar.gz
Algorithm Hash digest
SHA256 6a662ba33c4a77ad38cfa326792ec21b2d6834fdbaf1557e9350d4224b7bfc25
MD5 a434bb2a4e12a44d94490de15fda553a
BLAKE2b-256 535ea27999890b1f16d8d19216ad5428a18ef5a13639dae1a3da3d1efc553fb1

See more details on using hashes here.

Provenance

The following attestation bundles were made for magicicapsula-1.1.0.tar.gz:

Publisher: publish.yml on iDavi/magicicapsula

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file magicicapsula-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: magicicapsula-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 27.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for magicicapsula-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d9cae37ef07de1ba5ddb58245141311da9aa5c8e06fa07dc6f068dfb93dd8087
MD5 a7a7bbf3e035ff4770c2d4d663e4a2d3
BLAKE2b-256 1ec7a2f44777a2af64fa23232a996a2b77641e4aabc6afed78a10d3800b3f226

See more details on using hashes here.

Provenance

The following attestation bundles were made for magicicapsula-1.1.0-py3-none-any.whl:

Publisher: publish.yml on iDavi/magicicapsula

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page