| Name | pixe JSON |
| Version |
0.8.2
JSON |
| download |
| home_page | None |
| Summary | A digital helper to keep your files neat and tidy |
| upload_time | 2025-10-28 21:33:56 |
| maintainer | None |
| docs_url | None |
| author | Chris Wells |
| requires_python | >=3.13 |
| license | None |
| keywords |
archive
photos
organize
|
| VCS |
 |
| bugtrack_url |
|
| requirements |
No requirements were recorded.
|
| Travis-CI |
No Travis.
|
| coveralls test coverage |
No coveralls.
|
# pixe
[](https://github.com/ithuna/pixe/actions/workflows/flake8.yml) [](https://github.com/ithuna/pixe/actions/workflows/pytest.yml) [](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.13",
"maintainer_email": null,
"keywords": "archive, photos, organize",
"author": "Chris Wells",
"author_email": "Chris Wells <chris@wells.io>",
"download_url": "https://files.pythonhosted.org/packages/ad/be/52b9b4aaadcaacaaf629d7168f0138c88fb48299eb7a5c24a9ca9ab1db21/pixe-0.8.2.tar.gz",
"platform": null,
"description": "# pixe\n[](https://github.com/ithuna/pixe/actions/workflows/flake8.yml) [](https://github.com/ithuna/pixe/actions/workflows/pytest.yml) [](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": null,
"summary": "A digital helper to keep your files neat and tidy",
"version": "0.8.2",
"project_urls": {
"homepage": "https://cwlls.com/pixe",
"repository": "https://github.com/cwlls/pixe.git"
},
"split_keywords": [
"archive",
" photos",
" organize"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "8664b67df5890bf88919836ae65505717e9ef994d81c71e04ba3e5925ffb4ac1",
"md5": "e2ffe750d2867b5be3553699e040c3ee",
"sha256": "04f66610bbbd0a3b2c33caba68d9b9d48b33a25b66ead09a6cf5710bc96bd909"
},
"downloads": -1,
"filename": "pixe-0.8.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e2ffe750d2867b5be3553699e040c3ee",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.13",
"size": 13446,
"upload_time": "2025-10-28T21:33:55",
"upload_time_iso_8601": "2025-10-28T21:33:55.427072Z",
"url": "https://files.pythonhosted.org/packages/86/64/b67df5890bf88919836ae65505717e9ef994d81c71e04ba3e5925ffb4ac1/pixe-0.8.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "adbe52b9b4aaadcaacaaf629d7168f0138c88fb48299eb7a5c24a9ca9ab1db21",
"md5": "87457a7ba689e410bdb5d477467cdccc",
"sha256": "4609d44d637dc51303a50b79e2fb3e6ef4e1a46ae53405649bdafd0c36b688de"
},
"downloads": -1,
"filename": "pixe-0.8.2.tar.gz",
"has_sig": false,
"md5_digest": "87457a7ba689e410bdb5d477467cdccc",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.13",
"size": 10657,
"upload_time": "2025-10-28T21:33:56",
"upload_time_iso_8601": "2025-10-28T21:33:56.581517Z",
"url": "https://files.pythonhosted.org/packages/ad/be/52b9b4aaadcaacaaf629d7168f0138c88fb48299eb7a5c24a9ca9ab1db21/pixe-0.8.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-28 21:33:56",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "cwlls",
"github_project": "pixe",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pixe"
}