Usage Guide

Installing the project provides cv-generator, website-screenshot, and media-organizer. The first two read configuration from .env. Copy .env.example to .env and adjust its retained settings.

Where .env is read from

Both commands load .env from the current working directory, not from the repository root and not from the installation directory. The file is loaded with override=False, so real environment variables win over the values in the file, and a missing .env is a hard error.

cd ~/some/project && website-screenshot   # uses ~/some/project/.env

Generate a CV

Configure the Markdown input and PDF output:

MARKDOWN_FILE_URL="cv.md"
PDF_OUTPUT_LOCATION="cv.pdf"
cv-generator

The input may be a local path or a file:// URL. Relative input and output paths are based on the current working directory.

Capture websites

Configure one or more comma-separated sites and an output directory:

SCREENSHOT_SITES="https://example.com,https://zlatanstajic.com"
SCREENSHOT_OUTPUT_DIR="$HOME/Pictures"
website-screenshot

The tool runs Chromium headlessly and saves each site’s visible 1600x900 viewport as <hostname>.jpg. GitHub Pages project sites are named after the repository instead of the shared user hostname, with underscores replaced by hyphens, so https://username.github.io/my_project/ is written as my-project.jpg. Both commands accept no options other than -h/--help; configure sites and destinations only through .env.

Organize a media library

The media organizer takes command-line paths rather than .env settings. Its workflow deliberately separates inspection, approval, and copying:

media-organizer scan --input "/home/user/Media" --verbose
media-organizer plan --input "/home/user/Media" --output "/home/user/Organized" --verbose
media-organizer apply --plan "/home/user/Organized/organization-plan.sqlite3" --verbose

The source directory is recursively scanned and remains unchanged throughout. The plan and report default to the output directory and are removed after a fully successful apply. They remain available when an entry fails. The optional --verbose flag shows detailed progress during every phase.

Run media-organizer report inside the organized library to save a SQLite inventory of its photos, videos, formats, orientations, and locations as media-report.sqlite3 in the current directory.

To find exact duplicates and then review them, run:

media-organizer duplicates --input "/home/user/Media" --verbose
media-organizer review-duplicates --report duplicate-report.sqlite3

duplicates saves duplicate-report.sqlite3 in the current directory and changes no media. review-duplicates serves a comparison page at http://127.0.0.1:8765/ until you press Ctrl+C. It is the only subcommand that deletes source media, and every permanent deletion must be confirmed. See Media Library Organizer for the complete safety and metadata behavior.

Running the modules by file path

The original file-path invocation remains supported and behaves identically to the installed commands:

python3 scripts/cv_generator.py
python3 scripts/screenshot.py
python3 scripts/media_organizer.py --help

Development commands

The complete local quality gate is listed in Contributing, and CI/CD describes which of those checks CI runs.