Metadata-Version: 2.4
Name: picture-archiver
Version: 0.1.5
Summary: Rename, sort, and safely archive exported picture and video files.
Project-URL: Homepage, https://github.com/Ryota-Nitto/PictureArchiver
Project-URL: Repository, https://github.com/Ryota-Nitto/PictureArchiver
Project-URL: Issues, https://github.com/Ryota-Nitto/PictureArchiver/issues
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: Pillow
Requires-Dist: piexif
Requires-Dist: rawpy
Requires-Dist: Send2Trash

# PictureArchiver

Photos ライブラリなどから書き出した写真・動画を、撮影日時ベースの名前にして `archive/` と `raw/` へ整理します。

## ディレクトリ

`parc` は実行したディレクトリを写真管理用のルートとして扱います。

```text
Pictures/
├── import/      # 書き出した処理対象ファイル
├── archive/     # JPEG/HEIC/PNG/WebP/動画の保存先
├── raw/         # RAW ファイルの保存先
└── .stage/      # apply 前の作業コピー
```

## 使い方

```bash
pip install picture-archiver

cd /path/to/Pictures
parc stage
parc apply
```

1. `import/` に写真や動画を書き出す
2. `parc stage` で差分を確認する
3. 問題なければ `parc apply` で反映する

`parc stage` は `import/` のファイルを `.stage/` 内で整理し、適用予定だけを表示します。

`parc apply` は `.stage/` の内容を `archive/` と `raw/` に反映します。上書きや削除される既存ファイルと、apply 後の `import/` の中身はゴミ箱へ移動します。

## 例

次の例では、`import/` に新しい写真を書き出し済みで、`archive/` には同名になる古い JPEG があるとします。

```text
Pictures/
├── import/
│   ├── IMG_0000.jpeg        # 2024-05-06 12:34:56.789
│   ├── IMG_0001.heic        # 2024-05-06 12:34:56.789
│   └── IMG_0000.cr2         # 2024-05-06 12:34:56.789
├── archive/
│   └── 2024/
│       └── 2024-05-06/
│           └── 20240506_123456_789.jpeg  # IMG_0000.jpeg で置き換える
└── raw/
```

`parc stage` を実施すると次のような確認が出力されます。

```shell-session
$ parc stage
Staged changes:
Archive:
  overwrite 2024/2024-05-06/20240506_123456_789.jpeg (from import/IMG_0000.jpeg)
  add 2024/2024-05-06/20240506_123456_789.heic

Raw:
  add canon cr2/20240506_123456_789.cr2

No files changed yet. Apply with: parc apply
```

この時点では `archive/` と `raw/` はまだ変わっていません。

`overwrite` が出たら、`import/IMG_0000.jpeg` と `archive/2024/2024-05-06/20240506_123456_789.jpeg` を見比べてください。画像の中身、ファイルサイズ、撮影日時などを確認し、置き換えたくない場合は `import/` から `IMG_0000.jpeg` を外して `parc stage` をやり直します。置き換えてよい場合は、そのまま `parc apply` を実行します。

`parc apply` で反映すると次のようになります。

```text
Pictures/
├── import/
├── archive/
│   └── 2024/
│       └── 2024-05-06/
│           ├── 20240506_123456_789.jpeg
│           └── 20240506_123456_789.heic
└── raw/
    └── canon cr2/
        └── 20240506_123456_789.cr2
```

置き換え前の JPEG はゴミ箱へ移動されます。

## 表示の意味

- `add`: 新規追加
- `overwrite`: import したファイルが既存の同名ファイルを置き換える
- `update`: stage と archive/raw の同じパスに差分がある
- `delete`: archive/raw から削除される

## オプション

```bash
parc stage --replace  # stage を作り直す
parc stage --apply    # stage後に続けて apply する
```

ルートや各ディレクトリを明示する場合:

```bash
export PA_ROOT=/path/to/Pictures
export PA_IMPORT_DIR=/path/to/import
export PA_ARCHIVE_DIR=/path/to/archive
export PA_RAW_DIR=/path/to/raw
export PA_STAGE_ROOT=/path/to/stage
```

## 整理ルール

`import/` にあるファイルは、撮影日時から `yyyymmdd_HHMMSS_mmm.ext` 形式へリネームされます。

- JPEG/HEIC/PNG/WebP/動画: `archive/年/年-月-日/`
- RAW: `raw/RAW形式/`

同じ日付の `archive/2024/2024-05-06 イベント名/` のようなフォルダがすでにある場合は、新しく `2024-05-06/` を作らず、そのイベント名付きフォルダに追加します。
