Skip to content

Releases: Investigamer/Proxyshop

Proxyshop v1.13.2

15 Feb 14:13
Compare
Choose a tag to compare

🚀 Patch Release

This is a follow-up release that mostly fixes a few critical bugs, but also merges the "Token" template type into "Normal" type, tokens can now be rendered with any "Normal" template. The base token template has been renamed "Chilli Token", after its original creator ❤️. You can simply extract this release and overwrite if upgrading from v1.13.0+. Here are the noteworthy bugfixes, scroll down for the full changelog:

  • Improve custom setting governing collector text alignment on the Classic template
  • Prevents app from crashing if the Hexproof API is down
  • Ensures properly centered rules text on the "Chilli Token" template
  • Ensures proper fullart framing on the "Chilli Token" template
  • Fix a bug affecting the "Artist Only" collector info mode
  • Fix a bug affecting "Battle" templates

💌 Supporting the App

This app is entirely user supported via Patreon [Link], I really couldn't do it without you guys. It comes with a handful of perks and my undying gratitude, thanks again to all our amazing Patrons! If you want to support the app but don't wish to join Patreon, you can also buy me a cup of coffee via Paypal 🙏

v1.13.2 (2024-02-15)

Feat

  • layouts,enums: Add new layout data and enumerations for card types, supertypes, and subtypes. Add new extendable schema "ColorMap" with predefined defaults for commonly mapped color values on pinlines, color indicators, etc. Rename SymbolColor to ColorObject and add support for SolidColor type
  • CLI: Officially implemented CLI mode with poetry via proxyshop <command> and for executable release by adding cli <command> to launch parameters or when running in terminal

Fix

  • api: Add @return_on_exception for hexproof API usage to ensure final exception is caught when server is down
  • TokenTemplate: Ensure rules text is properly centered, fix fullart framing behavior
  • AppConstants: Provide default None values for build_symbol_map
  • ClassicTemplate: Improve execution of collector info text, enforce promo star and alignment uniformly
  • ArtistOnly: Fix bug breaking ArtistOnly collector info mode
  • build: Allow existing folders to be copied over during build process

Refactor

  • utils: Update docstrings
  • templates: Reformat files, fix missing import
  • token: Deprecate "token" template type, merge existing token templates with "normal"
  • is_token,is_emblem: Remove "is_token" from BorderlessVectorTemplate, add "is_token" and "is_emblem" to BaseTemplate pending layout data integration
  • utils/dicts: Deprecate unused dicts utils after migration to Omnitils project
  • README: Add Paypal link
  • BaseTemplate: Add new method "collector_info_artist_only" to improve performance of ArtistOnly collector mode

Proxyshop v1.13.1

01 Feb 12:44
Compare
Choose a tag to compare

🚀 Patch Release

This is a follow-up release for v1.13 that makes a few critical bug fixes:

  • Multiple custom creator fixes, set symbol now works properly
  • Adds 3 new rarities for custom creator: Bonus, Special, Timeshifted (these revert to mythic if not available on the chosen symbol)
  • Fixes an issue with certain plugins and allows them to use relative imports without problems
  • Fixed a bug with PT text always being "0/0" on textless renders with the Borderless template
  • Prevent outdated plugins from crashing the app
  • Fixed potential data file bugs
  • Minor GUI improvements
  • Minor Creator improvements

💌 Supporting the App

This app is entirely user supported via Patreon [Link], I really couldn't do it without you guys. It comes with a handful of perks and my undying gratitude, thanks again to all our amazing Patrons! If you want to support the app but don't wish to join Patreon, you can also buy me a cup of coffee via Paypal 🙏

v1.13.1 (2024-02-01)

Fix

  • BorderlessVectorTemplate: Fix 0/0 PT on PT-box-enabled textless renders
  • creator: Allow creator to use other symbols and rarities
  • files: Fix potential bug with data file loading
  • _loader: Fix plugin relative import issue

Refactor

  • gui: Rework how toggle buttons are added to the main toggle collection. Add minimum window size and default size
  • gui: Implement new quality of life utils for the GUI, add iter feature to StrEnum
  • plugins: Robust rework of how and when plugins are loaaded, enforce recursive import, enforce new plugin/Name/py module naming convention
  • CHANGELOG,poetry: Update changelog and poetry deps

Proxyshop v1.13.0

17 Jan 21:49
Compare
Choose a tag to compare

🚀 Lithium Release

This release is the culmination of a nearly 4 month long total overhaul of Proxyshop's core systems. We've done foundational and in some cases complete rewrites of the following systems:

  • The Plugin and Template loader.
  • The App Constants, Config, and Environment classes.
  • The template updater and all data fetching modules from Scryfall to a completely new live API api.hexproof.io.
  • The expansion and watermark symbols collection system.
  • The GUI sub-systems and structure of the GUI codebase (completely detethered from what is now called the Proxyshop "back-end" that fetches data and renders cards).
  • The Text Item classes and many legs Proxyshop's underlying text formatting engine.
  • Our build, test, docs, and file related command utilities as well as the ongoing CLI feature.

💌 Supporting the App

Before I get into the migration guide and the release highlights, I just wanted to quickly plug our Patreon page, this app is entirely user supported via your generous contributions to the cause, I really couldn't do it without you guys. It comes with a handful of perks and my undying gratitude, thanks again to all our amazing Patrons! If you want to support the app but don't wish to join Patreon, you can also buy me a cup of coffee via Paypal 🙏

💻 Migration Guide

For this release, we recommend you start completely fresh. All templates have received breaking changes anyways, so just backup your old Proxyshop app by renaming it to "Proxyshop Old" and extract this release to a brand new folder, installing your templates completely fresh. There have been way too many foundational changes to migrate an old version of Proxyshop to this latest release. Now lets take a look at some of the release highlights!

🎉 Release Highlights

New Feature — Basic Land Watermarks

We've decided to deprecate the Basic Land template category. In the past, Basic Land templates were very simplistic and narrow in scope, derived from a handful of static assets and limited interaction with text layers at all. Now, any template in the Normal category can generate Basic Land cards, and the large mana symbol in the textbox is a supported automated feature, with some default behaviors. These behaviors can be completely overwritten and customized for each individual template to achieve more focused and contextual results. There are some previously supported templates (Unstable and Theros specifically) which have been removed from the template list pending reduxed and improved versions that work with any Normal category card including Basic Land cards, these will be released shortly. Other improvements which didn't make it to this release, but are planned, is robust support for cosmetic changes on Snow-type basic lands in a variety of templates.

New Feature — Hexproof.io API

We now have a live API separately maintained from this repo which serves curated MTG data for various data sets. The project is still in Alpha phase but starting with this release the Hexproof API will be utilized for providing API keys, bulk set data, and assets/mappings for vector expansion symbols and watermarks (the SVG assets for these endpoints are maintained at my mtg-vectors repository). Proxyshop will now update these data sets automatically on-launch when they become outdated. We plan to add more integration with this API in the coming months where useful.

New Feature — Reworked Core App Module

If you are a plugin creator who interacts with Proxyshop's codebase or writes your own template classes, you'll notice many changes in architecture, the most substantial of which being how we handle the various global objects. The key objects are constants, config, environment, Photoshop app handler, and GUI console, These are all now imported in the same line:

# Core objects we've used before (PATH is new)
 from src import APP, CFG, CON, CONSOLE, ENV, PATH
 
 # New objects that are accessible the same way
 from src import PLUGINS, TEMPLATES, TEMPLATE_MAP
 # A list of all plugins and all templates. A dict of templates mapped to their types.

This is part of a broader change where we tried to enforce a top level app initialization sequence that spins up all of the app's required infrastructure before other code is executed and provide access to these objects as kind of a global application state that can be enforced and maintained.

New Feature — TOML Config Files, YAML Plugin Manifest

Also a huge overhaul for plugin creators, we are now using a YAML based plugin manifest. This allows you to define your plugin templates more succinctly and with more metadata. You can also define your plugin metadata at the top of the file such as source link, plugin name, author, license, version, description, etc. Template based config files now use TOML format which allows more succinct, human readable, and detailed settings definitions. Docs pending on both of these.

New Feature — Autodocs

We now have an official autodocs site generated using mkdocs anytime Proxyshop receives a version bump. This live site can be viewed at this link and will be getting regular formatting improvements and updates in the coming weeks, expect this to be a handy resource for creators interested in getting their hands dirty building a Proxyshop plugin.

New Feature — Cosmetic Modifier Classes

In the past we added modifier classes which can add support for piecemeal functionality to a template class quickly on-the-fly by extending to one of these modifiers, for example TransformMod. Now, we introduced new cosmetic-based modifiers which alter cosmetic behavior, for example NyxMod which adds support for hollow nyx crowns and nyx backgrounds, BorderlessMod/ExtendedMod/FullartMod which add support to changing art framing behavior and the frame suffix tag of a template, CompanionMod which adds support for the hollow companion crown, etc.

New Feature — Drag N' Drop

You can now drag image files from a folder into the Proxyshop window and upon release Proxyshop will start rendering cards using those images. You can also drag an entire folder or a selection of multiple folders and Proxyshop will automatically collect all images within these folders and render them.

New Feature — User Constants

You can now define your own overriding constant definitions in a file within Proxyshop/src/data named user.yml. With this you can change expansion symbol mappings, watermark mappings and configuration, font definitions, formatting and spacing definitions for Proxyshop's text engine, and more. Docs pending.

New Template — Vector Adventure Template

Since this overhaul began just before the release of Wilds of Eldraine, I decided to focus our next vector template redux on adventure templates. The new and improved adventure template is smaller file size, looks much cleaner and sharper, supports more possibilities and features, and allows for multi-colored Adventure cards where colors differ between the regular and adventure side of the card. We're plannin on rolling out more frame treatments on this template such as Universes Beyond so stay tuned!

New Setting — Output File Name

You can now totally control the naming scheme for renders generated with Proxyshop, including conditional logic. The default schema:

#name (#frame<, #suffix>) [#set] {#num}

Will produce a result like this:

Damnation (Extended, Ninja) [TSR] {186}.jpg

In this case, the #suffix tag is optional, anything within a set of will only be included in the filename if all #tag variables inside have a non-null non-empty value. Here's a brief description of the supported tags:

  • #name — The name of the card pulled from Scryfall.
  • #nick — Planned, not fully implemented yet. Will use the Nickname provided for the card on Nickname supported templates.
  • #artist — The artist credited for the card's art on Scryfall.
  • #set — The expansion set code of this card.
  • #num — The collector number of this card.
  • #frame — The broad frame designation of the template, i.e. Normal, Extended, Fullart, etc. Defaults to Normal.
  • #suffix — The flavor frame suffix of the template, when defined by the template, e.g. Ninja, Etched, Kaldheim, etc.
  • #creator — The creator's name who is rendering the card, can be supplied at the end of art file name with $Creator.
  • #lang — The language of the card, in cases where you are rendering alternate language cards.

New Settings — Generative Fill

The generative fill feature has received two new settings:

  • Feathered Fill Selections: Will feather (soften) the art selection used for generative filling the transparent area outside an art image. In my testing, enabling this feature produced reliably better results and fewer "hard-edge" artifacts.
  • Select Generative Fill Variation: Pauses rendering after performing generative fill to allow the user to choose which generated variation to use. Then, hit continue to resume the render operation.
    Generative Fill and Content Aware Fill have both also received performance improvements in this release, and failed Generative Fill attempts will now fallback to Content Aware Fill automatically to get the job done.

Upgrades — GUI Tab: Tools

We added the ability to compress all arts (images in the art folder) as well as compressing target renders. The processing for compression and showcase renders has also been streamlined and improved, with multiple bug fixes.

Upgrades — Color and Symbol Mapping

We introduced new methodology for defining color schemas for various use cases, but most importantly for mapping colors to mana symbols. The Symbol color map is now entirel...

Read more

Proxyshop v1.12.0

02 Oct 00:50
Compare
Choose a tag to compare

Vermillion Release

This release adds features and quality of life improvements to the GUI, introduces a CLI (command line interface) tool for Proxyshop which will soon evolve into the "headless" implementation of Proxyshop which has been long awaited, adds support for new SVG symbols, new settings, a new template, and a new template type!

Battle Templates

The Battle template type (introduced in March of the Machine) is now supported, with both a Normal and Universes Beyond treatment at-launch! We will probably also be modifying this template to create an alternative Planar template in the near future.

New Template: Classic Modern

Classic Modern is perhaps Proxyshop's first unique officially supported "custom" template that is not based on any existing MTG template. It was a product of brainstorming with other members of the community, and borrows textures from the Classic Remastered template (credit to iDerp) as well as vector frame techniques from Silvan and Chilli's vector templates (like many of our vector templates). It essentially marries together classic-looking MTG textures with a more modern frame design. It is an "Extended Art" template at launch, but in the future we plan to support a normal art frame setting. It supports Normal, Transform, AND MDFC cards so check it out!

GUI Improvements

The tools tab has received some new features, including a "targeted" showcase generation button and a bulk downscaling tool that will compress your rendered card images to reduce file size based on a quality setting and optimization toggle, you can also choose to downscale the resolution from 1200 to 800 DPI (since that's the max most companies will print at).

I've also fleshed out preview images to support separate previews for the same template on different type tabs, and added a click-to-toggle feature to switch between front and back side previews of Transform and MDFC templates!

The GUI also received some improvements to the startup checking system that checks that your fonts are installed, as well as general styling improvements with how tabs are displayed and some colors used in the app, as well as some GUI bug fixes!

Settings

We added a new setting for "Collector Promo Star". This star is found in-between the set and language code in the bottom left of the card, where there would normally be a dot. You can enable the promo star always, or only when Scryfall has marked the card promo, or just keep it disabled! Borderless Vector Template also got a new setting: Legendary Crown Texture, toggle this off to create a more flat minimalist Legendary crown similar to more recent borderless prints.

General Updates

Directory structure has been further simplified, new SVG symbols were added to support recent sets, performance improvements were made to Saga template execution time and time spent setting up the render queue, new environment variable implementation was introduced where you can define PS_VERSION in .env file (placed in root directory) to force a certain version of Photoshop to be used as well as a PS_ERROR_DIALOG variable you can set to True to enable Photoshop dialog popups when an error occurs during certain operations. In addition, there are a host of python-side improvements for creators looking to make a plugin, as well as a laundry list of bugfixes documented in the full changelog below. Enjoy the release!

v1.12.0 (2023-10-01)

Feat

  • fonts: Add checking user font folder as a fallback for startup font checking step
  • tools: New tools: Render Target Showcase, Compress Rendered Images
  • gui: Add support for multi-modal preview images and front/back face toggle preview images on click
  • symbols: Added support for CC2, LTC, LTR, PWOE, WHO, WOC, and WOE svg symbols
  • templates: New template: Modern Classic, a modern-framed vector-based template with a mix of classic textures
  • CLI: Initial architecture introduced for a headless (CLI) Proxyshop interface for quick testing, batch generation, and commands
  • templates: New template type: Battles supporting a Normal and Universes Beyond treatment, as well as a new BattleMod modifier class
  • settings: New setting: Collector Promo Star, decide whether to enable the promo star in collector info when appropriate
  • BorderlessVectorTemplate: Add setting: Legendary Crown Texture, allows user to toggle the texture on crowns

Fix

  • SplitTemplate: Disable artifact and vehicle flag for Split cards
  • enums/settings: Swap cached_property to classproperty
  • check_app_version: Control against all request exceptions
  • saga: Support edge case "Greatest Show in the Multiverse", i.e. saga with static ability
  • expansion_symbol: When expansion symbol fails to render, revert to disabling expansion symbol and warn the user
  • check_app_version: Skip this check if Github isn't reached in 3 seconds
  • frame_logic: Support "Demolition Field" non-colored land case
  • templates/normal: Repair pinlines color map and add crown shading for EtchedTemplate, fix name alignment step for Borderless tokens, fix edge case PT drop shadow logic, add preliminary code for ClassicModernTemplate
  • helpers/document: Fix rotate_clockwise orientation to positive 90 degrees
  • fonts: Prevent a crash caused by encountering unrecognized font type in font checking step
  • fonts: Relocate psd-tools font test outside main app scope
  • planar: Fix bug affecting planar cards when Scryfall Extras is disabled

Refactor

  • ClassicModernTemplate: Add MDFC support
  • VectorTemplate: Add default support for MDFC twins shape
  • test_mode: Change output directory of test renders to match their class name
  • app_templates: Add drive ID for Classic Modern template
  • src/core: Move card type map to constants, updater funcs to downloads, plan to deprecate the core module in near future
  • parse_card_info: Move art file parsing logic to scryfall utils
  • updater: Move template update funcs to downloader utils
  • ClassicModernTemplate: Finish Transform implementation on Classic Modern template
  • mkdir: Ensure mkdir across project uses 711 perms
  • main: Add console object as property to main App class
  • tools: Flesh out image compression tool, add process wrapper for tools calls
  • env: Add PS_ERROR_DIALOG env for toggling display error dialog on action descriptor execute calls
  • creator: Import updated creator inputs
  • gui/TemplateModule: Minimize and center template tabs
  • gui: Add dynamic tabbed element subclasses, rewrite validated input classes, fix Planeswalker custom rendering
  • merge_layers: Support returning layer if merge_layers receives list with one item
  • build: Update build script to use new kv directory
  • data: Move kv and spec files to data directory
  • types: Move all types submodules to new 'types' module, add new types TemplateRaw and TemplateManifest
  • BaseTemplate: Improve Vehicle check handling
  • constants: Ensure con.cwd is always the root Proxyshop directory, re-implement the PS_VERSION env variable
  • console.py: Added extensive new infrastructure for handling "logger" formatting and output in the headless console class
  • tests/text_logic.py: Readability rewrites and improve logging results
  • enums/settings.py: Add enum for "Legendary Crown Mode" setting on Modern Classic template
  • BaseTemplate: Allow 'is_vehicle' to act as a flag for toggling vehicle background behavior
  • BaseTemplate: Add promo star logic to collector info methods, add is_collector_promo bool property, refactor initial photoshop refresh check using new method 'check_photoshop'`
  • VectorTemplate: Remove unneeded alternate card type text layers now handled in modifiers, add crown_group check for legendary crown step, add more typechecking
  • enums: Add new enums tracking recognized card fonts and special icons
  • layers: Add new layer nomenclature for Battle templates
  • main,core: Update photoshop refresh step in render_process_wrapper, add preliminary template data for Classic Modern and Battle templates
  • layouts: Add preliminary BattleLayout class, add is_promo bool property
  • PhotoshopHandler: Refactor Photoshop application refresh mechanism

Perf

  • helpers/document: Reduce PNG save size by disabling interlaced, reduce JPEG save size by formatting as optimized baseline
  • templates/saga: Reduce execution time for Saga layer positioning

Proxyshop v1.11.0

14 Aug 13:56
Compare
Choose a tag to compare

Maelstrom Release

This release continues to improve on core templates, reduces and improves the Proxyshop font list, reduces execution time, expands useful startup checks, fixes text formatting inconsistences across all templates, and squashes a ton of bugs!

New Templates: Saga and Class REDUX

The Saga and Class templates have been completely redone using crisp and beautiful vector layers, with Universes Beyond versions as an added bonus — and all from the same PSD file! More free space! Not to mention the new Saga template supports both front and back face Transform Sagas! These puppies are beautiful, give them a spin.

Replacing and Reducing Fonts

With this new release we removed problematic fonts that were outdated, some of which were replaced with a better alternative.

  • Relay-Medium is gone! It was quietly replaced with Gotham-Medium some time ago, but now the transition is complete.
  • Beleren-Bold, Beleren2016-Bold and JaceBeleren have all been replaced by one Beleren font to rule them all: BelerenProxy-Bold! Make sure to install it. You can uninstall the old ones if you wish. This font takes the best parts of all 3 and combines them, enforcing the beautiful P/T star across all our templates now, for example.
  • NDPMTG has sadly been replaced by a new separately maintained font Proxyglyph! This comes with several new symbols supported, with even more to come! Additionally, custom creators will be able to take advantage of several different symbol libraries within this same font, more on this in the near future. Don't forget to install it! Proxyshop won't work without it.
  • MagicSymbols2020 has been removed, the only symbols we used from this font were rolled into Proxyglyph.

Old Friends, New Capabilities

Some of our existing templates have received new features! The Classic Template now has an optional Extended Art mode, the Leveler template can now automatically size and position each level text. All Planeswalker templates now format and position their text MUCH faster than before. My personal favorite new addition is the overhauls added to the fan favorite Borderless Template! The colors and opacity have been reworked, and a ton of new settings were introduced. New settings include a color limit modifier for blending even more than 2 colors on the frame, an artifact color mode governing which elements are colored on colored artifacts, a dark/light color toggle for lands, a dark/light color toggle for front face Transform/MDFC cards, a color treatment toggle for Hybrid cards, a toggle for disabling text drop shadow, and piecemeal toggles governing which elements get colored for multicolor cards. Check it out!

Performance Enhancements

Improving on the changes made last version, text formatting and positioning have received even more cuts to execution time. Text scaling will also now perform faster and will be much more accurate. Formatting of text will have fewer inconsistencies or other formatting errors. The dreaded mana symbol spacing issue has been fixed!

Custom Template Features

One of the biggest under the hood improvements is the introduction of Template Modifier Classes. These classes add piecemeal functionality to your templates, allowing a template to quickly integrate transform functionality, or MDFC functionality, or anything under the sun! If you wanna start creating super dynamic templates that support a lot of card types, these are the way to work that functionality in quickly and by the book!

PSD Updates

Outside the code, every template across the board has received small improvements, mainly focusing on text. Nearly every rules text layer has been rebuilt from scratch using best practices, text formatting on cards has never been better, smoother, crisper, you get the picture. Document sizes have been trimmed to the bone while preserving all the functionality you expect. You'll need to update just about every template, but gosh darn is it worth it!

That's the big picture stuff, feel free to check out the full changelog below. If you enjoy the app, please consider becoming a Patron so you can help fuel future app development 😀

v1.11.0 (2023-08-14)

Feat

  • paste_scryfall_scan: When scryfall scan is enabled in settings we will now use bleed edge to correctly position the art instead of a reference box
  • ClassicTemplate: Add support for Extended Art setting, fix broken Promo Star setting
  • fonts: Additional step during startup font check that detects outdated fonts
  • Borderless: New settings: Artifact color mode, enable/disable drop shadow text, dark/light toggle for land color, dark/light toggle for front face DFC cards, color treatment toggle for Hybrid cards, color limit mode ranging from 1 to 5, and piecemeal toggle for various multicolor elements
  • leveler: Leveler template now supports automatic ability text sizing and positioning
  • BaseTemplate: Add properties: frame_layer_methods, text_layer_methods, and general_methods. These act as lists where you can inject methods that should be run at various stages of the render sequence
  • gui: Add step to the launch diagnostic that checks if a new version is released
  • settings: Added support for colorpicker settings in plugin Templates
  • Class: Brand new and improved Class template, uses the same PSD as the updated Saga template, also supports Universes Beyond treatment
  • Saga: Brand new and improved Saga template using vector layers, supports both side Transform and a Universes Beyond treatment as well
  • templates: Introduced "Mod" templates, reusable template classes that act as modifiers to add piecemeal functionality such as Transform layers, or MDFC layers

Fix

  • BorderlessVectorTemplate: Fix a bug affecting token cards in custom creator and textless renders
  • BasicLandDarkMode: Artist info now filled properly
  • adventure: Update adventure layout data for alternate language, split AdventureTemplate and AdventureMod
  • planeswalker: Fix alternate language processing logic
  • scryfall: Prevent infinite retry loop
  • basic_land: Additional fixes for alternate languages
  • scryfall: Fix a bug affecting some Planar cards (they count as "extras"), fix a bug that returns the wrong face for meld cards
  • text_layers: Prevent a bug that can ruin flavor divider positioning, fix a bug that occurs when both flavor and oracle text are missing
  • basic_land: Fix alternate language bug with Basic Land templates
  • plugins/MrTeferi: Prevent sketch action from running in test mode, fix Crimson fang issues, shift Transform behavior to using modifier class
  • SilvanExtendedTemplate: Fix legendary crowns causing a crash for Colorless cards
  • split: Fix typo that caused split template to break
  • svg: Fixed SVG expansion symbols: M15, AFR
  • ClassicRemasteredTemplate: Rewrote duplicate setting description

Refactor

  • normal: Utilize modifiers across some normal template classes, implement new mask and shape enabling steps, update and fix various templates
  • PrototypeMod: Implement prototype modifier class
  • planar: Update scryfall scan step in accordance with new scan importing behavior
  • MutateMod: Implement a mutate modifier class
  • LevelerMod: Implement a leveler modifier class
  • saga-cards: Retool old saga card template class into a modifier which passes the saga card functionality onto the new vector template
  • class-cards: Retool old class card template class into a modifier which passes the class card functionality onto the new vector template
  • VectorTemplate: Implement additional shape and mask enabling steps, optional tooling to improve on the Vector template workflow
  • templates: Continue to improve the template modifier system, moving away from a _mods module and instead placing them in their relevant modules based on template type
  • regex: Implement new regex pattern for matching nested version number strings
  • helpers/masks: New helper utility: copy_vector_mask, works like copy_layer_mask but acts only on vector masks
  • enums: Add new LAYERS nomenclature and remove useless Photoshop enum line
  • utils/objects: Add classproperty decorator, update PhotoshopHandler to fix descriptor conversion bug, deprecate scale_by_height/width in favor of scale_by_dpi
  • split: Improved readability of Split template code
  • token: Improved Token template formatting by aligning typeline and rules text after text formatting
  • double_faced: Rework existing MDFC and Transform templates to use new template Mod infrastructure
  • layouts: Moves remaining Planeswalker data logic out of templates and into layouts, fixes several alternate language issues and missing data issues
  • helpers/adjustments: Updates create_color_layer and create_gradient_layer to accept keyword arguments to modify their behavior, such as rotation and scale
  • helpers/layers: New helper utility: merge_group, merges a target LayerSet into a single ArtLayer
  • helpers/masks: New helper utility: apply_mask, applies a given layer's mask
  • helpers/text: New helper utilities: get_font_size, set_text_size, set_text_leading, set_composer_single_line
  • helpers/position: New helper utility: position_dividers, Positions a list of dividers between a list of text layers
  • get_rgb_from_hex: New function to create SolidColor RGB object from a hex value using hexValue API
  • constants: Remove relocated color maps
  • plugins/SilvanMTG: Update SilvanMTG template classes using new infrastructure
  • enums: Added a host of default color maps for various MTG frame elements
  • settings: StrEnum used to track settings options now supports a "Default" enum natively, updated get_option and get_setting methods, added preliminary settings for Bord...
Read more

Proxyshop v1.10.1

09 Jul 14:06
Compare
Choose a tag to compare

Hotfix Release

This release fixes a fatal bug that made it into the prior release which exits the render operation without re-enabling GUI buttons or prompting an error message if bad Scryfall data is present in any of the cards being rendered, in addition to a couple other bugs.

This release also adds one additional new testing feature: there is now a camera icon on the bottom right area of the GUI which will take a screenshot of the Proxyshop window, save it to out/screenshots/ and copy the image to clipboard for quick use on Discord and other apps! 👍

v1.10.1 Changelog (2023-07-09)

Feat

  • gui: Add screenshot button that saves a screen capture of the Proxyshop window (to Proxyshop/out/screenshots) and copies the image to clipboard.

Fix

  • console: Fix render operation cancelled unexpectedly without console output on bad scryfall data
  • test: Fix test rendering not using the correct fullart image, fixed image testing for Split template
  • test: Fix thread not cancelling in Deep Test Target mode

Proxyshop v1.10.0

07 Jul 03:20
Compare
Choose a tag to compare

Daybreak Release

With this release comes support for Split cards! In addition, the Borderless Vector template has become the official borderless template (now named Borderless in the app) and has been upgraded with new features including: MDFC, Token, and Basic Land support, as well as a Textless mode and a Nickname mode!

In addition to those template improvements, we have an across the board improvement in execution time as layer alignment and text formatting speed was increased dramatically. There's also a few new GUI additions, including: Two new Scryfall settings the "Unique" filter and "Include Extras" filter. Three new buttons were added to the GUI, one that pins the app to the top of all other windows and two URL buttons that link to the Github and app Discord.

Expansion Symbols also got a buff with this release, with fixes to some SVG symbols, and total support of all MTG set codes in font mode, as well as full support for "special" and "bonus" rarities.

Most of all, this release fixed a metric ton of bugs, which I'll let you find in the Changelog below if you're curious. Enjoy the new version!

v1.10.0 (2023-07-06)

Feat

  • split: Split cards now supported, default Split template released
  • helpers: New helper functions for rotate_document
  • gui: Add pinned to top button and link buttons to discord and github

Fix

  • ClassicTemplate: Fix incorrect backgrounds on ClassicTemplate, fix some crashes on Photoshop not connected
  • regex: Fix italicized ability bug with "Council's Dilemma"
  • prototype: Fix prototype layer select bug
  • console: Fix multiple cancellation prompts issue
  • BasicLandLayout: Ensure Artist provided by Scryfall data can be used
  • layouts: Allow basic lands to pull Collector Info, move text logic for prototype and mutate into layout object, implement layout checking in Scryfall utils
  • collector_info: Fix bug on some systems which re-enables hidden paintbrush
  • prototype: Fix prototype layout linkage now that Scryfall has added layout type "prototype"
  • main: Prevent stacking error prompts in console when missing document is closed
  • check_playable_card: Block broken "reversible_card" layout from Scryfall results
  • TokenTemplate: Add missing preview image for TokenTemplate
  • card_types: Add missing "Token" card type to template card_types dictionary, rename Basic Land -> Basic
  • format_text: Add guard clause for using LayerSet object as reference in ensure_visible_reference
  • symbols: Fix broken BNG common SVG, use better looking WTH symbols

Refactor

  • scryfall: Completely revamped logic for assigning card layout based on Scryfall data, added new settings for Scryfall data collection
  • enums: Add non_italics_abilities and update TransformIcons
  • dimensions: Add dimensions enum
  • dimensions: Add additional dimensions information to get_dimensions_from_bounds
  • watermark: Add support for "desparked" and "judgeacademy"
  • download: Move update -> utils/download, add 7z compression support
  • basic_land: Enable content aware fill on BasicLandUnstableTemplate
  • token: Enable fullart toggle on Token template
  • compression: Add compression functions/tests, add italicized ability test
  • config: Remove config.ini from repository and from built releases as it is auto-generated for the user
  • BorderlessVector: Make "Automatic" the default for "Textbox Size" setting
  • templates: Enable Borderless Vector for Basic Land type
  • enums: Add basic lands and transform icons to MTG enums
  • BorderlessVectorTemplate: Add support for MDFC, Textless, and Nickname features to BorderlessVectorTemplate
  • DynamicVectorTemplate: Added default functionality for MDFC card type in DynamicVectorTemplate class, added guard clause for reset function
  • layer_names: Add more terminology to the layer names Enum class
  • font: New helper function: set_font
  • align: Add two more align utility definitions: align_left, align_right
  • layers: Add helper function: unpack_smart_layer
  • expansion_symbol: Add support for special/bonus rarities, move to YAML symbol library
  • expansion_symbols: Final commit before deprecating json version

Perf

  • alignment: Vastly improved execution time of layer alignments and positioning, huge improvements to Planeswalker generation
  • text: Improve execution time of formatting text and positioning flavor divider

Proxyshop v1.9.0

14 Jun 02:57
Compare
Choose a tag to compare

Solstice Release

With this release we are introducing several new templates!

  • Borderless Vector: Our most advanced template yet, a gorgeous borderless full art template with variable size textbox that supports multiple card types, using vector cutouts for all shapes.
  • Lord of the Rings: Created by Tupinambá (Pedro Neves), based on the showcase introduced in the upcoming Lord of the Rings: Tales of Middle Earth.
  • Classic Remastered: Based on the legendary iDerp template, a more modern framed template with classic-looking textures. Works for both Normal and Transform cards.
  • Etched: Based on the etched template introduced in Commander Legends, with supporting assets from Warpdandy and Kyle of Card Conjurer.

We've also added new settings and features, including a collector information mode and support for Photoshop's new Generative Fill feature! Extended and Fullart templates can now have their edges filled using Generative Fill instead of Content-Aware Fill, with amazing results. This only works if you have Photoshop Beta and can be enabled in global settings.

This release also adds powerful new functionality for creators to develop custom templates including:

  • Automatic blending of colored frame textures based
  • Automatic solid color and gradient overlays for pinlines and other elements
  • More functions for working with vector shapes, masks, and effects
  • New extendable templates: NormalVector, DynamicVector, and NormalEssentials
  • Built in templates and helper functions are now broken into their own modules, by category

Pretty much every Proxyshop template has also received small updates and improvements over the course of this release, and of course there have been a flurry of bug fixes! This release has been a massive effort, probably the largest yet. Thanks to all who've provided supporting assets and helped test the app on our discord. I'm going to go take a much needed day of rest, you guys enjoy!

v1.9.0 Changelog (2023-06-13)

Feat

  • settings: Added Generative Fill setting that replaces content aware fill when supported, and Vertical Fullart which forces Fullart templates to always use vertical framing
  • GUI: Added new "Tools" tab, for app utilities that will be introduced over time. Currently comes with a "Generate Showcases" button that will generate pleasant bordered versions of every card image in the "out" folder.
  • templates: New templates: Classic Remastered (credit to iDerp), Etched (credit to Warpdandy and Kyle of CC), Lord of the Rings (credit to Tupinambá), and Borderless Vector. Updated Normal Fullart, Stargazing, and Universes Beyond. Renamed WomensDay -> Borderless, NormalClassic -> Classic, NormalExtended -> Extended, NormalFullart -> Fullart. Separated templates.py into full templates module, delineated by template types. Added new utility template classes: NormalEssentials, NormalVectorTemplate, and DynamicVectorTemplate
  • settings: Added new setting: Collector Mode, changes how collector info is rendered. Also added get_option for processing valid multi-choice options

Fix

  • divider: Improved positioning of flavor divider when layer effects are present
  • constants: Update Photoshop refreshing mechanism to avoid more error conditions, added new module for tracking MTG related constants like rarities
  • SilvanExtendedTemplate: Fix crash caused by inserting hollow crown
  • scryfall: Fix exclusion check to ensure playable memorabilia like 30A isn't excluded
  • helpers: Fix SolidColor being instantiated as a default parameter, added copy_layer_effects helper function
  • frame_logic: Added case for gold land cards like Thran Portal
  • expansion_symbol: Improve both A25 and MOM expansion symbols
  • main: Refactored the render pipeline to fix some common Photoshop issues and implemented a launch diagnostic system that detects if the required fonts are installed and Photoshop can be reached by the app
  • layouts: Fix missing set code on basic lands
  • expansion_symbol: Fix SVG symbol filename mismatch for VOW

Refactor

  • main: Add Tools tab to build procedure, moved expansion symbol library update to on_start call
  • env: Added kivy_logging and photoshop_version as private ENV's, pending functionality
  • create_color_layer: Updated to recieve a SolidColor object
  • colors: Added new colors helper functions: hex_to_rgb, fill_layer_primary
  • exceptions: Improved code readability
  • expansion_symbols.json: Transitioned to dictionary notation for all stroke definitions, in preparation for eventually moving to YAML
  • generative_fill: Added two new design helper funtions: generative_fill, generative_fill_edges
  • document: Added new document helper function: pixels_to_points
  • layers: Add new layers helper functions: edit_smart_layer, select_vector_layer_pixels
  • expansion_symbol: Improved readability of code and added robust default value generation
  • masks: Add new masks helper function: apply_mask_to_layer_fx
  • align: Use select_layer_bounds for alignment selection
  • text: Add new text helper function: get_line_count
  • format_text: Refactored text scaling to use DPI scaling methods of PhotoshopHandler, updated the SymbolMapper to use a dictionary instead of disperate attributes of the constants object, allowing creators to assign a custom color map easier
  • helpers: Separate helpers.py into entire module divided by Photoshop scope
  • configs: Add config json for ClassicRemasteredTemplate, updated config json for BasicLandClassic, Invention, and NormalClassic templates
  • SilvanMTG: Updated plugin to utilize the new content aware fill naming conventions
  • MaleMPCTemplate: Deprecated the MaleMPC template, pending addition to the base app as "Extended Dark", a small modification to the Extended template
  • main: Remove download step for app template manifest, disabled Kivy debugger log
  • constants: Added dictionaries for layer maks and pinline colors, removed some deprecated variables
  • layouts: Updated logic for 'card_count', 'collector_number', and 'collector_data'. Added 'identity', 'is_artifact', and 'is_hybrid'
  • frame_logic: Updated frame_logic to return 'is_hybrd' value, added contains_frame_colors function for testing frame layer names given
  • previews: Update preview image naming for updated template naming conventions
  • app_templates: app_manifest.json -> app_templates.json
  • enums: Created new directory for delineating enums, created new enums for settings values
  • strings: Remove deprecated ps_version_check, add method for StrEnum to check if the class "contains" a string
  • types: Add is_hybrid to FrameDetails type
  • types: Add LayerContainer type for objects that can contain artLayer or layerSet objects
  • PhotoshopHandler: Add scale_by_height and scale_by_width to get a dimension scaled based on DPI ratio
  • photoshop: Move Photoshop version checks to app object
  • format_text: Improve scale_text_right_overlap, scale_text_left_overlap, and scale_text_to_fit_textbox functions
  • photoshop: Update Photoshop enums to only make typeID conversion when an Enum is accessed, added DescriptorEnum parent class
  • fonts: Added font utility functions for determining what necessary fonts are installed at launch
  • photoshop: Update Photoshop application object to better control over Photoshop communication
  • scryfall: Moved scryfall exception decorator to new exceptions util, added get_photoshop_error_message to exceptions util for choosing correct Photoshop error
  • strings: Added string utility for appending bulletpoints to each line in a string

Proxyshop v1.8.0

29 Apr 20:17
Compare
Choose a tag to compare

Titanium Release

This release improves upon the core functionality of Proxyshop, increasing the efficiency of several legs of the render chain to improve execution time. Multi-threading across the app has been hugely improved with a complete rewrite to the console object, the render sequence, and the template class architecture. Threads will now be smoothly released when the Cancel button is pressed or the app is closed, which should prevent some Photoshop issues. There is also a central Photoshop object that is maintained and refreshed with each render to cut down on the possibility Photoshop becomes disconnected from the app. I've also added a new template type: Tokens! Proxyshop now supports one token template by default (credit to Chilli Axe), but more will be coming both in the base app as well as plugins made by our awesome community, I'm sure. New settings have also been added, and text formatting and expansion symbol placement has been improved. You can review the full changelog below.

Migration Guide

If updating from 1.6.0 or 1.7.0, just drop the new files in and overwrite! Then re-install the NDPMTG font as it has changed with this release. You're all set! If updating from a version older than 1.6.0, it is recommended to do a fresh install.

Console Version

We're now shipping a console enabled version with every release, the console version attached below will open a windows console alongside the app that prints logs from the Proxyshop backend and might help troubleshoot any issues that may occur. If experiencing problems with Proxyshop, using this version may help solve the issue. As always we are happy to help troubleshoot on the discord (linked in the README).

v1.8.0 Changelog (2023-04-27)

Feat

  • templates: New template type: Token. Now ships with one included token template (credit to Chilli Axe). Emblems are also rolled into this template type. Also implemented better Expansion Symbol positioning and scaling, reworked the rendering chain, implemented better error handling and thread procedures, and merged most transform and MDFC template classes into single classes that can handle both faces
  • threading: Implemented sophisticated thread tracking, locking, and release. Threads will now shut down properly when the Cancel button is pressed. The Console class was completely rewritten to faciliate management of the current render thread. "Render Target" can now select more than one card art to render
  • settings: Added new settings. Scryfall Sorting: Change order of Scryfall results. Watermark Default Opacity: Change the defeault opacity of generated Watermarks. Renamed Dev mode to Test mode. Implemented get_default_symbol utility function

Fix

  • text_layers: Implemented new properties governing scaling behavior such as scale_height, scale_width, fix_overflow_width, fix_overflow_height. Added a step that ensures text does not overflow the bounding box of the text area when needed
  • fonts: Updated the NDPMTG font to fix Phyrexian hybrid and implement acorn symbol

Refactor

  • templates: Move duplicate filename logic to file utils
  • frame_logic: Completely rewrote the frame logic step for efficiency, introduced efficient mapping and utility function to find the correctly ordered color identity sequence. Creators can now use this sequence to implement 3+ color frame elements with accuracy
  • expansion_symbols.json: Updated symbol library, removed reference keys as they are now deprecated
  • constants: Updated constants object to use new env variables, added new utility methods, added new lock objects, added global PhotoshopHandler object
  • plugins: Updated included plugins to use new LAYERS library and updated console handler
  • tests,-build,-deps: Added pathvalidate dependency, updated tests, implemented env module for tracking environment variables and flags
  • img: Renamed some preview images and SVG symbol directories
  • update: Refactored download functions for better readability
  • enums_layers: Moved our layer names library to a StrEnum class, con.layers refrences this
  • modules: Implemented module utilities for retrieving and refreshing plugin modules
  • objects: Implemented a PhotoshopHandler class to maintain one global Photoshop Application instance and refresh across new threads
  • scryfall: Updated scryfall set utilities to support token cards
  • utils.strings: Moved headless console to string utilities, updated console output utility functions
  • utils: Added import comments, implemented new types and updated existing types

Perf

  • format_text: Improved execution time on multiple format_text functions, refactored SymbolMapper, implemented new function scale_text_to_fit_textbox
  • helpers: Improved efficiency of some helper functions. Introduced new helpers: check_textbox_overflow, get_textbox_bounds, get_textbox_dimensions, enable/disable_vector_mask, undo/redo_action, convert_points_to_pixels, check_active_document, get_document
  • regex: Implemented a regex pattern dataclass to pre-compile all regex patterns used by the app

Proxyshop v1.7.0

06 Apr 12:50
Compare
Choose a tag to compare

Machina Release

This release improves the GUI of Proxyshop with a reworked template settings button and a button that clears that template's settings back to default. This clear defaults button looks like a broom and will only be highlighted if that template has its own config file. This release also makes other overall GUI improvements, such as separating the overall app settings from the template-to-template settings that can be overwritten on a per-template basis, disabling templates that aren't currently installed, and automatically enabling them when they are downloaded. Performance improvements include enhanced speed using ThreadPoolExecutor to pull new updates and make card data requests to Scryfall and MTGJson, as well as formalized efficient rate limiting when making requests to these API's. There are plenty of other improvements made that are listed in the full changelog, but the key focus of this release is tuning up and tightening GUI interaction for the user.

Migration Guide

If updating from v1.6.0, installation is simple, just drag and drop the new files over the previous files, then reinstall the following fonts: NDPMTG, Keyrune. These fonts have been updated with this release. In the future make sure to ONLY install the Keyrune font included in the latest release of Proxyshop. We are now using our own forked version of Keyrune.

If updating from a version older than v1.6.0, follow the migration guide here, then perform the above steps. Or just start with a totally fresh Proxyshop install, the app has changed quite a bit over the last few versions!

v1.7.0 Changelog (2023-04-06)

Feat

  • settings: Importing scryfall art for reference is now a toggle setting, has been removed from individual templates in favor of a base template function that can be modified by child classes
  • gui: Settings for each template can now be cleared to defaults with a helpful button, templates will now be disabled unless the PSD file is installed, the updater will enable the template after a download is complete
  • scryfall: Rewrote Scryfall data collection completely to use efficient rate limiting and error handling as well as improved caching and overall execution time of this step
  • settings: Seperate core system settings from the base template settings which can be overwritten for each template

Fix

  • classic: Fixed promo star setting on classic templates
  • creature: Fix mistake in creature vertically nudge text function
  • dev_mode: Skip uninstalled templates during dev mode testing
  • planeswalker: Update Planeswalker logic to enforce uniform spacing for 2 ability Planeswalkers
  • layouts: Fixed a bug affecting Saga and Class cards that have multiline abilities
  • frame_logic: Fixed frame logic for ca1rds like Maelstrome Muse and Ajani, Sleeper Agent and added both to our test cases
  • creator: Custom Creator now works for Planeswalker and Saga cards again
  • updater: Fix templates downloading to incorrect folder

Refactor

  • planeswalker: Adjust vertically nudge text function
  • helpers: Updated getLayer(), getLayerSet(), spread_layers_over_reference(), and art importing functionality
  • format_text: Added new text function check_for_text_overlap() and refactored the vertical nudge functions for Creature and Planeswalker cards
  • data: Update project toml, fonts, and expansion symbol data