Connectors that use OAuth 2.0 Authorization Code authorize each user individually: the first time you open a template that reads from such a connector, you sign in to the external system yourself, and CHILI GraFx keeps that authorization session for you. Until now that session could not be cleared — the only way to start over was to delete and republish the Connector, which affected every user of it.
A new endpoint ends the calling user's own authorization session for a Connector:
POST /api/v1/environment/{environment}/connectors/{connectorId}/auth/oauth-authorization-code/logout
The next time that user accesses the Connector, the sign-in flow runs again. This is useful when you need to connect as a different account in the external system, or when a session no longer works and you want to re-authorize cleanly.
Two things to know:
It only affects the user making the call. The session is resolved from the access token, so other users of the same Connector keep their own sessions. There is no way to sign out on someone else's behalf.
It requires a user token. Any user with access to the environment can call it. Integration (machine-to-machine) tokens are rejected, because OAuth 2.0 Authorization Code sessions belong to a person rather than to an integration.
See Authorization for Connectors for the details, and how OAuth 2.0 Authorization Code fits into the wider connector authorization model.
A new version of the Connector CLI — the command-line tool used to develop, configure, and manage CHILI GraFx connectors — is available. This release is about the local debugger, and about closing the gap between how a connector behaves on your machine and how it behaves once published.
When you invoke a connector method in the debugger, most of what matters happens out of sight: how long the method took, and which external requests it made along the way. Until now the debugger showed only the end result, so a slow query or an unexpected extra round-trip was hard to spot.
The debugger now shows an Execution metrics panel alongside the output. For every method you invoke, it reports whether the call succeeded or failed, how long it took to complete, and a record of every outgoing fetch — including the URL and the time each one took. If a method made no external calls, the panel says so explicitly, which is a quick way to confirm a caching or short-circuit path is working as intended.
Two smaller changes to the result panel: errors are now visually distinct from successful responses, and the formatted JSON output can be copied to your clipboard in one click.
Testing a method that takes an asset ID — such as detail or download — usually means running query first and copying an ID out of the result. Because that result is rendered as JSON, the value you copy tends to arrive with its surrounding quotes or braces attached, and the method then fails on characters that were never part of the ID.
Fields in the debugger that expect an ID now normalize what you paste, extracting the ID itself and discarding the JSON around it.
The debugger recompiles connector.ts whenever you save it and reloads the browser tab. This is no longer something you opt into — watch mode is always active when you run connector-cli debug, so the edit-and-refresh loop works without any extra flags.
Compilation problems are also reported more consistently, so a TypeScript error is raised as an error instead of leaving you debugging an out-of-date build.
Connectors that need to pace themselves — polling an external job until it completes, or backing off after a rate-limit response — use the global sleep(ms) helper to pause between requests. That helper was available in the connector runtime but not in the local debugger, so any connector using await sleep(...) failed under connector-cli debug even though it ran correctly once published.
The debugger now provides sleep(ms) as well, bringing it in line with the runtime. Polling and back-off logic can be tested locally instead of only after deployment.
PDF output settings now support converting RGB colors to CMYK during export. Templates often contain RGB content — photos from a DAM, or colors defined for screen — and this new option brings that content into your print-ready color space, as a complementary step to the CMYK conversion:
Enable it in your PDF output setting — switch on Convert RGB colors to CMYK colors in the Color management section. The switch becomes available once the intended and target CMYK profiles are set, since RGB colors convert to the same target CMYK profile — see the PDF output settings guide.
Pick an RGB source profile — RGB colors with an embedded profile are converted using that profile; for unmanaged RGB colors, choose the assumed source profile (such as sRGB IEC61966-2.1 or Adobe RGB (1998)) from the dropdown that appears.
For Environment API integrations, postProcessing.colorTransformation accepts two new properties: convertRGBColors (optional, default false) and intendedRGBIccProfile (required when convertRGBColors is true):
{"postProcessing":{"colorTransformation":{"intendedIccProfile":"ISO Coated v2 (ECI)","destinationIccProfile":"Coated GRACoL 2006 (ISO 12647-2:2004)","convertRGBColors":true,"intendedRGBIccProfile":"sRGB IEC61966-2.1"}}}
A Brand Kit can now carry variations of your visual identity through themes. Every Brand Kit has a default theme with the complete set of elements; additional themes inherit everything and override only what differs — a sub-brand accent color, or a print palette in CMYK.
Manage themes in GraFx Brand Kits: create, rename, and delete themes from the new theme bar on the Brand Kit detail page — see Manage themes.
Switch themes in GraFx Studio (Studio + Engine 1.45): the Brand Kit panel's new theme selector updates every Brand Kit element used in the template, and sync is theme-aware — see Switch themes.
Switch themes programmatically: new Actions helper functions getActiveThemeName() and switchTheme(name), or the equivalent Studio SDK methods — see Switch themes with Actions or the SDK.
Heavy media assets no longer fail prematurely — Studio now waits as long as GraFx Media may need (up to 10 minutes) to process an asset before giving up.
Font previews got an additional fallback, so previews render in more cases.
Undo and redo in text editing behave more predictably.
Subject type fallback on asset details — when a custom subject type has no settings of its own, the settings from the default subject type are now used.
Long layout and variable names are now easier to read in their panels.
Fixed 413 Content Too Large errors on output requests for large documents: the 10MB size limit now applies only to the variables property instead of the entire request body, so projects built on big templates download reliably again. See the Output API limitations for details.
When a connector calls an external system, CHILI GraFx routes the request through a server-side proxy that forwards your request headers — including the connector's Authorization header — on to that system. This is usually what you want, but some upstreams hand back pre-signed URLs (for example a CDN link that already carries its own authentication in the query string). Forwarding the connector's Authorization header to those URLs can cause the request to be rejected, so the asset fails to load.
You can now tell the proxy to drop specific headers on a per-request basis using the new X-GraFx-Proxy-Exclude-Headers request header. Provide a comma-separated list of header names, and those headers are removed from the outbound request before it reaches the external system. Header names are matched case-insensitively, surrounding whitespace is trimmed, and the X-GraFx-Proxy-Exclude-Headers header itself is never forwarded.
For example, to stop the connector's Authorization header from being sent to a pre-signed CDN URL:
X-GraFx-Proxy-Exclude-Headers: Authorization
This is supported on both the GET and POST connector proxy requests. It makes connectors that rely on pre-signed media URLs — such as the Aprimo connector, which serves assets through time-limited signed URLs — work reliably, without the proxy interfering with the upstream's own authentication.
Smart Crop is GraFx Studio's AI-powered fill mode that automatically zooms and positions an image inside a frame so the most important part stays in view, based on the image's Subject Area and POI (Point of Interest) — detected automatically by GraFx Genie. This release is a major upgrade:
A more predictable algorithm. The new version needs far less trial-and-error. It always fills the frame with no empty edges, always keeps the POI inside the frame's Subject Position, and fits as much of the Subject Area as it can — only cropping in as a last resort.
Subject alignment. A new setting nudges the subject toward any side of the frame's Subject Position instead of always centering it, so a subject can hug a layout edge and stay there across different aspect ratios.
Automatic versioning. Each frame keeps the version it was built with, so existing templates render exactly as before — and a "New smart crop available — apply it" prompt upgrades a frame to the latest algorithm in one click.
Five live previews. The asset details panel now shows five preview aspect ratios instead of three, in both GraFx Media and the Studio workspace, making it easier to set the right Subject Area and POI.
You can now map a component's image variable to a template's single-select list variable, giving template designers a more flexible way to drive component imagery from list-based choices.
Text frames can now use auto-grow and copyfitting together — a frame can both expand to fit its text and scale the text to stay within limits, a combination that previously meant choosing one or the other.
The Layouts and Pages tabs now stay visible for every layout intent, including animation and digital static layouts, so navigation is consistent no matter what you are designing.
The linear gradient color picker has been reorganized — the Colors/Custom toggle now sits below the gradient bar — making gradients easier to read and adjust.
When you add a component that contains a missing font, GraFx Studio now shows an error dialog right away, so you can resolve the font reference instead of running into a silent failure.
Working with connectors is now cleaner in two ways: unused connectors are automatically removed from a document when you save it, and connector mapping offers expanded options for how a data source maps into your templates.
Selecting a layout no longer makes the Layouts panel jump back to the top. The override dropdown list is sized correctly again, after becoming too narrow for its reset options. The interface now refreshes properly when you undo switching a variable, a template keeps its correct name after a "Save as", and the character-limit field once again accepts its maximum value.
We fixed three text issues: incorrect letter tracking when combined with a stroke, a glyph that was placed in the wrong position for a specific font, and a separate font that rendered incorrectly.
An image on the canvas now updates immediately after a Brand Kit sync, and copying and pasting an anchored frame onto a different page works correctly.
All requests now go through the authentication refresh mechanism, reducing unexpected failures during long sessions, and the SDK's image-upload staging call now handles token expiration gracefully.
A font preview is the sample image GraFx generates for each font style so you can see the typeface at a glance. The square (400×400) preview for newly uploaded fonts was rendering its sample text on a single line instead of wrapping to fill the square. Newly uploaded fonts now get a correctly wrapped square preview.
When setting up or testing an integration, you previously had to run through the full OAuth flow to obtain a token. You can now generate a token directly from the integration settings panel — next to the client secret — and copy it to the clipboard in one click. A toast confirms the copy. This makes it easy to test your integration against the GraFx APIs without any extra tooling.
The Templates and Components pages in GraFx Studio now support two additional sort options: Date created and Last modified. Both are also shown as columns in the list view, with times displayed in UTC to be consistent with the rest of the interface. This makes it easier to find recently updated assets in larger libraries.
Connectors installed via Connector CLI are now shown in a disabled state on the environment's Connectors page — the availability toggle is visible (showing its current state) but no edit actions are available. Hovering over the row shows a tooltip: "The connector is installed using Connector CLI tool. Editing is possible only via Connector CLI." The Add Connector button now always opens the Connector Hub flow directly, without an intermediate modal.
Connectors that expose only one authentication method can now have separate authentication configuration for server-side and browser-side use. This is useful for token injection scenarios — for example, setting the browser authentication to [None] while the server uses a configured auth method. Previously this option was only available for connectors that supported multiple auth methods.
The GraFx Labs application cards in the CHILI GraFx platform now correctly appear in a disabled state when the environment is a Sandbox, making it clear which apps are not available in that context.
Brand Kit asset management is now more flexible in two ways. First, if a media asset used in a Brand Kit has since been deleted from GraFx Media, the Brand Kit now shows a clear "Image not available" placeholder and offers Replace image and Delete image actions to resolve the broken reference. Second, the Replace image action is now available for all assets in a Brand Kit — not just deleted ones — so you can swap out any image without removing and re-adding it.
Adding a new paragraph by pressing Enter in description input fields — for example on integration description or connectors JWT private key — was silently ignored in some cases. This is now fixed.
The storage indicator on the CHILI GraFx homepage was showing incorrect values in some subscription configurations. It now correctly reflects the used and total storage for your subscription.
A clipping mask is a shape that crops an image so only the part inside the shape shows through — a common design technique in Photoshop®. GraFx Studio supports clipping masks natively on image frames, and version 1.4.0 of the GraFx Studio Exporter for Adobe® Photoshop® now preserves them on export: clipping masks set up in Photoshop® arrive in GraFx Studio as Studio-native clipping masks.
The exporter translates Photoshop® clipping setups into Studio-native clipping masks:
Built-in shapes — images clipped with a Rectangle, Ellipse, or Polygon are exported as Studio clipping shapes, including corner and stroke properties.
Custom paths — images clipped with a custom path are converted to a path-based clipping mask in Studio.
Stroke color and width on clipping masks are preserved, as are corner properties.
A preflight warning is shown for every document containing clipping masks
A clipping mask in Photoshop® is effectively an object with a fill, which is normally invisible. If the mask extends outside the clipped image, Photoshop® shows that overflowing fill — GraFx Studio does not. The plugin doesn't check whether a mask actually extends outside its frame, so it shows one global warning whenever the document contains at least one clipping mask. If your masks stay within their frames, you can safely ignore it.
Known limitation
Merged shapes, combined shapes, masks applied to a group of layers, and complex paths (for example multiple unconnected paths or a path containing another path) are not yet supported and are flagged in preflight.