Git Product home page Git Product logo

proxyshop's Introduction

Showcase Image Proxyshop is a Photoshop automation app that generates high-quality Magic the Gathering card renders. Inspired by Chilli-Axe's original Photoshop automation scripts. If you need help with this app or wish to troubleshoot an issue, please join our discord!

Photoshop Python Discord GitHub commit activity (branch) Patreon GitHub

πŸ› οΈ Requirements

  • Photoshop (2017-2024 Supported)
  • Windows (currently incompatible with Mac/Linux)
  • The Photoshop templates (Can be downloaded in the app)
  • Required fonts (included in fonts/):
    • Beleren Proxy Bold β€” For Card Name, Typeline, Power/Toughness
    • Proxyglyph β€” For mana symbols, a fork of Chilli's NDPMTG font
    • Plantin MT Pro β€” For rules text, install all variants included
    • Beleren Smallcaps β€” For Artist credit line and miscellaneous
    • Gotham Medium β€” For collector text
  • Optional (but recommended) fonts:
    • Magic The Gathering β€” Required by Classic template
    • Matrix Bold β€” Required by Colorshifted template
    • Mana β€” For various additional card symbols

πŸš€ Setup Guide

  1. Download the latest release, extract it to a folder of your choice.
  2. Install the fonts included in the fonts/ folder, please note that Proxyglyph may need to be updated in future releases.
  3. Place card arts for cards you wish to render in the art/ folder. These arts should be named according to the card (see Art File Naming for more info).
  4. Launch Proxyshop.exe. Click the Update button. Proxyshop will load templates available to download, grab what you want.
  5. Hit Render All to render every card art in the art/ folder. Hit Render Target to render one or more specific card arts.
  6. You can also drag art images or folders containing art images onto the Proxyshop app, Proxyshop will automatically start rendering those cards.
  7. During the render process the console at the bottom will display the current progress and prompt you if any failures occur.

🎨 Art File Naming

  • Art file types currently supported are: jpg, jpeg, jpf, png, tif, and webp. NOTE: webp requires Photoshop 2022+.
  • Art files should be named after real Magic the Gathering cards and should be named as accurately as possible, e.g. Damnation.jpg.
  • Proxyshop supports several optional tags when naming your art files, to give you more control over how the card is rendered!
    • Set [SET] β€” Forces Photoshop to render a version of that card from a specific MTG expansion matching the given set code. This tag is not case sensitive, so both "set" and "SET" will work.
    Damnation [TSR].jpg
    
    • Collector Number {num} β€” Only works if Set tag was also provided, render a version of that card with the exact set code and number combination. This is particularly useful in cases where a set has multiple versions of the same card, for example Secret Lair (SLD) has 3 different versions of Brainstorm.
    Brainstorm [SLD] {175}.jpg
    
    • Artist Name (Artist Name) β€” When filling in the artist name, Proxyshop will override the name present in the Scryfall data with the name you provide. This change is purely cosmetic and does not affect how the card is fetched, nor does it conflict with other tags.
    Brainstorm [SLD] {175} (Rusty Shackleford).jpg
    
    • Creator Name $Creator Name β€” This tag is not widely supported by Proxyshop's default templates. This tag allows you to insert your preferred name as a user/designer/creator, and if the template supports the creator name feature this text will be placed on a specified text layer. Can be used as a kind of signature for your work. NOTE: This tag MUST be placed at the VERY END of the art file name.
    Brainstorm [SLD] {175}$My Creator Name.jpg
    

πŸ’» Using the Proxyshop GUI

Render Cards Tab

  • The main tab for rendering authentic Magic the Gathering cards.
  • Render All: Renders a card image using each art image found in the art/ folder.
  • Render Target: Opens file select in Photoshop, renders a card image using each art image you select.
  • Global Settings: Opens a settings panel used to change app-wide options for:
    • Main settings: Affects template behavior, can be modified for individual templates. When you click the βš™οΈ icon next to a template, a config file is generated for that template which overrides these settings.
    • System settings: Affects the entire application and cannot be changed for individual templates.
  • The set of tabs below these buttons represent template types, e.g. Normal, MDFC, Transform, etc.
    • Template types represent different kinds of templates which require different frame elements or different rendering techniques.
    • If the Normal tab is active, and you click on a template button, that template becomes selected for the Normal template type. Cards which match the Normal type will now render using that template.
    • That template DOES NOT become selected for other types. For example, if Borderless is selected in the Normal tab, but Normal is selected in the MDFC tab. Cards that match the MDFC type will render using Normal MDFC.
  • Next to each template in the template list there are two icons:
    • βš™οΈ Lets you change the Main Settings for this template, some templates will also have their own specially designed settings you can change as well.
    • 🧹 Deletes the separate config file generated for this template, effectively returning this template back to default settings. Ensures Main Settings for this template are governed by the Global Settings panel.
  • The dark grey area below the templates selector is the Console, this is where status messages will be displayed tracking render progress and other user actions.
  • To the right of the Console are some useful buttons:
    • πŸ“Œ Pins the Proxyshop window, so it remains above all other running programs
    • πŸ“· Takes a screenshot of the Proxyshop window, saves to: out/screenshots/
    • 🌍 Opens your default web browser, navigating to Proxyshop's GitHub page
    • ❔ Opens your default web browser, navigating to our community Discord server
    • Continue: Becomes active when app is waiting for a user response, either when manual editing is enabled or an error has occurred.
    • Cancel: Becomes active when cards are being rendered, can cancel the render operation at any time or if an error occurs.
    • Update: Opens the Updater panel which allows you to download new templates and update existing ones.

Custom Creator Tab

  • This tab controls the custom card creator.
  • This feature is currently considered experimental beta and may have issues.
  • You can currently render Normal, Planeswalker, or Saga cards, just fill in the appropriate data and hit Render Custom.
  • More features and card types will be added in the near future.

Tools Tab

  • This tab contains a growing list of helpful tools and utilities.
  • Render All Showcases: Generates a bordered showcase image for each card image in the out/ folder, showcases will be placed in out/showcase/.
  • Render Target Showcase: Opens a file select in Photoshop, generates a bordered showcase image for each card image you select.
  • Compress Renders: This tool reduces the size of card images stored in the out/ folder. The settings are:
    • Quality: JPEG save quality of the compressed image, supports a number between 1 and 100. (Recommended: 95-99)
    • Optimize: Enables Pillow's automatic "optimize" flag. Lowers filesize by a small margin for no discernible downside. (Recommended: On)
    • 800 DPI: Downscales card images above 800 DPI to a maximum of 800 DPI. Most Proxyshop templates are 1200 DPI which is much higher than anyone really needs. Most printing services do not print above 800 DPI. (Recommended: On)

🐍 Setup Guide (Python Environment)

Setting up the Python environment for Proxyshop is intended for advanced users, contributors, and anyone who wants to get their hands dirty making a plugin or custom template for the app!

  1. Install Poetry using one of these methods.
    # Install pipx, then install poetry with pipx (Recommended)
    python -m pip install --user pipx
    python -m pipx ensurepath
    pipx install poetry
    
    # Install using Powershell
    (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
    
    # Install using WSL (Windows Subsystem for Linux)
    curl -sSL https://install.python-poetry.org | python3 -
    
    # Install using scoop
    scoop install poetry
  2. Clone Proxyshop somewhere on your system, we'll call this repository the root directory.
    git clone https://github.com/MrTeferi/Proxyshop.git
  3. Navigate to the root directory and install the Proxyshop project with poetry.
    # Move to the Proxyshop repository we just cloned
    cd Proxyshop
    
    # OPTIONAL: Configure poetry to setup the environment locally
    poetry config virtualenvs.in-project true
    
    # Install the Proxyshop project
    poetry install
  4. Install the fonts included in the fonts/ folder. Do not delete these, even after you install them (some are used by the GUI).
  5. Create a folder called art in the root directory. This is where you place art images for cards you wish to render.
  6. Run the app.
    # OPTION 1) Execute via poetry
    poetry run main.py
    
    # OPTION 2) Enter the poetry environment, then execute normally
    poetry shell
    py main.py
  7. Refer to the usage guide for navigating the GUI.

πŸ’Ύ Download Templates Manually

If you wish to download the templates manually, visit this link:

  • Right-click the Zipped folder and hit Download.
  • This will download all Proxyshop templates, Google Drive may split this download into multiple zip files.
  • Once the zips are downloaded, move them into the templates/ folder. Select them all, Right-click -> 7-Zip -> Extract here.
  • Once extracted, you will have a lot of .7z archive files, this is because we compress PSD templates to reduce their hosting footprint.
  • Once again, select the .7z archives, and extract using the same process.
  • You will also notice two folders: MrTeferi/ and SilvanMTG/
  • Copy the contents of these folders to: plugins/MrTeferi/templates/ and plugins/SilvanMTG/templates/
  • Once again, extract those .7z archives using the same process as before. All done!

πŸ’Œ How can I support Proxyshop?

Feel free to join our discord and participate in the #Proxyshop channel where we are constantly brainstorming and testing new features, dropping beta releases, and sharing new plugins and templates. Also, please consider supporting our Patreon which pays for S3 + Cloudfront hosting of Proxyshop templates and allows us the freedom to work on the app, as well as other applications like MPC Autofill, MTG Art Downloader, and more! If Patreon isn't your thing, you can also buy me a coffee via Paypal. Thanks so much to our awesome supporters!

❓ FAQ

How do I change the set symbol to something else?

In settings, change "Default Symbol" to the set code of the symbol you want, and enable "Force Default Symbol". If you wish to add a totally custom symbol, here's the process:

  • Head over to src/img/symbols/ and create a folder named according a new custom code.
  • Add your custom SVG symbols to the folder you created, name each file according to the first letter of its rarity (capitalized).
  • Set that symbol as "Default Symbol" and enabled "Force Default Symbol". You're good to go!
How do I completely hide the set symbol?

In Global Settings, or settings for a specific template, change "Symbol Render Mode" to None. This disables the expansion symbol altogether.

How do I hide a layer in a Proxyshop template, so it doesn't appear in rendered cards?

In the Photoshop template of your choice, change the opacity to 0 on the layer you wish to hide. You can use this method to hide anything. This is safer than just disabling the layer's visibility because layers may be forcibly enabled and disabled by the app, it's also safer than deleting the layer because that may cause errors on some templates.

Where is a good place to find high quality MTG art?

Your best resource is going to be MTG Pics, to improve art quality even more you can look into upscaling with Topaz/Chainner/ESRGAN. On our discord we provide a lot of resources for learning how to upscale art easily and effectively. For mass downloading art, view my other project: MTG Art Downloader

The app stops when trying to enter text and Photoshop becomes unresponsive!

There is a known bug where Photoshop crashes when trying to enter too much text into a text box, it should be fixed but could theoretically happen on some plugin templates that don't make the text box big enough. The best way to fix this is to open the template in Photoshop and expand the bottom edge of the Rules text boxes (creature and noncreature).

Required value is missing / RPC server not responding.

This can sometimes be one of the more rare but obnoxious errors that occur on some systems. Sometimes the root cause is unknown, but it can usually be fixed. Try these options in order until something works:

  • Ensure there is only ONE installation of Photoshop on your computer. Having two versions of Photoshop installed at the same time can prevent making a connection to the app. If you have more than one installed, uninstall all versions of Photoshop and reinstall one version. You must uninstall all of them first, just removing one likely won't fix the issue.
  • Ensure that your Photoshop application was installed using an actual installer. Portable installations of Photoshop do not work with Proxyshop, since Windows needs to know where it is located.
  • Close Photoshop and Proxyshop, then run both Photoshop and Proxyshop as Administrator, try rendering something.
  • Close both of them, then hold ALT + CTRL + SHIFT while launching Photoshop, then launch Proxyshop, try again.
  • Restart your computer, then start both and try again.
  • If you have a particularly over-defensive antivirus software running that may be interfering with Proxyshop connecting to Photoshop, such as Avast, Norton, etc. close your antivirus software, relaunch both, and try again. You might also try disabling Windows Defender.
  • If there's a chance your Photoshop installation could be damaged, corrupted, or otherwise messed up in some way, it is recommended to completely uninstall Photoshop and install the latest version you have access to. Generally, Proxyshop works best with newer versions of Photoshop. If using an in-authentic version of Photoshop, verify it is of high quality and uses a real installer.
  • If all of these fail to fix the issue, please join our Discord (linked at the top) and provide the error log from logs/error.txt in your Proxyshop directory, so we can help find the cause :)
Mana Cost, Rules, or other text is huge and not scaling down?
  • In Photoshop go to Edit > Preferences > Units & Rulers.
  • Set Rulers to Pixels
  • Set Type to Points
  • The issue should be fixed.
Photoshop is busy!

This error occurs when Photoshop is not responding to commands because it is busy. To prevent this error, you must ensure Photoshop is in a neutral state when you run Proxyshop or render a card:

  • There should be no dialog boxes or settings menus open in Photoshop. The normal tool panels are fine.
  • There should be no tools performing tasks, for example having text highlighted for editing with the text tool.
  • Ideally Photoshop should be launched fresh, with no documents open.
I'm getting some other error!

In your proxyshop directory, look for a folder named logs, inside that folder you should see error.txt, check the last error log in that file. If the error isn't obvious, join our Discord and feel free to ask for help in the #Proxyshop channel.

✨ Credits

  • Our amazing Patreon supporters who literally keep this project going.
  • Chilli Axe for his outstanding MTG Photoshop Automation project that Proxyshop was inspired by, and for producing many of the base PSD templates that have been modified to work with Proxyshop.
  • Additional template and asset support from:
    • SilvanMTG
    • Nelynes
    • Trix are for Scoot
    • FeuerAmeise
    • michayggdrasil
    • Warpdandy
    • MaleMPC
    • Vittorio Masia
    • iDerp
    • TupinambΓ‘ (Pedro Neves)
  • Andrew Gioia for his various font projects which have been of use for Proxyshop in the past.
  • John Prime, Haven King, and members of CCGHQ for providing expansion symbol SVG's.
  • Hal and the other contributors over at Photoshop Python API.
  • Wizards of the Coast and all the talented artists who make Magic the Gathering a reality.
  • Countless others who have provided help and other assets to the community that made various features possible.
  • All contributors to the code base.

proxyshop's People

Contributors

davidianstyle avatar helixvita avatar investigamer avatar lmancini avatar preshtildeath 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

proxyshop's Issues

[BUG] - New scryfall search includes art cards on the search results and those aren't valid to render

Describe the bug
Scryfall search is including art cards on the search results and this makes proxyshop discard the search result and throw a "Layout incompatible" error.

To Reproduce
Steps to reproduce the behavior:

  1. Open config.ini and set Scryfall.Ascending = True
  2. Put a file called "Prismatic Vista" in the art folder
  3. Press render
  4. It says "Layout incompatible"

Your system:

  • Python version: 3.10.4
  • Windows version: W10
  • Photoshop version: 2021
  • Proxyshop version: 1.1.9

Screenshots
image

[FEAT] - The ability to render dev/test cards by supplying a cards.txt (instead of image files in art folder)

Is your feature request related to a problem? Please describe.
The way I’m testing cards now is by just copy-pasting the exact same test picture, say, 100 times and giving it different names for the cards that I want to test. This is a bit tedious, and it increases the time it takes to develop and test new Proxyshop templates / plugins.

Describe the solution you'd like
I figure at this point it’d make more sense if it was possible to just feed Proxyshop a single txt file (essentially the same kind of "cards.txt" file that MTG-Art-Downloader uses). This would be a lot more simple than having to create 100 identical JPGs with different filenames.

To clarify. I’m not asking for a feature that automatically grabs the correct art from some repo. About 99% of the time I spend with Proxyshop is spent just testing and developing templates, so I don’t care about the art. Thus, as far as I'm concerned, they can all use the exact same sample image, for example the pumpkin patch one used in the test module.

As a bonus, I think having this kind of ability to run a render_all on a simple cards.txt file would make stuff like test-driven development and unit tests much easier. Not only for template creators, but for Proxyshop as a whole.

Just an idea, anyway.

Describe alternatives you've considered
Perhaps it's possible to get this functionality in Proxyshop by just expanding a bit on the functionality of the recently implemented "Dev Mode"? Aside from a few details, it seems pretty close to what I'm describing.

Python version of v1.1.8 doesn't work due to the missing env.json

Describe the bug
Python version of v1.1.8 doesn't work due to the missing env.json

Traceback

 Traceback (most recent call last):
   File "c:/Users/helixvita/Dropbox/mpcproxies/git-helixvita/MTG-Proxyshop/main.py", line 25, in <module>
     from proxyshop.creator import CreatorPanels
   File "c:\Users\helixvita\Dropbox\mpcproxies\git-helixvita\MTG-Proxyshop\proxyshop\creator.py", line 13, in <module>
     from proxyshop import core
   File "c:\Users\helixvita\Dropbox\mpcproxies\git-helixvita\MTG-Proxyshop\proxyshop\core.py", line 13, in <module>
     from proxyshop import gdown
   File "c:\Users\helixvita\Dropbox\mpcproxies\git-helixvita\MTG-Proxyshop\proxyshop\gdown.py", line 23, in <module>
     from proxyshop.constants import con
   File "c:\Users\helixvita\Dropbox\mpcproxies\git-helixvita\MTG-Proxyshop\proxyshop\constants.py", line 320, in <module>
     with open(os.path.join(cwd, "proxyshop/env.json"), "r", encoding="utf-8") as api_keys:
 FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\helixvita\\Dropbox\\mpcproxies\\git-helixvita\\MTG-Proxyshop\\proxyshop/env.json'

[BUG] - Saga templating with reminder text off

Describe the bug
When "remove reminder text" is on, sagas render with the first ability as the saga reminder text

To Reproduce
Steps to reproduce the behavior:

  1. Render a Saga with "remove reminder text" on

Your system:

  • Proxyshop or Python version: latest Proxyshop release
  • Windows version: Windows 11 23H2
  • Photoshop version: 24.5

Screenshots
Without reminder text
image

With reminder text
image

[BUG] - Unable to insert collector info

Describe the bug
Error on rendering Chandra, Torch of Defiance. "Unable to insert collector info"

Logs:

03/22/2023 23:55
============================================================================
File "src\templates.py", line 907, in execute
File "src\templates.py", line 435, in collector_info
File "src\templates.py", line 479, in collector_info_authentic
File "src\helpers.py", line 1219, in replace_text
File "photoshop\api\application.py", line 354, in executeAction
File "comtypes\client\lazybind.py", line 182, in caller
File "comtypes\automation.py", line 745, in _invoke
Reason: (-2147023170, 'The remote procedure call failed.', (None, None, None, 0, None))

To Reproduce
Steps to reproduce the behavior:

  1. Use MTG Art Downloader to grab the art of Chandra, Torch of Defiance off of mtgpics.
  2. Attempt to render the card using Proxyshop 1.6.0

Your system:

  • Python version: 3.10.6
  • Windows version: Windows 10
  • Photoshop version: 2021

Screenshots
image

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

This repository currently has no open or pending branches.

Detected dependencies

None detected


  • Check this box to trigger a request for Renovate to run again on this repository

[FEAT] - Add support for loyalty +/- ability text

Describe the bug
When rendering a card that has the loyalty counter symbol in its text box, it just renders like [+2] instead of with the little shield/arrow shape. I specifically tried Carth the Lion and Comet, Stellar Pup in the latest versions of the normal and planeswalker extended templates.

Also I'm not sure if it's actually a bug or just not implemented yet but I thought I'd bring attention to it anyway. The correct shape is included in Mana.ttf so I'll use that for now.

To Reproduce
Steps to reproduce the behavior:

  1. Render a card with the loyalty symbol in its description
  2. Output not right

Your system:

  • Python version: 3.11
  • Windows version: 10
  • Photoshop version: 2021

Bug: [[Strategic Planning]] β€” When using bold rules text, the non-italicized part of the flavor is also bold

Describe the bug
This one's a bit of an edge case, so prioritize accordingly.

To Reproduce

  • Step 1: Enable bold font for rules text in the plugin's templates.py thus:
def __init__(self, layout):
    super().__init__(layout)
    con.font_rules_text = "MPlantin-Bold"
  • Step 2: Render the PTK version of the card [[Strategic Planning]] (or presumably any card which has some non-italicized text in the flavor text)

Your system:

  • Python version: 3.8
  • Windows version: 11
  • Photoshop version: 23.5.0
  • Proxyshop version: v1.1.8

Screenshots
Intended effect on left. Proxyshop render on right.
image

Long Text Entry Crash

This bug has been a long existing Photoshop issue, I'm going to track our test cases here and continue developing an elegant long term solution.

Describe the bug
Photoshop crashes when text is inserted that overly exceeds the bounds of a TextLayer paragraph box.

To Reproduce
Try to render Animate Dead for example (as of Proxyshop v1.1.2)

Your system:
This bug occurs regardless of Python or Windows version, and has been demonstrated on all Photoshop versions compatible with Proxyshop.

The Solution:
Previously a solution was added that decreases the font size by .75 if the oracle text being entered is over 300 characters. We now know that for even longer texts such as Animate Dead (420 characters) this number is not enough. As of the developmental Proxyshop (planned 1.1.3 release) I have adjusted this behavior to scale down by 1 pt (EDIT: Increased from .75 to fix Reckoner Bankbuster) for every 100 characters above 200 the text is. This fixes Animated Dead, but we need to continue to catalog known failed cards from the past and ensure this issue is fixed in all cases. I will catalog known bugged cards below and whether this solution solves the issue.

Bugged Cards Status
Reckoner Bankbuster Fixed
Animate Dead Fixed
Ao, the Dawn Sky Fixed
Eater of Virtue Fixed
God-Eternal Kefnet Fixed
Lich's Mastery Fixed
Toxrill, Corrosive Snail Fixed
Bronze Tablet Likely Fixed
Giant Oyster Likely Fixed
Cooperation Likely Fixed

Bug: Typeline scaling fails for all commons which have the "multilayered" (list) structure symbols.json

Describe the bug

Typeline scaling fails for all commons which have the "multilayered" (list) structure symbols.json

By "multilayered" structure I don't mean only the sets with actual multiple layers like MID. I'm also talking about single-layer sets like EXO which have their layers in symbols.json formatted as a list rather than a simple string.

By "failure" I don't actually mean that an error is produced. Instead, the scale_text_right_overlap() returns without doing anything, because reference is None. Resulting in a "silent failure" and thus an improperly scaled typeline.

This affects all templates.

Your system:

  • Python version: 3.8
  • Windows version: 11
  • Photoshop version: latest
  • Proxyshop version: 1.1.8

Screenshots

Thalakos Scout (Ancient John Matson)

The bug happens during the scale_text_right_overlap() function. It returns immediately because reference is None:

image

One level up in the call stack, we can see that reference is None here as well:

image

This bug only happens when rendering cards from sets which have the "multilayered" (list) structure in symbols.json:

image

[BUG] - Kivy not (yet) working with Python 3.11

Describe the bug
This seems to be a known issue
Python 3 11 Install Error
Logging this issue in case the workaround described below helps anyone get their setup working. The developers of kivy have acknowledged this issue 10 days ago and are working on a fix.

To Reproduce
Steps to reproduce the behavior:

  1. Make sure you're running Python 3.11:
$ python --version
Python 3.11.0
  1. Run $ python -m pip install -r requirements.txt
Defaulting to user installation because normal site-packages is not writeable
Collecting photoshop-python-api
  Using cached photoshop_python_api-0.19.7-py3-none-any.whl (64 kB)
Collecting Kivy~=2.1.0
  Using cached Kivy-2.1.0.tar.gz (23.8 MB)
  Installing build dependencies ... error
  error: subprocess-exited-with-error
  
  Γ— pip subprocess to install build dependencies did not run successfully.
  β”‚ exit code: 1
  ╰─> [10 lines of output]
      Collecting setuptools
        Using cached setuptools-65.6.0-py3-none-any.whl (1.2 MB)
      Collecting wheel
        Using cached wheel-0.38.4-py3-none-any.whl (36 kB)
      Collecting cython!=0.27,!=0.27.2,<=0.29.28,>=0.24
        Using cached Cython-0.29.28-py2.py3-none-any.whl (983 kB)
      Collecting kivy_deps.gstreamer_dev~=0.3.3
        Using cached kivy_deps.gstreamer_dev-0.3.3-cp311-cp311-win_amd64.whl (3.9 MB)
      ERROR: Could not find a version that satisfies the requirement kivy_deps.sdl2_dev~=0.4.5 (from versions: 0.5.1)
      ERROR: No matching distribution found for kivy_deps.sdl2_dev~=0.4.5
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

Γ— pip subprocess to install build dependencies did not run successfully.
β”‚ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

Workaround:
Luckily, there seems to be a temporary workaround to allow use of Python 3.11:

python -m pip install kivy --pre --no-deps --index-url  https://kivy.org/downloads/simple/
python -m pip install "kivy[base]" --pre --extra-index-url https://kivy.org/downloads/simple/

Also need to manually install remaining requirements:

  1. Remove Kivy and asynckivy from requirements.txt
  2. Save local changes
  3. Install remaining requirements
python -m pip install -r requirements.txt

Your system:

  • Python version: 3.11.0
  • Windows version: Microsoft Windows 10 Pro (Version 10.0.19045 Build 19045)
  • Photoshop version: Photoshop 2023 (Version 24.0.1)

Wrong set symbol

Describe the bug
When i create a custom card and write the Setcode J20 the program won't use the right symbol.

To Reproduce
Steps to reproduce the behavior:

  1. Fill out all the information
  2. Type Setsymbol J20
  3. Render Card

Your system:

  • Python version:3.10.6
  • Windows version: Windows 10, Version 21H2
  • Photoshop version: Photoshop CC 23.5

Screenshots
If applicable, add screenshots to help explain your problem.

[BUG] - Banned cards due to non-appropiate imagery aren't found by new scryfall search method

Describe the bug
The cards on the following list https://tagger.scryfall.com/tags/card/banned-due-to-racist-imagery aren't found by the new scryfall search method. Works on 1.1.8.

To Reproduce
Steps to reproduce the behavior:

  1. Put an image for each of the card names on the list inside the art folder
  2. Open proxyshop and render all

Your system:

  • Python version: 3.10.4
  • Windows version: 10
  • Photoshop version: 2021
  • Proxyshop version: 1.1.9

Screenshots
image
image

[FEATURE] - Allow hiding set symbol and/or collector's information

Is your feature request related to a problem? Please describe.
I have edited a template so that the set symbol and collector's information layers are hidden, but those changes aren't honored by Proxyshop because they are always put on visible.

Describe the solution you'd like
I want to be able to hide non-essential parts of a template.
Main solution should be proxyshop honoring layer configuration of the template.
If it is not possible, either having a button on the main program, or being able to change a setting inside the config.ini that you can change to show / hide set symbol and/or collector's information.

Describe alternatives you've considered
None.

Additional context
None.

[BUG] - Hybrid mana creatures throw error while enabling layers

Describe the bug
When proxyshop tries to render a Hybrid creature card, it throws the error below. Hybrid non-creature cards do work.
EDIT: It does work with normal template, and it fails on women's day template.

To Reproduce
Steps to reproduce the behavior:

  1. Put image called Deathrite Shaman inside art folder
  2. Open proxyshop
  3. Select women's day template
  4. Press render all

Your system:

  • Python version: 3.10.4
  • Windows version: W10
  • Photoshop version: 2021
  • Proxyshop version: 1.1.9

Screenshots

image
image

Feature request: Possibility to configure a template to default to scraping earliest printing from scryfall instead of latest

Background

In the current version of Proxyshop, when fetching card layout info from scryfall, if a user has not explicitly specified the set code in the art file β€” for example the user has Force of Will.jpg instead of Force of Will [ALL].jpg β€” then Proxyshop will default to picking the latest printing available on scryfall.

This is problematic for a couple of reasons:

1. Super recent reprints = defaults to cube symbol instead of better alternatives

If the card has been reprinted in a set that is brand new, then it's possible that the set symbol does not yet exist in Proxyshop. And in this case it will default to using the default "cube" set symbol (or whatever is in the config.ini as the default). Indeed, this is exactly what is currently happening with Force of Will β€” it is reprinted in Dominaria United (DMR), which does not yet have its set symbol in Proxyshop. So it defaults to the cube symbol. But in my opinion it would be better to have it default to pretty much any set symbol other than the cube symbol β€” either 2XM, J14, or ALL.

2. Latest printing makes sense as a default layout for M15 templates, but not pre-M15 templates

While I do see how it makes sense for cards rendered with an M15 template (i.e. normal.psd) to default to the latest printing, I would argue this makes less sense as the default behavior for old-school templates like "normal-classic.psd" (or for basically any pre-M15 template). Ideally, the normal-classic template would default to the latest printing prior to 8th edition, if such a printing exists; else earliest printing across all sets (because 8th is when wotc stopped using the normal-classic frame), However, since I fear that this logic might be a bit too complex, then it's probably simpler to just default to earliest printing across all sets β€” call it a a happy compromise.

User story

So, what exactly am I asking for?

As a ...

Proxyshop template/plugin creator (whose primary interest is in creating templates for old-school and pre-M15 cards),

I wish to ...

be able to change the default behavior of Proxyshop from "use latest printing" to "use earliest printing" (ideally by having some parameter I can invoke in, say, the init part of of my custom template class (or anywhere, really),

so that ...

people who use my template(s) won't be required to manually specify the set for all their cards in order to avoid getting a strange and anachronistic mix like a "Dominaria United" version of a card rendered on an old-school frame (see screenshot below)

Because, if they are using an old-school template to render a card like Force of Will, then it's quite clear that their intention is to produce an old printing of that card (like Alliances or 2XU); not the Dominaria United version.

Screenshot

image

German Keyboard problems.

Describe the bug
Whenever i render a card with apostrohopes or quotation marks, Proxyshop always imports the right text from scryfall, but then changes it to german symbols. I changed my system language to english, tried various keyboard layouts, but nothing seems to work.

To Reproduce
Steps to reproduce the behavior:
I don' know if you can reproduce that behaviour.

Your system:

  • Python version: 3.10
  • Windows version:Version 10.0.19044 Build 19044
  • Photoshop version: Most recent in Creative Cloud

Screenshots
If applicable, add screenshots to help explain your problem.

Apostrophe.mp4

MDFC cards not working

Describe the bug
MDFC card will load scryfall data, then gives "Layout 'modal_dfc' not supported!" error in console.
error.txt: select_frame_layers() missing 1 required positional argument: 'color_indicator'

To Reproduce
Open Proxyshop, select MDFC tab, select Normal, then Render Target. Selected file named "Needleverge Pathway (Piotr Dura) [ZNR].png"

Your system:

  • Python version: 3.10.3
  • Windows version: Version 10.0.19043 Build 19043
  • Photoshop version: Adobe Photoshop Version: 21.2.3 20200902.r.308 2020/09/02: 4ea4dadce6 x64

Screenshots
image

[BUG] - "Lieutenant" ability not being italicized due to regex

Describe the bug
We use this regex to handle identifying an italics ability such as the "Lieutenant β€”" ability, it works with other situations I've tested but not this one, due to the carriage return that precedes the ability. This code is a slightly refactored version of what's on main branch right now (but the current version produces the same bug)

# Find and add ability words
reg = re.compile(r"([\s\w\-]*?) β€” ")
for match in reg.findall(card_text):
    # Cover boast cards and choose cards that aren't weird AFR cases
    match = str(match)
    if (
        any(s in match for s in ("β€’ ", "Boast"))
        and card_text[0:12] != "Choose one β€”"
    ): continue

    # Fix bullet points and carriage return
    if "β€’ " in match:
        match = match.replace("β€’ ", "")
    if "\r" in match:
        match = match.replace("\r", "")
    italic_text.append(match)

To Reproduce
Steps to reproduce the behavior:
Try to render "Tyrant's Familiar" for example:
Tyrant's Familiar (Todd Lockwood)

Your system:

  • Python version: 3.10.5
  • Windows version: Win10 (Updated)
  • Photoshop version: 2022 (23.4.X)

Screenshots
See Tyrant's familiar render above

Will be looking into this soon, but if a good regexer wants to beat me to the punch, we basically just need to modify that regex to exclude a leading carriage return (\r)

[BUG] - Hybrid cases like Asmoranomardicadaistinaculdacar

Describe the bug
Asmoranomardicadaistinaculdacar renders as a gold frame card rather than a hybrid color card.

To Reproduce
Try rendering an image named "Asmoranomardicadaistinaculdacar" on any template

Your system:
Happens on all configurations (problem with frame_logic step)

Screenshots
image

Planning
I've been planning to do a full rework of how the select_frame_layers() step works in frame_logic.py, this issue provides a good motivation. As far as I can tell there's no way to cover this case with the parameters passed currently, as just correcting for 2-color hybrid symbol cards with no cost for example would also apply to dual color transform cards like Savage Packmate. The bottom line is, we need to give this step access to more scryfall data. I think it might be best to just pass in the entire scryfall dataset for the card and use what is needed.

I've also considered just rolling the frame logic into the layout object entirely if I can refactor it down enough to make sense. Will investigate more soon.

Feature request: Add miracles frame effect to Normal template

Would be cool if Proxyshop was able render cards with the "Miracle" frame effect, such as [[Temporal Mastery]], in much the same way the Normal template is able to render "Nyxtouched" cards.

There are currently only 14 miracle cards (these), but the list keeps growing as new miracles show up in new sets β€” most recently, The Brother's War.

Tasks:

  1. Acquire miracle frame assets (probably from here) and place them into normal.psd
  2. Update relevant python frame logic in NormalTemplate class
  3. Upload new normal.psd and update google drive file description with new semantic version

[BUG] - Incorrect font sizing on Normal Token Oracle Text.

Describe the bug
Normal Tokens are created with incorrect font sizing on Oracle Text.

To Reproduce
Steps to reproduce the behavior:

  1. Have manual editing turned on in Proxyshop settings.
  2. Render Target with appropriately sized and named image. For this latest bug, I used "Dragon [TARB] {3}.png"
  3. Observe Incorrectly sized font in photoshop.

Note: during the steps in photoshop, you can see the font starts out correctly sized. There is a step just before Power and Toughness is added that resizes the text. This occurs when using both mm sizing and pixel sizing.

Your system:

  • Python version: 3.11 (64-bit)
  • Windows version: Windows 11 - v10.0.22621
  • Photoshop version: v25.0

Screenshots
image

Alternate Language issue edge case

Describe the bug
For alt language cards there is some code that doesn't work right for the Sega Dreamcast Cards

To Reproduce
Steps to reproduce the behavior:
try to render anything from this list https://scryfall.com/sets/psdg

Fix
I took a look at the error and the code and here is what's wrong;

/proxyshop/layouts.py
Starting line 71

# Alternate language? if scryfall['lang'] != "en": self.name_key = 'printed_name' self.oracle_key = 'printed_text' self.type_key = 'printed_type_line' else: self.name_key = 'name' self.oracle_key = 'oracle_text' self.type_key = 'type_line'

For the Dreamcast cards (or any other alt language cards) it still uses "Name" "oracle_text" and "type_line" but doesn't include the "Printed" items in the json.
See theis from the Japanese STA card
https://api.scryfall.com/cards/e5e6d72d-ef92-46b2-853f-003ae6250d30?format=json&pretty=true

Adding an additional check in the if statement that the "Printed_Name" value exists in the JSON should fix this issue as a backup without breaking the intended function of feting alt language text.

Curse of the Bronze Tablet - "Skip Failed Cards" doesn't help

Describe the bug
Certain cards, such as [[Bronze Tablet]], cause MTG-Proxyshop to fail to render in such a way that all subsequent cards also fail to render.

To Reproduce
Steps to reproduce the behavior:
Simply attempt to render one of the problem cards. The ones I've found so far are:

  • Bronze Tablet (Tom WΓ€nerstrand) [ATQ]
  • Giant Oyster (Nicola Leonard) [HML]
  • Cooperation (Phil Foglio) [ICE]

If you do "Render Target" it will simply fail.

If you do "Render All" (on some arbitrary collection of art files which includes one of these problem cards), then those cards will render fine until Proxyshop reaches the problem card. It'll fail the same way, but then it will also proceed fail on every subsequent card. I.e. the "Skip Failed Cards" option does not protect against this kind of failure.

Additional observations:

  • Both Photoshop AND the Proxyshop GUI must be closed and re-started, else all cards will continue failing (even the non-problem cards).
  • Photoshop cannot be closed normally. Must end task using Task Manager.
  • Task manager reveals Photoshop is using a large amount of memory
  • Error in python terminal output says something about zero division error

Your system:
Note: I first encountered this using my "Ancient" template on my forked version of Proxyshop, so to be sure it wasn't just an issue with my setup I went ahead and reproduced the issue using a clean version of Proxyshop in a brand new virtual python env.

  • Proxyshop Template: "Normal"
  • Proxyshop version: Freshly cloned from main branch: bebd79e
  • Python version: 3.9 (Fresh virtual python environment with only the packages from requirements.txt)
  • Windows version: Windows 11
  • Photoshop version: 2022 latest

Screenshots
This gif was captured when I first encountered the problem:

BronzeTabletIsCursed

Basic lands don't work

Describe the bug
When trying to render basic lands, they open the template and just stop, no errors or failures but nothing more happens.

To Reproduce
Steps to reproduce the behavior:

  1. I put art in the art folder named it after a land and opened up the Proxyshop GUI and selected the basic land tab and clicked render all. Also tried render target which had the same effect.
  2. I also tried deleting the basic land names out of the constants.py file. With the old Autoproxy doing this would let you make basic lands with any template, however in this case, it still only opens the default basic template and stops.
  3. After doing this I cleared the py_cache folder where the constants.py is located but had no luck with that either.

Your system:

  • Python version: 3.9.12
  • Windows version: Win 10 (latest I think)
  • Photoshop version: 23.3.1 20220419.r.426
    2022-05-07 20_37_20-

Screenshots
If applicable, add screenshots to help explain your problem.

[BUG] - "The object "layer N of document Y" is not currently available."

Describe the bug
No matter which template is used, rendering text fails as screenshotted below.

To Reproduce
Steps to reproduce the behavior:
Render any card with base application templates

I'm happy to run the source code with a debug point in VSCode if I can get a vague sense of where to start

Your system:

  • Python version: 3.10
  • Windows version: Win 10
  • Photoshop version: CC 2015

Screenshots
If applicable, add screenshots to help explain your problem.
image

[11/07/2022 23:58] Line: 1107
C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py: align() takes from 0 to 1 positional arguments but 3 were given

image

[INFO   ] [Base        ] Start application main loop
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()
   File "proxyshop\templates.py", line 241, in execute
   File "proxyshop\text_layers.py", line 143, in execute
   File "proxyshop\text_layers.py", line 204, in apply_fill
   File "photoshop\api\_document.py", line 83, in activeLayer
   File "comtypes\client\lazybind.py", line 218, in __setattr__
   File "comtypes\automation.py", line 745, in _invoke
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()
[INFO   ] [Clipboard   ] Provider: winctypes
   File "proxyshop\templates.py", line 36, in __init__
   File "proxyshop\templates.py", line 110, in load_template
   File "photoshop\api\application.py", line 392, in load
   File "comtypes\client\lazybind.py", line 182, in caller
   File "comtypes\automation.py", line 745, in _invoke
   File "main.py", line 219, in render_custom
   File "proxyshop\templates.py", line 370, in __init__
   File "proxyshop\templates.py", line 281, in __init__
   File "proxyshop\templates.py", line 47, in __init__
   File "proxyshop\helpers.py", line 78, in getLayerSet
   File "photoshop\api\_core.py", line 66, in __getattribute__
   File "photoshop\api\application.py", line 63, in activeDocument
   File "comtypes\client\lazybind.py", line 168, in __getattr__
   File "comtypes\automation.py", line 745, in _invoke
   File "proxyshop\templates.py", line 232, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1114, in enable_frame_layers
     border_color = self.layout.scryfall['border_color']
   File "proxyshop\templates.py", line 232, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1114, in enable_frame_layers
     border_color = self.layout.scryfall['border_color']
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()
[INFO   ] [Base        ] Start application main loop
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()
   File "proxyshop\templates.py", line 241, in execute
   File "proxyshop\text_layers.py", line 143, in execute
   File "proxyshop\text_layers.py", line 204, in apply_fill
   File "photoshop\api\_document.py", line 83, in activeLayer
   File "comtypes\client\lazybind.py", line 218, in __setattr__
   File "comtypes\automation.py", line 745, in _invoke
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()
[INFO   ] [Clipboard   ] Provider: winctypes
   File "proxyshop\templates.py", line 36, in __init__
   File "proxyshop\templates.py", line 110, in load_template
   File "photoshop\api\application.py", line 392, in load
   File "comtypes\client\lazybind.py", line 182, in caller
   File "comtypes\automation.py", line 745, in _invoke
   File "main.py", line 219, in render_custom
   File "proxyshop\templates.py", line 370, in __init__
   File "proxyshop\templates.py", line 281, in __init__
   File "proxyshop\templates.py", line 47, in __init__
   File "proxyshop\helpers.py", line 78, in getLayerSet
   File "photoshop\api\_core.py", line 66, in __getattribute__
   File "photoshop\api\application.py", line 63, in activeDocument
   File "comtypes\client\lazybind.py", line 168, in __getattr__
   File "comtypes\automation.py", line 745, in _invoke
   File "proxyshop\templates.py", line 232, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1114, in enable_frame_layers
     border_color = self.layout.scryfall['border_color']
   File "proxyshop\templates.py", line 232, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1114, in enable_frame_layers
     border_color = self.layout.scryfall['border_color']
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()

image

[INFO   ] [Base        ] Start application main loop
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()
   File "proxyshop\templates.py", line 241, in execute
   File "proxyshop\text_layers.py", line 143, in execute
   File "proxyshop\text_layers.py", line 204, in apply_fill
   File "photoshop\api\_document.py", line 83, in activeLayer
   File "comtypes\client\lazybind.py", line 218, in __setattr__
   File "comtypes\automation.py", line 745, in _invoke
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()
[INFO   ] [Clipboard   ] Provider: winctypes
   File "proxyshop\templates.py", line 36, in __init__
   File "proxyshop\templates.py", line 110, in load_template
   File "photoshop\api\application.py", line 392, in load
   File "comtypes\client\lazybind.py", line 182, in caller
   File "comtypes\automation.py", line 745, in _invoke
   File "main.py", line 219, in render_custom
   File "proxyshop\templates.py", line 370, in __init__
   File "proxyshop\templates.py", line 281, in __init__
   File "proxyshop\templates.py", line 47, in __init__
   File "proxyshop\helpers.py", line 78, in getLayerSet
   File "photoshop\api\_core.py", line 66, in __getattribute__
   File "photoshop\api\application.py", line 63, in activeDocument
   File "comtypes\client\lazybind.py", line 168, in __getattr__
   File "comtypes\automation.py", line 745, in _invoke
   File "proxyshop\templates.py", line 232, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1114, in enable_frame_layers
     border_color = self.layout.scryfall['border_color']
   File "proxyshop\templates.py", line 232, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1114, in enable_frame_layers
     border_color = self.layout.scryfall['border_color']
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()
   File "proxyshop\templates.py", line 239, in execute
   File "C:\Users\anton\Github\Proxyshop.v1.1.6\proxyshop\plugins\FelixVita-Proxyshop-Plugins\templates.py", line 1107, in collector_info
     psd.align("AdCH", coll_combo, tref); psd.clear_selection()
   File "proxyshop\templates.py", line 241, in execute
   File "proxyshop\text_layers.py", line 143, in execute
   File "proxyshop\text_layers.py", line 204, in apply_fill
   File "photoshop\api\_document.py", line 83, in activeLayer
   File "comtypes\client\lazybind.py", line 218, in __setattr__
   File "comtypes\automation.py", line 745, in _invoke

image

[BUG] - [RuntimeError] Unable to install project dependencies (kivy):

Describe the bug
Unable to install project dependencies (kivy):

Hash for kivy (2.2.0.dev0) from archive Kivy-2.2.0.dev0-cp311-cp311-win_amd64.whl not found in known hashes

Settings - MTG-Proxyshop - Visual Studio Code 1_27_2023 12_35_50 PM

To Reproduce
Steps to reproduce the behavior:

  1. poetry install
  2. Receive RuntimeError while installing kivy (2.2.0.dev0)

Your system:

  • Python version: Python 3.11.1
  • Windows version: Microsoft Windows 10 Pro (Version 10.0.19045 Build 19045)
  • Photoshop version: Photoshop 2023 (Version 24.1.1)

Screenshots
If applicable, add screenshots to help explain your problem.

[BUG] - Cards with a colon in its name aren't outputted properly

Describe the bug
The process of saving the output fails when a rendered card has a colon in its name. An empty file with name from the beggining of the card name to the colon is generated instead.

To Reproduce
Steps to reproduce the behavior:

  1. Put an art image named Circle of Protection Red.jpg insithe the art folder
  2. Open proxyshop and render

Your system:

  • Python version: 3.10.4
  • Windows version: 10
  • Photoshop version: 2021
  • Proxyshop: 1.1.8

Screenshots
image

[BUG] - Plantin MTG Pro font not being chosen properly on photoshop layers

Describe the bug
Using MTG-Proxyshop 1.1.9 and testing the new Plantin MT Pro font. The output shows that on each of the template elements that the font has to be changed to Plantin MT Pro, the font Myriad Pro is chosen instead.

To Reproduce
Steps to reproduce the behavior:

  1. Delete MPlantin fonts (all 3 versions)
  2. Install Plantin MT Pro (all 3 versions)
  3. Put one card inside art
  4. Open MTG Proxyshop
  5. Select normal-classic template
  6. Click render all

Your system:

  • MTG-Proxyshop 1.1.9
  • Python 3.10.4
  • Windows 10 64 bits
  • Photoshop 2021

Screenshots
If applicable, add screenshots to help explain your problem.
proxyshop configuration

photoshop manual edit

Var 'console' is undefined when redefining collector_info() method in a plugin template

Describe the bug

Overwriting the new collector_info() template class method in my own template class (as suggested in the release notes) won't work out of the box since "console" is undefined.

Possible to work around by importing proxyshop.gui.console_handler, but I'm guessing that's not intended (?).

I'm currently working around it by just replacing the line with pass.

My system:

  • Python version: 3.8
  • Windows version: 10
  • Photoshop version: 23.2.1
  • Proxyshop version: 1.1.1

Screenshots
image

extended art planeswalker template won't render

File "src\templates.py", line 910, in run_tasks
File "src\templates.py", line 2581, in enable_frame_layers
File "src\helpers.py", line 1571, in content_fill_empty_area
File "photoshop\api_selection.py", line 62, in expand
File "comtypes\client\lazybind.py", line 182, in caller
File "comtypes\automation.py", line 745, in _invoke
Reason: (-2147213497, None, (None, None, None, 0, None))

ps error

City of Traitors

Describe the bug
Italicization in rules text where it shouldn't be.

To Reproduce
Details can be provided upon request.

Your system:

  • Python version: 3.9
  • Windows version: 11
  • Photoshop version: 2022 Latest.

Screenshots
image

Toxrill, The Corrosive

When trying to apply the Slime Counter trigger, I received the following:

Game exception occurred: java.lang.NullPointerException
Server version: 1.4.51-V4-beta6 (build: 2022-06-24 13:26)
mage.abilities.effects.common.combat.GoadTargetEffect.apply(GoadTargetEffect.java:60)
mage.abilities.effects.ContinuousEffectImpl.apply(ContinuousEffectImpl.java:115)
mage.abilities.effects.ContinuousEffects.apply(ContinuousEffects.java:1176)
mage.game.GameState.applyEffects(GameState.java:663)
mage.game.GameImpl.applyEffects(GameImpl.java:1747)
mage.game.GameState.processAction(GameState.java:652)
mage.game.GameImpl.checkStateAndTriggered(GameImpl.java:2009)
mage.game.GameImpl.playPriority(GameImpl.java:1513)
mage.game.turn.Step.priority(Step.java:61)
mage.game.turn.Phase.playStep(Phase.java:184)
mage.game.turn.EndPhase.playStep(EndPhase.java:47)
mage.game.turn.Phase.play(Phase.java:89)
mage.game.turn.Turn.play(Turn.java:132)
mage.game.GameImpl.playTurn(GameImpl.java:1042)
mage.game.GameImpl.play(GameImpl.java:952)
mage.game.GameImpl.start(GameImpl.java:928)
mage.server.game.GameWorker.call(GameWorker.java:34)
java.util.concurrent.FutureTask.run(FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)

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.