Git Product home page Git Product logo

casvt / kapowarr Goto Github PK

View Code? Open in Web Editor NEW
315.0 12.0 11.0 12.63 MB

Kapowarr is a software to build and manage a comic book library, fitting in the *arr suite of software.

Home Page: https://casvt.github.io/Kapowarr/

License: GNU General Public License v3.0

Python 64.95% CSS 6.45% JavaScript 17.53% HTML 11.02% Dockerfile 0.04%
comic comic-downloader comicbook comics comics-downloader comicvine-api

kapowarr's People

Contributors

ajurna avatar berserkir-wolf avatar casvt avatar yodadacoda avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kapowarr's Issues

Add library import

Is your feature request related to a problem? Please describe.
Currently Kapowarr doesn't allow importing existing volumes from root folder

Describe the solution you'd like
Kapowarr should be able to scan the root folder and add existing volumes

Additional context
If people want to migrate from other apps and have a fairly large library it makes it hard to move to Kapowarr

Year as volume number

Description of the bug
Downloaded files are not added to db after being downloaded. The files are named correctly in the root folder, but aren't picked up

To Reproduce

  1. Go to settings
  2. Go to media management
  3. Change file naming to
{series_name} Vol.{year} - #{issue_number} ({issue_release_date})

Expected behaviour
File added to db after download

Version info
v1.0.0-beta-1
Chrome 113.0.5672.127 on Windows 11 (22621.1105)

Additional context

Filter wanted languages

Is your feature request related to a problem? Please describe.
Searching for comics from /add results in a lot of translations

Describe the solution you'd like
Check boxes here or in the Settings pages that would toggle desired languages in the results

Additional context
Sadly I don't think CV has this info, so may need to parse the descriptions

Add a restart button

Is your feature request related to a problem? Please describe.
Right now, there is no Restart button, so every time kapowarr stucks for some reason, i manual restart the container.

Describe the solution you'd like
Add a restart button, to be able to restart kapowarr.

Updating Volumes bug

Description of the bug

Gets stuck after running Update All task
To Reproduce

  1. Open Kapowarr
  2. See error

Expected behaviour

Update completes.
Screenshots

[2023-05-30 00:20:38][Thread-1][INFO] Added task: Update All (1)
[2023-05-30 00:20:38][Task Handler][INFO] Finished task Update All
[2023-05-30 01:20:39][Thread-2][INFO] Added task: Update All (1)
[2023-05-30 01:20:39][Task Handler][ERROR] An error occured while trying to run a task:
Traceback (most recent call last):
File "/app/backend/tasks.py", line 293, in __run_task
result = task.run()
File "/app/backend/tasks.py", line 229, in run
refresh_and_scan()
File "/app/backend/volumes.py", line 444, in refresh_and_scan
scan_files(Volume(volume[0]).get_info())
File "/app/backend/files.py", line 418, in scan_files
file_id = _add_file(file)
File "/app/backend/files.py", line 344, in _add_file
cursor.execute(
sqlite3.OperationalError: database is locked
[2023-05-30 02:20:40][Thread-3][INFO] Added task: Update All (2)
[2023-05-30 03:20:41][Thread-4][INFO] Added task: Update All (3)
[2023-05-30 04:20:41][Thread-5][INFO] Added task: Update All (4)
[2023-05-30 05:20:42][Thread-6][INFO] Added task: Update All (5)
...
Version info

v1.0.0-beta-1 Unraid

Additional context

Just started using the program so I only have 2 volumes. I am waiting to add more once a few other issues are fixed.

Automatic search fine tuning

When using the automatic search or "search monitored" button on the volume page, it almost always errors out. Strangely enough I can get the issues to download using the manual download button and it sees the issues that are correct with checkmarks next to them so I am not sure why the automated side does not.

OperationalError: database is locked

Screenshot 2023-06-14 at 12 49 36 AM
Description of the bug
Added multiple Volumes (comics) and suddenly Kapowarr froze at the state "Updating Info of all volumes" and was unable to complete. While the Activity - Queue was downloading some missing comics and stuck at "Importing".

By checking the logs i see "OperationalError: database is locked".

To Reproduce

  1. Add multiple volumes of various comics
  2. Search monitored
  3. Restart Kapowar

Additional context

I'm not familiar with Python but by searching on the Internet about concurrency for sqlite i found this
"PRAGMA journal_mode = wal;"

super().__init__(self.file, timeout=timeout)
super().cursor().execute("PRAGMA foreign_keys = ON;")
super().cursor().execute("PRAGMA journal_mode = wal;")
return

adding this line of code to db.py seems that it fixed this. I managed to see all volumes again and "db locked" message is not appearing anymore.

Support for exporting metadata

When a new series is added to the user's library, a series.json or ComicInfo.xml file should be generated for use in Komga to provide additional metadata about the comics. This would be useful if the book itself does not have this metadata embedded.

Currently, if a specific book does not have metadata embedded nor an external metadata file, no additional metadata for the series / volume / arc etc is shown in Komga.

Issue Number Padding

Is your feature request related to a problem? Please describe.
There currently doesn't seem to be a way to format the issue numbering to allow the padding of zeroes.

Describe the solution you'd like
An option to specify a how much padding can be used in the naming of issues.
e.g. instead of 1, 2, 3, ..., 99, 100
I'd like to be able to specify 01, 02, 03, ..., 98, 99
Or 001, 002, 003, ..., 099, 100

Refresh/Scan stuck if cannot find item location until application restarted

Description of the bug
Refresh/Scan getting stuck if contents are removed prior to scan and Kapowarr cannot find it. Disables ability to start another rescan and no current function to cancel scan. Only resolved upon restart.

To Reproduce

  1. Add item
  2. Delete folder/contents
  3. Attempt Refresh/Scan

Expected behaviour
Timeout or other way to continue function if contents not found.

Storing credentials safely

Is your feature request related to a problem? Please describe.

Currently, the credentials of services are stored in raw unencrypted format inside the database. That's not very safe...

Describe the solution you'd like

For the credentials to be stored in encrypted form inside the database.

Additional context

The whole problem is that I don't know how to implement this. The reason being that Kapowarr needs to have access to the raw credentials at any moment. This means that if the credentials were to be stored in encrypted form inside the database, Kapowarr will need to be able to decrypt the data at any point in time, without user input (like the user giving a password). If Kapowarr can decrypt data at any point in time without user input, so can any other person that has access to the database file. And thus we have this problem to which I don't know the solution.

Login page cannot see the symbol "#" in the password

Description of the bug
Using a password with the letter "#", the login page will not be able to see that symbol and any remaining letters after the # and so it leads to 'Password Invalid".

User a password with the letter "#", the login will fail with 'Password Invalid". The logs show that its unable to see the letter # and any remaining letters.

Example: password of "yL68#1zjaqH^LiLTVG!$Uxl*3!62^D" the logs show that there is a failed login attempt using the a password of "yL68" (see image below)

Removing the # from the password in the login screen will still fail but the logs can see the whole password "yL681zjaqH^LiLTVG!$Uxl*3!62^D" (see second image below)

If i set a new password without the letter # (example: yL681zjaqH^LiLTVG!$Uxl*3!62^D) I can successfully login.

To Reproduce

  1. Go to Settigns > General > Security > Login Password > Create passsword with the letter #. (example: yL68#1zjaqH^LiLTVG!$Uxl*3!62^D)
  2. log out
  3. go to login page and input the password > Invalid password
  4. check logs and see any letters after the # is not recorded.

Expected behaviour
To be able to login when the password uses the letter #.

Screenshots
image
image

Version info
Kapowarr version v1.0.0-beta-1
Python version 3.8.16.final.0
Database version 6
Database location /app/db/Kapowarr.db
Data folder /app

Server is running on Debian 11
Client is Arch Linux
firefox

Additional context
I simply like using long, complicated, randomly generated passwords

Notifications

Is your feature request related to a problem? Please describe.
I won't ever know if a file is snatched or upgraded.

Describe the solution you'd like
I'd like a solution like Sonarr/Radarr that allows me to add Slack and other notification services.

Add Mass Editor

Describe the solution you'd like
Ability to select/deselect items for batch editing including ability to rename selected, update selected, delete selected etc and an option to 'Select/Deselect All'.

Additional context
Other *arrs have this feature implemented for reference.

Use an API Library to validate and define the API endpoints

Is your feature request related to a problem? Please describe.
The API code is all custom, including the validation. This means that there is little validation that takes place on the API endpoints forcing API clients to use the API correctly. This could lead to security issues if data is badly parsed and actioned upon.

Describe the solution you'd like
Use a library like APIFlask to define the data models of accepted data. This would have the benefit of validating all input but also providing a Swagger or similar interface to auto document the API endpoints.

Additional context
Just thought this would be worth discussing early in the life of the project.

PUID and PGID support in container

Is your feature request related to a problem? Please describe.
I run your container on unraid from this contributed template (https://forums.unraid.net/topic/122788-support-jpdvm2014-templates/), but from what I can see there is no way to define which PUID and PGID the application within the container should run as, and so it seems to run as root by default. This causes some permission issues with newly created paths that are used by other applications with non-root permissions.

Describe the solution you'd like
A similar way that linuxserver.io does where you define PUID= and PGID= with unique ID's that the application runs as within the container. This would resolve the issue with files being written as root

Only download TPB's for TPB releases

I think one thing confusing people is Kapowarr prioritizes TPB over single issues. It downloads a single TPB marking all the issues as downloaded. For me, that is fine but others may like single issues as small file sizes instead of downloading the full TPB at a larger file size.

So an option to choose which volume type to prioritize would be nice. TPB or Single Issue on downloads.

Set UID, GID of downloaded files.

Is your feature request related to a problem? Please describe.
the container runs as root but i don't want to store my comics with root user and group.

Describe the solution you'd like
support for setting the uid and gid of the files downloaded.

Additional context
would also be nice to set the umask for the files as well. 644 might not be what people want.

Downloads locking up even with premium Mega

If downloading a lot, downloads can freeze up and stop working. What's weird is it even happens when premium Mega creds are added in settings. I wonder if the credentials are not being seen by Kapowarr.

Having to restart the container seems to work but gets annoying.

cant install using portainer

Description of the bug
information from portainer
failed to deploy a stack: service "kapowarr" refers to undefined volume kapowarr-db: invalid compose project

To Reproduce
I just copied compose scheme and paste it to porteiner, i changed only paths to download and root folders

Add a "What's New on GC" page

A page that shows latest comic releases on GC. If it's a series, allow it to be monitored and automatically downloaded when new releases are added to GC.

Manual file matching

Describe the solution you'd like
Ability to manually import files that are not automatically detected during search as in other *arrs.

Invalid Discord Invite

Description of the bug
On the /system/status page, the discord link takes you to an invalid/expired link

To Reproduce

  1. Go to /system/status
  2. Click on Discord link
  3. See error

Expected behaviour
This invite should be not expire and should be able to be used an unlimited numbero f times

Screenshots
image
image

Version info
1.0.0-beta1
Chrome 113.0.5672.127

Additional context
Additionally, these links should open in a new tab , target="_blank" so the user's page does not get redirected, and also it should have a rel="noreferrer" to omit the "Referer" header.

Cannot download files for comics beginning with a number

Description of the bug
cannot download files for comic "100 Bullets"

To Reproduce
add 100 bullets
search for a download
it will blacklist any release without downloading.
[2023-05-31 12:46:21][waitress-3][INFO] Adding download for volume 1: https://getcomics.org/dc/100-bullets-1-100/
[2023-05-31 13:21:19][waitress-3][INFO] Adding https://getcomics.org/dc/100-bullets-1-100/ to blocklist with reason "No supported or working links"

Expected behaviour
the files to download

Screenshots

Version info

Additional context
i have narrowed the issue down to here https://github.com/Casvt/Kapowarr/blob/development/backend/files.py#L273

this regex (series_regex https://github.com/Casvt/Kapowarr/blob/development/backend/files.py#L56) seems to be designed to remove all numbers at the start of a name.

when this returns it will have the series named "Bullets" which will not match the files "100 Bullets" and cause it to fail. I think this would cause any series that begins with a number to fail to download.

Changeable File Paths

Is your feature request related to a problem? Please describe.
Yes, I can't name my folders anything I'd like. For Star Wars comics, I remove the "Star Wars" prefix from the volume name because they all have that prefix so it's pointless to include.

Describe the solution you'd like
Use the Sonarr/Radarr way of folder setting. Allow me to just select a file path.

Additional info
Only flat folder structures are supported. If I want to store any set of volumes inside a folder, I have to create a whole new root folder for it.
Because of all the above reasons I can only use Kapowarr for some or my comics and not all.

Support for volumes as issues

Description of the bug
GetComics Download download Link extraction fails. Manually looking at the site, there is clearly a link.

To Reproduce
Add Bloodstain (2016)
Start manuall search for Issue Number 2
i get 2 search results, only one is correct
Try to download the correct one, relase gets blacklisted.

Expected behaviour
Downloading Issue 2
Link

Screenshots
None

Version info
Kapowarr version | v1.0.0-beta-13.8.16.final.06
/app/db/Kapowarr.db
/app
Browser: Brave v1.51.118 (May 17, 2023)
OS: Synology DSM 7.1. but in Docker

Additional context

This is only an example an can be reproduced with several other series

[2023-05-25 10:26:09][waitress-0][INFO] Starting manual search: Blood Stain (2016) #2
[2023-05-25 10:26:09][waitress-0][DEBUG] Starting new HTTPS connection (1): getcomics.org:443
[2023-05-25 10:26:10][waitress-0][DEBUG] https://getcomics.org:443 "GET /?s=Blood+Stain+%232+%282016%29 HTTP/1.1" 200 None
[2023-05-25 10:26:10][waitress-0][DEBUG] Using selector: EpollSelector
[2023-05-25 10:26:10][waitress-0][DEBUG] Starting new HTTPS connection (1): getcomics.org:443
[2023-05-25 10:26:10][waitress-0][DEBUG] https://getcomics.org:443 "GET /?s=Blood+Stain+Vol.+1+%232 HTTP/1.1" 200 None
[2023-05-25 10:26:10][waitress-0][DEBUG] Using selector: EpollSelector
[2023-05-25 10:26:10][waitress-0][DEBUG] Starting new HTTPS connection (1): getcomics.org:443
[2023-05-25 10:26:10][waitress-0][DEBUG] https://getcomics.org:443 "GET /?s=Blood+Stain+%232 HTTP/1.1" 200 None
[2023-05-25 10:26:11][waitress-0][DEBUG] Using selector: EpollSelector
[2023-05-25 10:26:11][waitress-0][DEBUG] Extracting filename data: Blood-Stained Teeth #2 (2022)
[2023-05-25 10:26:11][waitress-0][DEBUG] Extracting filename data: {'series': 'Blood-Stained Teeth', 'year': 2022, 'volume_number': None, 'special_version': None, 'issue_number': 2.0, 'annual': False}
[2023-05-25 10:26:11][waitress-0][DEBUG] Extracting filename data: Blood Stain Vol. 2 (2017)
[2023-05-25 10:26:11][waitress-0][DEBUG] Extracting filename data: {'series': 'Blood Stain', 'year': 2017, 'volume_number': 2, 'special_version': 'tpb', 'issue_number': None, 'annual': False}
[2023-05-25 10:26:11][waitress-0][DEBUG] Matching titles (Blood Stain, Blood-Stained Teeth): False
[2023-05-25 10:26:11][waitress-0][DEBUG] Manual search results: [{'series': 'Blood Stain', 'year': 2017, 'volume_number': 2, 'special_version': 'tpb', 'issue_number': None, 'annual': False, 'link': 'https://getcomics.org/other-comics/blood-stain-vol-2-2017/', 'display_title': 'Blood Stain Vol. 2 (2017)', 'source': 'GetComics', 'match': False, 'match_issue': 'Link is blocklisted'}, {'series': 'Blood-Stained Teeth', 'year': 2022, 'volume_number': None, 'special_version': None, 'issue_number': 2.0, 'annual': False, 'link': 'https://getcomics.org/other-comics/blood-stained-teeth-2-2022/', 'display_title': 'Blood-Stained Teeth #2 (2022)', 'source': 'GetComics', 'match': False, 'match_issue': "Title doesn't match"}]
[2023-05-25 10:26:16][waitress-8][DEBUG] POST /api/issues/47/download
[2023-05-25 10:26:16][waitress-8][INFO] Adding download for volume 12 issue 47: https://getcomics.org/other-comics/blood-stain-vol-2-2017/
[2023-05-25 10:26:16][waitress-8][DEBUG] Extracting download links from https://getcomics.org/other-comics/blood-stain-vol-2-2017/ for volume 12 and issue 47
[2023-05-25 10:26:16][waitress-8][DEBUG] Starting new HTTPS connection (1): getcomics.org:443
[2023-05-25 10:26:16][waitress-8][DEBUG] https://getcomics.org:443 "GET /other-comics/blood-stain-vol-2-2017/ HTTP/1.1" 200 None
[2023-05-25 10:26:16][waitress-8][DEBUG] Extracting download groups
[2023-05-25 10:26:16][waitress-8][DEBUG] Checking download link: https://eight.comicfiles.ru/Other/Others/Collection/Up9/Blood%20Stain%20v02%20%282017%29%20%28Digital-uHD%29%20%28Dogmatix-Empire%29.cbr, download now
[2023-05-25 10:26:16][waitress-8][DEBUG] Checking download link: download now maps to getcomics
[2023-05-25 10:26:16][waitress-8][INFO] Adding https://getcomics.org/other-comics/blood-stain-vol-2-2017/ to blocklist with reason "No supported or working links"
[2023-05-25 10:26:16][waitress-8][DEBUG] Fetching blocklist entry 1
[2023-05-25 10:26:16][waitress-8][WARNING] Unable to extract download links from source

Feature Request: List View

Describe the solution you'd like
Ability to toggle list view in the form of a table with columns etc.

Contribution Request: manual installation instructions for Ubuntu

I have taken note of the steps needed to install Kapowarr on Ubuntu - would like to contribute to the installation instructions page, if that would be useful. If there are specific distros that you'd like me to validate instructions for, let me know - I can spin them up in azure and figure it out.

Error when manually or automatically searching for issue

Description of the bug


[2023-05-25 00:13:47][Task Handler][DEBUG] Starting new HTTPS connection (1): getcomics.org:443

[2023-05-25 00:13:48][Task Handler][DEBUG] https://getcomics.org:443 "GET /?s=Guardians+of+the+Galaxy+%2318 HTTP/1.1" 200 None

[2023-05-25 00:13:48][Task Handler][DEBUG] Using selector: EpollSelector

[2023-05-25 00:13:48][Task Handler][DEBUG] Extracting filename data: Guardians Of The Galaxy #18 (2021)

[2023-05-25 00:13:48][Task Handler][DEBUG] Extracting filename data: {'series': 'Guardians Of The Galaxy', 'year': 2021, 'volume_number': None, 'special_version': None, 'issue_number': 18.0, 'annual': False}

[2023-05-25 00:13:48][Task Handler][DEBUG] Extracting filename data: Marvel Universe Guardians of the Galaxy #18 (2017)

[2023-05-25 00:13:48][Task Handler][DEBUG] Extracting filename data: {'series': 'Marvel Universe Guardians of the Galaxy', 'year': 2017, 'volume_number': None, 'special_version': None, 'issue_number': 18.0, 'annual': False}

[2023-05-25 00:13:48][Task Handler][DEBUG] Extracting filename data: Guardians of the Galaxy #18 (2017)

[2023-05-25 00:13:48][Task Handler][DEBUG] Extracting filename data: {'series': 'Guardians of the Galaxy', 'year': 2017, 'volume_number': None, 'special_version': None, 'issue_number': 18.0, 'annual': False}

[2023-05-25 00:13:48][Task Handler][DEBUG] Matching titles (Guardians of the Galaxy, Guardians Of The Galaxy): True

[2023-05-25 00:13:48][Task Handler][DEBUG] Matching titles (Guardians of the Galaxy, Marvel Universe Guardians of the Galaxy): False

[2023-05-25 00:13:48][Task Handler][DEBUG] Matching titles (Guardians of the Galaxy, Guardians of the Galaxy): True

[2023-05-25 00:13:48][Task Handler][ERROR] An error occured while trying to run a task: 

Traceback (most recent call last):

  File "/app/backend/tasks.py", line 293, in __run_task

    result = task.run()

  File "/app/backend/tasks.py", line 110, in run

    results = auto_search(self.volume_id, self.issue_id)

  File "/app/backend/search.py", line 443, in auto_search

    manual_search(volume_id, issue_id)

  File "/app/backend/search.py", line 349, in manual_search

    result.update(_check_match(result, title, volume_number, issue_numbers, calculated_issue_number, year))

  File "/app/backend/search.py", line 119, in _check_match

    or (isinstance(result['issue_number'], float) and issue_numbers.get(result['issue_number'][0]) == result['year'])

TypeError: 'float' object is not subscriptable

To Reproduce
Add a volume
Go into volume
Click either search button to search for it

Version info

Kapowarr version v1.0.0-beta-1
Python Version 3.8.16.final.0
Database version 6

Add websocket connection to UI for live UI updates

Description of the bug
Library not updating after search until page refresh

To Reproduce

  1. Add or download item
  2. Cross mark will not become check mark until page refresh

Expected behaviour
Check mark will appear after file recognition.

Delete volume and folder issues

Description of the bug
When adding a volume, then trying to delete it causes an error:

[2023-05-27 00:07:55][waitress-9][DEBUG] DELETE /api/volumes/34
[2023-05-27 00:07:55][waitress-9][INFO] Deleting volume 34 with delete_folder set to True
[2023-05-27 00:07:55][waitress-9][INFO] Deleting volume folder of 34
[2023-05-27 00:07:55][waitress-9][ERROR] Exception on /api/volumes/34 [DELETE]
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 2190, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1486, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1484, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1469, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/app/frontend/api.py", line 54, in wrapper
return method(*args, **kwargs)
File "/app/frontend/api.py", line 174, in wrapper
result = method(*args, **kwargs)
File "/app/frontend/api.py", line 401, in api_volume
volume.delete(delete_folder=delete_folder)
File "/app/backend/volumes.py", line 300, in delete
delete_volume_folder(self.id)
File "/app/backend/files.py", line 534, in delete_volume_folder
samefile(folder, root_folder)
File "/usr/local/lib/python3.8/genericpath.py", line 100, in samefile
s1 = os.stat(f1)
FileNotFoundError: [Errno 2] No such file or directory: '/content/DC Comics/Watchmen (1986)'

The path gets deleted, but it seems to do an extra check somewhere that causes it to no longer find it.

To Reproduce

  1. Add tWatchmen (1986)
  2. Delete and select yes to delete the folder
  3. Same error repeats if trying to click delete again
  4. Selecting no causes the volume to be removed from the database and ends up being a successful removal of both database item as well as folder

Expected behaviour
Both folder and volume gets removed from the database and filesystem

Version info
Kapowarr: v1.0.0-beta-1
Python: 3.8.16.final.0
Database version: 6

Happens both on Windows 11 with google chrome version 113.0.5672.127 and on Ubuntu 22.04 with the same chrome version. Not tested on other browsers, yet.

Number issues set number of leading zeros

Is your feature request related to a problem? Please describe.
when configuring file renaming, you should be able to set the number of zero's before the first number, for example issue number one should be "comic name 1" or "comic name 001" when you get to issue ten it would be "comic name 010"

Describe the solution you'd like
the ability to set leading zeros in file renaming so {issue_number} can have a parameter in it like {issue_number-000} to determine how many zeros to pad with.

Additional context

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.