|
9 | 9 | [](https://github.com/astral-sh/ruff) |
10 | 10 |
|
11 | 11 | [](https://github.com/Buried-In-Code/Perdoo/graphs/contributors) |
| 12 | +[](https://github.com/Buried-In-Code/Perdoo/actions/workflows/testing.yaml) |
| 13 | +[](https://github.com/Buried-In-Code/Perdoo/actions/workflows/publishing.yaml) |
| 14 | + |
12 | 15 |
|
13 | 16 | Perdoo is designed to assist in sorting and organizing your comic collection by utilizing metadata files stored within comic archives.\ |
14 | 17 | Perdoo standardizes all your digital comics into a unified format (cb7, cbt, or cbz).\ |
@@ -93,44 +96,53 @@ Unlike other tagging tools, Perdoo employs a manual approach when metadata files |
93 | 96 | - [Marvel](https://www.marvel.com/comics) using the [Esak](https://github.com/Metron-Project/Esak) library. |
94 | 97 | - [Metron](https://metron.cloud) using the [Mokkari](https://github.com/Metron-Project/Mokkari) library. |
95 | 98 |
|
96 | | -## File Organization |
97 | | - |
98 | | -### Series Naming |
99 | | - |
100 | | -Series with a volume greater than 1 will display its volume in the title. |
101 | | - |
102 | | -### Comic Naming |
103 | | - |
104 | | -The files are named based on the format of the comic: |
105 | | - |
106 | | -- **_Default_**: `{Series Title}_#{Issue Number}.cbz` |
107 | | -- Annual: `{Series Title}_Annual_#{Issue Number}.cbz` |
108 | | -- Digital Chapter: `{Series Title}_Chapter_#{Issue Number}.cbz` |
109 | | -- Graphic Novel: `{Series Title}_#{Issue Number}_GN.cbz` |
110 | | -- Hardcover: `{Series Title}_#{Issue Number}_HC.cbz` |
111 | | -- Omnibus: `{Series Title}_#{Issue Number}.cbz` |
112 | | -- Trade Paperback: `{Series Title}_#{Issue Number}_TPB.cbz` |
113 | | - |
114 | | -### Folder Structure |
115 | | - |
116 | | -``` |
117 | | -Collection Root |
118 | | -+-- Publisher |
119 | | -| +-- Series |
120 | | -| | +-- Series_#001.cbz |
121 | | -| | +-- Series_Annual_#01.cbz |
122 | | -| | +-- Series_Chapter_#01.cbz |
123 | | -| | +-- Series_#01_GN.cbz |
124 | | -| | +-- Series_#01_HC.cbz |
125 | | -| | +-- Series_#01_TPB.cbz |
126 | | -| +-- Series-v2 |
127 | | -| | +-- Series-v2_#001.cbz |
128 | | -| | +-- Series-v2_Annual_#01.cbz |
129 | | -| | +-- Series-v2_Chapter_#01.cbz |
130 | | -| | +-- Series-v2_#01_GN.cbz |
131 | | -| | +-- Series-v2_#01_HC.cbz |
132 | | -| | +-- Series-v2_#01_TPB.cbz |
133 | | -``` |
| 99 | +## File Renaming and Organization |
| 100 | + |
| 101 | +File naming and organization uses a pattern-based approach, it tries to name based on the MetronInfo data with a fallback to ComicInfo. |
| 102 | +Naming is done based on the Comic Format, set the value to `""` and it will fallback to the default setting. |
| 103 | + |
| 104 | +- **_Default_**: `{publisher-name}/{series-name}-v{volume}/{series-name}-v{volume}_#{number:3}` |
| 105 | +- **Annual**: `{publisher-name}/{series-name}-v{volume}/{series-name}-v{volume}_Annual_#{number:2}` |
| 106 | +- **Digital Chapter**: `{publisher-name}/{series-name}-v{volume}/{series-name}-v{volume}_Chapter_#{number:3}` |
| 107 | +- **Graphic Novel**: `{publisher-name}/{series-name}-v{volume}/{series-name}-v{volume}_GN_#{number:2}` |
| 108 | +- **Hardcover**: `{publisher-name}/{series-name}-v{volume}/{series-name}-v{volume}_HC_#{number:2}` |
| 109 | +- **Limited Series**: `""` _Falls back to Default_ |
| 110 | +- **Omnibus**: `{publisher-name}/{series-name}-v{volume}/{series-name}-v{volume}_OB_#{number:2}` |
| 111 | +- **One-Shot**: `""` _Falls back to Default_ |
| 112 | +- **Single Issue**: `""` _Falls back to Default_ |
| 113 | +- **Trade Paperback**: `{publisher-name}/{series-name}-v{volume}/{series-name}-v{volume}_TPB_#{number:2}` |
| 114 | + |
| 115 | +### Options |
| 116 | + |
| 117 | +- **Padding**: Int and Int-like fields, such as `{number}`, can include optional zero-padding by specifying the length (e.g. `{number:3}` will pad 0's to be atleast 3 digits long, `12` => `012`). |
| 118 | +- **Sanitization**: All metadata values are sanitized to remove characters outside the set `0-9a-zA-Z&!-`. Custom characters can still be added directly to patterns. |
| 119 | + |
| 120 | +| Pattern Key | Description | |
| 121 | +| -------------------- | ------------------------------------------------------ | |
| 122 | +| `{cover-date}` | The issue cover date in `yyyy-mm-dd` format. | |
| 123 | +| `{cover-day}` | The day from the issue cover date. | |
| 124 | +| `{cover-month}` | The month from the issue cover date. | |
| 125 | +| `{cover-year}` | The year from the issue cover date. | |
| 126 | +| `{format}` | The full format name of the series. | |
| 127 | +| `{id}` | The primary id of the issue. | |
| 128 | +| `{imprint}` | The publisher's imprint. | |
| 129 | +| `{isbn}` | The issue's ISBN. | |
| 130 | +| `{issue-count}` | The total number of issues in the series. | |
| 131 | +| `{lang}` | The issue's language. | |
| 132 | +| `{number}` | The issue number. | |
| 133 | +| `{publisher-id}` | The publisher's unique id. | |
| 134 | +| `{publisher-name}` | The full name of the publisher. | |
| 135 | +| `{series-id}` | The series' unique id. | |
| 136 | +| `{series-name}` | The full name of the series. | |
| 137 | +| `{series-sort-name}` | Sort-friendly name (omits leading "The", "A", etc...). | |
| 138 | +| `{series-year}` | The year the series started. | |
| 139 | +| `{store-date}` | The store date of the issue in `yyyy-mm-dd` format. | |
| 140 | +| `{store-day}` | The day from the issue store date. | |
| 141 | +| `{store-month}` | The month from the issue store date. | |
| 142 | +| `{store-year}` | The year from the issue store date. | |
| 143 | +| `{title}` | The issue title. | |
| 144 | +| `{upc}` | The issue's UPC. | |
| 145 | +| `{volume}` | The volume of the series. | |
134 | 146 |
|
135 | 147 | ## Socials |
136 | 148 |
|
|
0 commit comments