pixe


Namepixe JSON
Version 0.7.1 PyPI version JSON
download
home_pageNone
SummaryA digital helper to keep your files neat and tidy
upload_time2024-04-29 01:33:24
maintainerNone
docs_urlNone
authorNone
requires_python>=3.11
licenseApache License, Version 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": ">=3.11",
    "maintainer_email": null,
    "keywords": "archive, photos, organize",
    "author": null,
    "author_email": "Chris Wells <chris@ithuna.com>",
    "download_url": "https://files.pythonhosted.org/packages/7d/82/05edab1466b6b16eecbcf482aeac2d362281a4bae9e5bb7e2e9e8ce6fbd6/pixe-0.7.1.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 License, Version 2.0",
    "summary": "A digital helper to keep your files neat and tidy",
    "version": "0.7.1",
    "project_urls": {
        "homepage": "https://github.com/ithuna/pixe.git"
    },
    "split_keywords": [
        "archive",
        " photos",
        " organize"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "073e663b53f69e34a156d523378e258bb2adb3c8dd67465ef126be7e2cfd8cc1",
                "md5": "7bbf5bd26785974513e996a1306ee48d",
                "sha256": "1648cc5d02b8e6809b8e828b6fe8a04fa70168f3e2af626e4c01842ecf9c441a"
            },
            "downloads": -1,
            "filename": "pixe-0.7.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7bbf5bd26785974513e996a1306ee48d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 13066,
            "upload_time": "2024-04-29T01:33:23",
            "upload_time_iso_8601": "2024-04-29T01:33:23.019637Z",
            "url": "https://files.pythonhosted.org/packages/07/3e/663b53f69e34a156d523378e258bb2adb3c8dd67465ef126be7e2cfd8cc1/pixe-0.7.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7d8205edab1466b6b16eecbcf482aeac2d362281a4bae9e5bb7e2e9e8ce6fbd6",
                "md5": "4dd25602ebaaa616d1d8c38c029f13d3",
                "sha256": "0b9c650d244d33f31617f40fda0b843fa3fae3b19dd0055f434563689d3284be"
            },
            "downloads": -1,
            "filename": "pixe-0.7.1.tar.gz",
            "has_sig": false,
            "md5_digest": "4dd25602ebaaa616d1d8c38c029f13d3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 13026,
            "upload_time": "2024-04-29T01:33:24",
            "upload_time_iso_8601": "2024-04-29T01:33:24.170058Z",
            "url": "https://files.pythonhosted.org/packages/7d/82/05edab1466b6b16eecbcf482aeac2d362281a4bae9e5bb7e2e9e8ce6fbd6/pixe-0.7.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-29 01:33:24",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ithuna",
    "github_project": "pixe",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pixe"
}
        
Elapsed time: 0.25942s