pixe


Namepixe JSON
Version 0.7.3 PyPI version JSON
download
home_pageNone
SummaryA digital helper to keep your files neat and tidy
upload_time2024-05-30 12:06:10
maintainerNone
docs_urlNone
authorChris Wells
requires_python<4.0,>=3.11
licenseApache-2.0
keywords archive photos organize
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # pixe
[![flake8](https://github.com/ithuna/pixe/actions/workflows/flake8.yml/badge.svg)](https://github.com/ithuna/pixe/actions/workflows/flake8.yml) [![pytest](https://github.com/ithuna/pixe/actions/workflows/pytest.yml/badge.svg)](https://github.com/ithuna/pixe/actions/workflows/pytest.yml) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

A digital helper to keep your files neat and tidy.

In its most basic invocation: `pixe <directory with files>` `pixe` will copy all JPG files from a source directory into a new set of subdirectories based on capture date. These files will also be renamed based on said capture date and a calculated SHA1 hash.

### subdirectories

Subdirectories will be created, as needed, in the destination folder to match the creation date of the files being processed and will take the following form: `YYYY/M`

### renamed files
Each file (whether moved or copied) will have a new name applied to it based on the following pattern:
`YYYYMMDD_hhmmss_<SHA1SUM>.jpg`

The datetime info is taken from the image capture datetime. The SHA1SUM is calculated based on the image data only (does not include image metadata).

### example

Given a directory of images, `dirA` which contains a few image files:
```
dirA
├── IMG_0001.jpg
├── IMG_0002.jpg
└── IMG_1234.jpg
```

Running `pixe /path/to/dirA` from within a second directory, `dirB` would result in the following directory structure:

```
dirB
├── 2021
│   └── 12
│       └── 20211225_062223_7d97e98f8af710c7e7fe703abc8f639e0ee507c4.jpg
└── 2022
    ├── 2
    │   └── 20220202_123101_447d306060631570b7713ea48e74103c68eab0a3.jpg
    └── 3
        └── 20220316_232122_321c7d6f5be8739a8974e4c3512e3226eb6704a7.jpg
```

## Installation
`$ pip install pixe`

## Usage
```
Usage: pixe [OPTIONS] SRC

Options:
  -d, --dest TEXT              desired destination
  -r, --recurse                recurse into sub-directories (default: off)
  --parallel / --serial        process files in parallel (default: --parallel)
  --move, --mv / --copy, --cp  move files into DEST rather than copying
                               (default: --copy)
  --owner TEXT                 add camera owner to exif tags
  --copyright TEXT             add copyright string to exif tags
  --help                       Show this message and exit.
```

### Options

#### -d, --dest TEXT
The base directory of where you want the processed files to end up. If this option is not specified, 
the current working directory will be used.

#### -r, --recurse
`pixe` will recurse into any subdirectories it finds beneath SRC. The default is to not recurse.

#### --parallel / --serial
Should `pixe` process multiple files at once, in parallel using multiprocessing using all 
available cores. If `--serial` is chosen one file will be processed at a time. The default is
to process files in parallel if there is more than one file specified for processing.

#### --move, --mv / --copy, --cp
By default, `pixe` will copy files into DEST and leave the source files untouched. This can be
overridden by specifying `--move`.

#### --owner
A string which will be inserted into the CameraOwnerName EXIF tag [0xa430]

#### --copyright
A string which will be inserted into the Copyright EXIF tag [0x8298]

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pixe",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.11",
    "maintainer_email": null,
    "keywords": "archive, photos, organize",
    "author": "Chris Wells",
    "author_email": "ping@cwlls.dev",
    "download_url": "https://files.pythonhosted.org/packages/7c/03/6b46bda818a1c6bb956a48531b9d06ce31abafa6cbb3779dc94a2e3ab160/pixe-0.7.3.tar.gz",
    "platform": null,
    "description": "# pixe\n[![flake8](https://github.com/ithuna/pixe/actions/workflows/flake8.yml/badge.svg)](https://github.com/ithuna/pixe/actions/workflows/flake8.yml) [![pytest](https://github.com/ithuna/pixe/actions/workflows/pytest.yml/badge.svg)](https://github.com/ithuna/pixe/actions/workflows/pytest.yml) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\nA digital helper to keep your files neat and tidy.\n\nIn its most basic invocation: `pixe <directory with files>` `pixe` will copy all JPG files from a source directory into a new set of subdirectories based on capture date. These files will also be renamed based on said capture date and a calculated SHA1 hash.\n\n### subdirectories\n\nSubdirectories will be created, as needed, in the destination folder to match the creation date of the files being processed and will take the following form: `YYYY/M`\n\n### renamed files\nEach file (whether moved or copied) will have a new name applied to it based on the following pattern:\n`YYYYMMDD_hhmmss_<SHA1SUM>.jpg`\n\nThe datetime info is taken from the image capture datetime. The SHA1SUM is calculated based on the image data only (does not include image metadata).\n\n### example\n\nGiven a directory of images, `dirA` which contains a few image files:\n```\ndirA\n\u251c\u2500\u2500 IMG_0001.jpg\n\u251c\u2500\u2500 IMG_0002.jpg\n\u2514\u2500\u2500 IMG_1234.jpg\n```\n\nRunning `pixe /path/to/dirA` from within a second directory, `dirB` would result in the following directory structure:\n\n```\ndirB\n\u251c\u2500\u2500 2021\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 12\n\u2502\u00a0\u00a0     \u2514\u2500\u2500 20211225_062223_7d97e98f8af710c7e7fe703abc8f639e0ee507c4.jpg\n\u2514\u2500\u2500 2022\n    \u251c\u2500\u2500 2\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 20220202_123101_447d306060631570b7713ea48e74103c68eab0a3.jpg\n    \u2514\u2500\u2500 3\n        \u2514\u2500\u2500 20220316_232122_321c7d6f5be8739a8974e4c3512e3226eb6704a7.jpg\n```\n\n## Installation\n`$ pip install pixe`\n\n## Usage\n```\nUsage: pixe [OPTIONS] SRC\n\nOptions:\n  -d, --dest TEXT              desired destination\n  -r, --recurse                recurse into sub-directories (default: off)\n  --parallel / --serial        process files in parallel (default: --parallel)\n  --move, --mv / --copy, --cp  move files into DEST rather than copying\n                               (default: --copy)\n  --owner TEXT                 add camera owner to exif tags\n  --copyright TEXT             add copyright string to exif tags\n  --help                       Show this message and exit.\n```\n\n### Options\n\n#### -d, --dest TEXT\nThe base directory of where you want the processed files to end up. If this option is not specified, \nthe current working directory will be used.\n\n#### -r, --recurse\n`pixe` will recurse into any subdirectories it finds beneath SRC. The default is to not recurse.\n\n#### --parallel / --serial\nShould `pixe` process multiple files at once, in parallel using multiprocessing using all \navailable cores. If `--serial` is chosen one file will be processed at a time. The default is\nto process files in parallel if there is more than one file specified for processing.\n\n#### --move, --mv / --copy, --cp\nBy default, `pixe` will copy files into DEST and leave the source files untouched. This can be\noverridden by specifying `--move`.\n\n#### --owner\nA string which will be inserted into the CameraOwnerName EXIF tag [0xa430]\n\n#### --copyright\nA string which will be inserted into the Copyright EXIF tag [0x8298]\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "A digital helper to keep your files neat and tidy",
    "version": "0.7.3",
    "project_urls": {
        "homepage": "https://cwlls.dev/pixe",
        "repository": "https://github.com/cwlls/pixe.git"
    },
    "split_keywords": [
        "archive",
        " photos",
        " organize"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "85c93d37a32677b13d1ca4d9f74a7c9f1322b2d576181825df2acacd2393796e",
                "md5": "75b1aded6852b92cecd9d1c8b3a4134a",
                "sha256": "266dd9ead60c358660cd5cea0dda49cbbd55ccba3daf7fff6e75d966997853ef"
            },
            "downloads": -1,
            "filename": "pixe-0.7.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "75b1aded6852b92cecd9d1c8b3a4134a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.11",
            "size": 8798,
            "upload_time": "2024-05-30T12:06:09",
            "upload_time_iso_8601": "2024-05-30T12:06:09.000194Z",
            "url": "https://files.pythonhosted.org/packages/85/c9/3d37a32677b13d1ca4d9f74a7c9f1322b2d576181825df2acacd2393796e/pixe-0.7.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7c036b46bda818a1c6bb956a48531b9d06ce31abafa6cbb3779dc94a2e3ab160",
                "md5": "88e2d5ba55fa25621f6aac144de065b3",
                "sha256": "edd01d5559e557ab0748db1de64aa349e0e2d4e7c604dc94a9d80a204f3992ab"
            },
            "downloads": -1,
            "filename": "pixe-0.7.3.tar.gz",
            "has_sig": false,
            "md5_digest": "88e2d5ba55fa25621f6aac144de065b3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.11",
            "size": 8175,
            "upload_time": "2024-05-30T12:06:10",
            "upload_time_iso_8601": "2024-05-30T12:06:10.311461Z",
            "url": "https://files.pythonhosted.org/packages/7c/03/6b46bda818a1c6bb956a48531b9d06ce31abafa6cbb3779dc94a2e3ab160/pixe-0.7.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-30 12:06:10",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "cwlls",
    "github_project": "pixe",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pixe"
}
        
Elapsed time: 4.02234s