<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: FrameSprite</title>
    <description>The latest articles on DEV Community by FrameSprite (framesprite-team).</description>
    <link>https://dev.to/framesprite-team</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F15464%2Fe1737717-67f2-4d84-afef-90afb2b2f8d1.png</url>
      <title>DEV Community: FrameSprite</title>
      <link>https://dev.to/framesprite-team</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/framesprite-team"/>
    <language>en</language>
    <item>
      <title>A status icon has a bright border: why can its meaning still disappear?</title>
      <dc:creator>FrameSprite</dc:creator>
      <pubDate>Wed, 21 Oct 2026 10:36:18 +0000</pubDate>
      <link>https://dev.to/framesprite-team/a-status-icon-has-a-bright-border-why-can-its-meaning-still-disappear-m4f</link>
      <guid>https://dev.to/framesprite-team/a-status-icon-has-a-bright-border-why-can-its-meaning-still-disappear-m4f</guid>
      <description>&lt;p&gt;Disclosure: This draft was generated with AI and checked against the cited primary sources, with a separate AI editorial review. It was prepared for the FrameSprite team, which has a commercial interest in FrameSprite. Proposed examples are not executed tests unless explicitly identified as recorded fixture results.&lt;/p&gt;

&lt;p&gt;Identify the part of a status icon that actually conveys its meaning, then check that part against adjacent colors. A bright outer border does not rescue a faint interior symbol if the player needs the symbol to distinguish poison from protection.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evaluate essential shapes rather than the most visible decoration.&lt;/li&gt;
&lt;li&gt;Inspect adjacent colors in every relevant interface state.&lt;/li&gt;
&lt;li&gt;Keep icon meaning, selection, and disabled appearance distinct.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The decorative border can pass the wrong test
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/non-text-contrast.html" rel="noopener noreferrer"&gt;W3C's non-text contrast guidance&lt;/a&gt; addresses meaningful visual information and relevant adjacent colors. It is not a rule that every pixel in an illustration must contrast with every background.&lt;/p&gt;

&lt;p&gt;For a browser review tool or game interface, first describe what the user must recognize. If the central droplet distinguishes poison from a shield, the droplet's boundary matters. Measuring only a high-contrast outer frame answers a different question.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mark the essential visual parts
&lt;/h2&gt;

&lt;p&gt;Create an annotated copy naming the meaningful silhouette, any required internal distinction, and optional ornament. Ask whether removing a detail changes the status interpretation. This is a design exercise, not proof that all players perceive the remaining shape.&lt;/p&gt;

&lt;p&gt;Check text labels separately using &lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html" rel="noopener noreferrer"&gt;minimum text contrast guidance&lt;/a&gt;. Do not apply text-size exceptions to a tiny pictogram merely because the icon sits beside a label.&lt;/p&gt;

&lt;p&gt;Inspect normal, selected, pressed, disabled, and overlapping-status states relevant to your interface. Some states change the background, opacity, or border. A source PNG inspected on white does not represent all of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: poison and ward icons
&lt;/h2&gt;

&lt;p&gt;Two status icons share a bright square border. Poison uses a thin purple droplet; ward uses a thin blue shield. At their smallest display size, both interiors fade into the dark slot, leaving identical bright squares.&lt;/p&gt;

&lt;p&gt;A repair could strengthen the meaningful interior silhouette, simplify detail, or provide a persistent readable status name. Keep the shared frame only for its actual purpose. If it indicates selection, it should not also be the only clue to status identity.&lt;/p&gt;

&lt;p&gt;Do not solve the problem by increasing saturation alone. The required shape can remain low contrast against its immediate background even when the hue looks vivid.&lt;/p&gt;

&lt;h2&gt;
  
  
  Acceptance in the actual interface
&lt;/h2&gt;

&lt;p&gt;Microsoft's &lt;a href="https://learn.microsoft.com/en-us/xbox/accessibility/xbox-accessibility-guidelines/103" rel="noopener noreferrer"&gt;multiple-cue guidance&lt;/a&gt; supports using more than a single information channel. Decide which text or other supported cue accompanies the icon when the status affects a player's decision.&lt;/p&gt;

&lt;p&gt;Proposed acceptance tasks include distinguishing the two statuses, identifying the selected one, and understanding a disabled state at the actual display size. Record the tested background and scale. A numerical contrast check supports the task but does not replace user evaluation.&lt;/p&gt;

&lt;p&gt;This is a source-informed inspection method, not a tested accessibility result or a blanket standards claim about artistic game sprites. No icon was measured or evaluated with participants for this article. Apply the relevant standard to the actual interface and its essential information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related workflow
&lt;/h2&gt;

&lt;p&gt;See &lt;a href="https://www.framesprite.com/guides/ai-game-icon-generator" rel="noopener noreferrer"&gt;ai game icon generator&lt;/a&gt; for the adjacent decision. Keep the &lt;a href="https://www.framesprite.com/guides/sprite-animation-handoff-checklist" rel="noopener noreferrer"&gt;animation handoff checklist&lt;/a&gt; with the deliverable and preserve the &lt;a href="https://www.framesprite.com/guides/ai-game-asset-style-guide-reference-board" rel="noopener noreferrer"&gt;art reference board&lt;/a&gt; for visual intent.&lt;/p&gt;

&lt;p&gt;Prepared by the &lt;a href="https://www.framesprite.com/about#workflow-team" rel="noopener noreferrer"&gt;FrameSprite Workflow Team&lt;/a&gt;. &lt;a href="https://www.framesprite.com/about" rel="noopener noreferrer"&gt;Editorial method&lt;/a&gt; · &lt;a href="https://www.framesprite.com/contact" rel="noopener noreferrer"&gt;Corrections&lt;/a&gt;. Primary documentation checked 2026-10-20.&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>design</category>
      <category>ux</category>
    </item>
    <item>
      <title>Why will a valid sprite ZIP not extract into normal Windows filenames?</title>
      <dc:creator>FrameSprite</dc:creator>
      <pubDate>Wed, 21 Oct 2026 10:35:58 +0000</pubDate>
      <link>https://dev.to/framesprite-team/why-will-a-valid-sprite-zip-not-extract-into-normal-windows-filenames-15kn</link>
      <guid>https://dev.to/framesprite-team/why-will-a-valid-sprite-zip-not-extract-into-normal-windows-filenames-15kn</guid>
      <description>&lt;p&gt;Disclosure: This draft was generated with AI and checked against the cited primary sources, with a separate AI editorial review. It was prepared for the FrameSprite team, which has a commercial interest in FrameSprite. Proposed examples are not executed tests unless explicitly identified as recorded fixture results.&lt;/p&gt;

&lt;p&gt;Validate every filename component against destination platforms before publishing an asset ZIP. An archive may store names that normal Windows tools cannot create as intended. Reserved device names and trailing characters need a portability check separate from image validity.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check directory components as well as PNG basenames.&lt;/li&gt;
&lt;li&gt;Rename through a recorded mapping and update consumers.&lt;/li&gt;
&lt;li&gt;Test extraction with the platforms and tools you support.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A valid archive is not a portable folder
&lt;/h2&gt;

&lt;p&gt;Microsoft's &lt;a href="https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file" rel="noopener noreferrer"&gt;file naming documentation&lt;/a&gt; describes Windows name restrictions. A reserved device basename is not made ordinary by adding a PNG extension. A directory component can also cause trouble.&lt;/p&gt;

&lt;p&gt;Do not infer portability from successful upload or an archive listing. Those show that a service accepted the container, not that a recipient can create all entries. Separately hosted preview images can conceal the issue if upload software renamed them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audit names before assembling the release
&lt;/h2&gt;

&lt;p&gt;Define the recipient platforms, then list every archive member and inspect its components. Keep the policy conservative enough for those recipients. A package does not need every name accepted by an unusual filesystem namespace.&lt;/p&gt;

&lt;p&gt;Use &lt;a href="https://docs.python.org/3/library/os.path.html" rel="noopener noreferrer"&gt;path utilities&lt;/a&gt; for path handling, while keeping explicit platform validation separate. Generic normalization is not a complete Windows-name validator. Check reserved names, trailing spaces or periods, and project-specific restrictions.&lt;/p&gt;

&lt;p&gt;Maintain a source-to-delivery map. An internal source can keep an established name while its public export uses a portable identifier. Update the manifest, examples, and documentation together so they agree on the output name.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: the console prop
&lt;/h2&gt;

&lt;p&gt;A communications-terminal prop is exported as &lt;code&gt;CON.png&lt;/code&gt;. The ZIP inventory looks ordinary, but a Windows recipient cannot extract that member normally. A sample level then lacks the terminal while neighboring props appear correctly.&lt;/p&gt;

&lt;p&gt;Rename the delivery to &lt;code&gt;terminal-console.png&lt;/code&gt;, update references, rebuild the archive, and validate that assembled package. Do not depend on a special extraction workaround for ordinary supported use.&lt;/p&gt;

&lt;p&gt;This is different from letter-case mismatch. Capitalizing or lowercasing the reserved basename is not a complete portability repair. The naming audit should explain which mechanism rejected a member so the artist can fix the source naming rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify extraction and content separately
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://docs.python.org/3/library/zipfile.html" rel="noopener noreferrer"&gt;Python ZIP documentation&lt;/a&gt; provides archive inspection interfaces. Use a listing to catch suspicious names before extraction, then test with actual recipient tools because their handling and error reporting may differ.&lt;/p&gt;

&lt;p&gt;Accept the package when its names satisfy the declared policy, references resolve to the renamed outputs, and clean extraction produces the complete inventory. Check for silently skipped members as well as visible errors.&lt;/p&gt;

&lt;p&gt;Keep the mapping and naming policy with the release. Otherwise a later regeneration can reintroduce the old name even though one manually corrected ZIP worked.&lt;/p&gt;

&lt;p&gt;This is a proposed portability check. The example was not extracted on Windows for this article, and it does not establish support for every filesystem or archive program.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related workflow
&lt;/h2&gt;

&lt;p&gt;See &lt;a href="https://www.framesprite.com/guides/sprite-assets-case-sensitive-path-export" rel="noopener noreferrer"&gt;sprite assets case sensitive path export&lt;/a&gt; for the adjacent failure. Keep the &lt;a href="https://www.framesprite.com/guides/sprite-animation-handoff-checklist" rel="noopener noreferrer"&gt;animation handoff checklist&lt;/a&gt; with the package and record visual decisions in the &lt;a href="https://www.framesprite.com/guides/ai-game-asset-style-guide-reference-board" rel="noopener noreferrer"&gt;art reference board&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Prepared by the &lt;a href="https://www.framesprite.com/about#workflow-team" rel="noopener noreferrer"&gt;FrameSprite Workflow Team&lt;/a&gt;. &lt;a href="https://www.framesprite.com/about" rel="noopener noreferrer"&gt;Editorial method&lt;/a&gt; · &lt;a href="https://www.framesprite.com/contact" rel="noopener noreferrer"&gt;Corrections&lt;/a&gt;. Primary documentation checked 2026-10-20.&lt;/p&gt;

</description>
      <category>software</category>
      <category>softwaredevelopment</category>
      <category>testing</category>
    </item>
    <item>
      <title>Why does an asset ZIP contain two different files that extract to one name?</title>
      <dc:creator>FrameSprite</dc:creator>
      <pubDate>Wed, 21 Oct 2026 10:35:41 +0000</pubDate>
      <link>https://dev.to/framesprite-team/why-does-an-asset-zip-contain-two-different-files-that-extract-to-one-name-18ln</link>
      <guid>https://dev.to/framesprite-team/why-does-an-asset-zip-contain-two-different-files-that-extract-to-one-name-18ln</guid>
      <description>&lt;p&gt;Disclosure: This draft was generated with AI and checked against the cited primary sources, with a separate AI editorial review. It was prepared for the FrameSprite team, which has a commercial interest in FrameSprite. Proposed examples are not executed tests unless explicitly identified as recorded fixture results.&lt;/p&gt;

&lt;p&gt;Reject ambiguous archive member names before extracting the sprite package. Two stored entries can target the same destination after normalization, even when their strings differ. Decide whether a name is unique within the recipient's path rules, not merely unique in the ZIP listing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inspect the complete member set before extraction.&lt;/li&gt;
&lt;li&gt;Detect exact duplicates and destination-equivalent paths.&lt;/li&gt;
&lt;li&gt;Never depend on whichever duplicate an extractor happens to choose.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The container can hide a name collision
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://docs.python.org/3/library/zipfile.html" rel="noopener noreferrer"&gt;Python ZIP documentation&lt;/a&gt; explicitly discusses archives containing duplicate member names. A directory listing or name-based lookup does not make duplicates a reliable delivery convention.&lt;/p&gt;

&lt;p&gt;There are also collisions created at the destination. A package might contain a path with a redundant current-directory component and another direct path, or names differing only in a way the target filesystem treats as equivalent. Which file survives can depend on the extraction tool and environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define the destination identity
&lt;/h2&gt;

&lt;p&gt;Use a fixed archive root and a documented output naming policy. List all members before writing them. For each, retain its original name and derive the proposed destination according to the package's rules.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.python.org/3/library/os.path.html" rel="noopener noreferrer"&gt;Path normalization and real-path operations&lt;/a&gt; have different purposes. Normalizing a string alone does not prove where a filesystem link leads. For this audit, keep the name-collision check separate from containment and link checks.&lt;/p&gt;

&lt;p&gt;Compare destination identities as a set. Report both conflicting original members together. Avoid silently keeping the first or last entry, because neither position establishes which art revision was approved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: two copies of the same idle
&lt;/h2&gt;

&lt;p&gt;A packaging script collects &lt;code&gt;hero/idle.png&lt;/code&gt; from an approved export folder and a second entry named &lt;code&gt;hero/./idle.png&lt;/code&gt; from a temporary folder. The two images show different boot colors. The raw names differ, but normal path interpretation can place them at one destination.&lt;/p&gt;

&lt;p&gt;The repair is to identify the intended source revision and remove the unintended member from package assembly. Do not ask the recipient to delete one after extraction, when the overwritten candidate might no longer be visible.&lt;/p&gt;

&lt;p&gt;Apply the same review to case-equivalent names on supported targets. Preserve a readable report that maps each rejected source to its conflicting destination.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rebuild from an unambiguous inventory
&lt;/h2&gt;

&lt;p&gt;A manifest should describe the accepted member set, not just repeat the archive's raw names. If stored as JSON, follow the interoperability considerations in &lt;a href="https://www.rfc-editor.org/rfc/rfc8259" rel="noopener noreferrer"&gt;RFC 8259&lt;/a&gt; and avoid using duplicate object names as a substitute for a collision report.&lt;/p&gt;

&lt;p&gt;After rebuilding, verify the archive member count, its unique destination count, and references from the sample scene. Inspect a clean extraction and confirm it contains the selected revision of the idle animation.&lt;/p&gt;

&lt;p&gt;This is a proposed package audit, not an executed extractor comparison. It does not claim that all programs normalize names identically. If the release supports several environments, test each declared environment and document any restrictions rather than accepting an ambiguous package.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related workflow
&lt;/h2&gt;

&lt;p&gt;See &lt;a href="https://www.framesprite.com/guides/game-asset-pack-preview-zip-inventory-check" rel="noopener noreferrer"&gt;game asset pack preview zip inventory check&lt;/a&gt; for the adjacent failure. Keep the &lt;a href="https://www.framesprite.com/guides/sprite-animation-handoff-checklist" rel="noopener noreferrer"&gt;animation handoff checklist&lt;/a&gt; with the package and record visual decisions in the &lt;a href="https://www.framesprite.com/guides/ai-game-asset-style-guide-reference-board" rel="noopener noreferrer"&gt;art reference board&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Prepared by the &lt;a href="https://www.framesprite.com/about#workflow-team" rel="noopener noreferrer"&gt;FrameSprite Workflow Team&lt;/a&gt;. &lt;a href="https://www.framesprite.com/about" rel="noopener noreferrer"&gt;Editorial method&lt;/a&gt; · &lt;a href="https://www.framesprite.com/contact" rel="noopener noreferrer"&gt;Corrections&lt;/a&gt;. Primary documentation checked 2026-10-20.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>security</category>
      <category>softwaredevelopment</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Is hiding reference material under zero alpha enough before sharing a sprite?</title>
      <dc:creator>FrameSprite</dc:creator>
      <pubDate>Wed, 21 Oct 2026 10:35:14 +0000</pubDate>
      <link>https://dev.to/framesprite-team/is-hiding-reference-material-under-zero-alpha-enough-before-sharing-a-sprite-19da</link>
      <guid>https://dev.to/framesprite-team/is-hiding-reference-material-under-zero-alpha-enough-before-sharing-a-sprite-19da</guid>
      <description>&lt;p&gt;Disclosure: This draft was generated with AI and checked against the cited primary sources, with a separate AI editorial review. It was prepared for the FrameSprite team, which has a commercial interest in FrameSprite. Proposed examples are not executed tests unless explicitly identified as recorded fixture results.&lt;/p&gt;

&lt;p&gt;Do not treat zero alpha as redaction. Fully transparent pixels can still carry color data, and the file can contain metadata unrelated to the visible sprite. Inspect and sanitize the actual delivery artifact when private reference material must not travel with it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visibility and retained file data are different properties.&lt;/li&gt;
&lt;li&gt;Separate privacy cleanup from edge-color preparation.&lt;/li&gt;
&lt;li&gt;Recheck the final package after every export or repack.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  An invisible pixel is not necessarily empty
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.w3.org/TR/png/" rel="noopener noreferrer"&gt;PNG specification&lt;/a&gt; defines color samples and transparency separately. A transparent image can therefore retain RGB information that an ordinary composite preview does not show.&lt;/p&gt;

&lt;p&gt;That hidden color can be intentional, for example when preparing edge colors for filtered rendering. It can also be unwanted source residue. The appropriate treatment depends on the delivery contract, not on whether a checkerboard preview looks clean.&lt;/p&gt;

&lt;h2&gt;
  
  
  Establish what may leave the project
&lt;/h2&gt;

&lt;p&gt;List the inputs and metadata allowed in the public export. Private source photographs, confidential notes, and local directory details should not be assumed safe merely because the visible sprite hides them.&lt;/p&gt;

&lt;p&gt;Inspect the exported pixels in a way that reveals color under transparency, and inspect metadata with an appropriate tool. If you maintain an inventory or transformation ledger in JSON, remember that &lt;a href="https://www.rfc-editor.org/rfc/rfc8259" rel="noopener noreferrer"&gt;RFC 8259&lt;/a&gt; validates data representation, not whether its text is appropriate to publish.&lt;/p&gt;

&lt;p&gt;Work on a delivery copy. Preserve the editable master and original inputs according to their handling requirements. Do not erase useful source information from the only recoverable production file to solve a packaging problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: a cropped reference behind the character
&lt;/h2&gt;

&lt;p&gt;A composition contains a private reference layer that is hidden before export. The visible PNG looks correct. Depending on the export process, hidden source data may be absent, retained in metadata, or represented in otherwise invisible pixel values. The preview alone cannot establish which outcome occurred.&lt;/p&gt;

&lt;p&gt;Inspect the actual exported file. If unwanted information remains, create a sanitized delivery using a documented process and verify that process's output. Renaming the file or flattening the visible preview is not proof that every hidden field was removed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preserve the rendering contract
&lt;/h2&gt;

&lt;p&gt;A blanket instruction to make all transparent RGB black can damage filtered edge behavior. Review privacy requirements and rendering requirements together. Approved edge dilation may intentionally place nearby colors under zero alpha without containing private source material.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.w3.org/TR/css-color-4/" rel="noopener noreferrer"&gt;CSS Color specification&lt;/a&gt; provides relevant context for color and alpha interpretation in browser rendering. The project's final engine or browser still needs its own visual check after sanitization.&lt;/p&gt;

&lt;p&gt;Accept the package when the delivered file contains only permitted data and still renders as approved on required backgrounds. Record the inspection tool and exact output revision.&lt;/p&gt;

&lt;p&gt;This is a proposed data-inspection procedure. No private residue, metadata removal, or rendering change was tested here. The guide does not claim that any particular exporter leaks hidden layers; its behavior must be checked directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related workflow
&lt;/h2&gt;

&lt;p&gt;For the adjacent decision, see &lt;a href="https://www.framesprite.com/guides/straight-vs-premultiplied-alpha-sprites" rel="noopener noreferrer"&gt;straight vs premultiplied alpha sprites&lt;/a&gt;. Carry the &lt;a href="https://www.framesprite.com/guides/sprite-animation-handoff-checklist" rel="noopener noreferrer"&gt;animation handoff checklist&lt;/a&gt; with the release and retain the &lt;a href="https://www.framesprite.com/guides/ai-game-asset-style-guide-reference-board" rel="noopener noreferrer"&gt;art reference board&lt;/a&gt; for visual decisions.&lt;/p&gt;

&lt;p&gt;Prepared by the &lt;a href="https://www.framesprite.com/about#workflow-team" rel="noopener noreferrer"&gt;FrameSprite Workflow Team&lt;/a&gt;. &lt;a href="https://www.framesprite.com/about" rel="noopener noreferrer"&gt;Editorial method&lt;/a&gt; · &lt;a href="https://www.framesprite.com/contact" rel="noopener noreferrer"&gt;Corrections&lt;/a&gt;. Primary documentation checked 2026-10-20.&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>security</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Why do sprite review labels and approval controls disappear at browser zoom?</title>
      <dc:creator>FrameSprite</dc:creator>
      <pubDate>Wed, 21 Oct 2026 10:34:54 +0000</pubDate>
      <link>https://dev.to/framesprite-team/why-do-sprite-review-labels-and-approval-controls-disappear-at-browser-zoom-122l</link>
      <guid>https://dev.to/framesprite-team/why-do-sprite-review-labels-and-approval-controls-disappear-at-browser-zoom-122l</guid>
      <description>&lt;p&gt;Disclosure: This draft was generated with AI and checked against the cited primary sources, with a separate AI editorial review. It was prepared for the FrameSprite team, which has a commercial interest in FrameSprite. Proposed examples are not executed tests unless explicitly identified as recorded fixture results.&lt;/p&gt;

&lt;p&gt;Let review labels and controls reflow around a sprite that may need its own pan or zoom surface. A large two-dimensional image does not justify clipping the approval button, metadata, or correction link when the browser is zoomed. Separate the artwork viewport from the surrounding document layout.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Preserve all review actions when text grows or the viewport narrows.&lt;/li&gt;
&lt;li&gt;Keep image navigation distinct from page navigation.&lt;/li&gt;
&lt;li&gt;Check reflow and text resizing as related but different tasks.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The canvas can hide a layout failure
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/reflow.html" rel="noopener noreferrer"&gt;W3C reflow guidance&lt;/a&gt; includes scope and exceptions for content requiring two-dimensional layout. Apply those carefully. A sprite contact sheet may have a spatial purpose, while its labels and controls often can reflow normally.&lt;/p&gt;

&lt;p&gt;Do not place the entire review interface in one fixed-width bitmap or clipped container. That couples readable text, interaction, and image inspection to the same scaling decision. An artist may need a large image without wanting tiny labels.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate the review regions
&lt;/h2&gt;

&lt;p&gt;Use a bounded artwork viewport for panning or zooming the source. Place action names, revision, metadata, and approval controls in normal responsive document layout. Keep the relationship between the selected image and its details explicit.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/resize-text.html" rel="noopener noreferrer"&gt;text-resize guidance&lt;/a&gt; concerns preserving content and functionality when text is enlarged. Browser zoom, text resizing, and an in-image zoom slider are not interchangeable tests.&lt;/p&gt;

&lt;p&gt;Make scroll behavior predictable. A user should understand whether a wheel, arrow key, or drag moves the image or the page. Avoid trapping them inside the artwork area when they want to reach the next field.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: an approval button below a clipped panel
&lt;/h2&gt;

&lt;p&gt;A review page uses a fixed-height side panel aligned with a large sprite canvas. At normal scale, the panel shows action metadata and Approve. When text grows, longer labels occupy more lines and push Approve below the panel's clipped edge.&lt;/p&gt;

&lt;p&gt;Making the source image smaller does not repair the control layout. Allow the detail panel to grow or scroll appropriately, and preserve a clear route to its actions. On a narrow viewport, move details below the image rather than overlaying essential text across it.&lt;/p&gt;

&lt;p&gt;Check that the selected frame remains identified after layout changes. Reflow should not reset selection or associate metadata with a different thumbnail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify the full task
&lt;/h2&gt;

&lt;p&gt;Use &lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/keyboard.html" rel="noopener noreferrer"&gt;keyboard guidance&lt;/a&gt; to review access without a pointer. At the intended zoom and text sizes, select a frame, read its revision, enter a correction, reach approval, and leave the image viewport.&lt;/p&gt;

&lt;p&gt;Record the browser, viewport, zoom, and text settings. Check long action names and translated labels as well as short defaults. A single narrow screenshot can reveal clipping but does not prove the whole interaction works.&lt;/p&gt;

&lt;p&gt;This is a proposed browser-review test, not an executed responsive-layout or standards-conformance result. It does not require shrinking the sprite's production resolution; the repair concerns presentation and access to the review controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related workflow
&lt;/h2&gt;

&lt;p&gt;See &lt;a href="https://www.framesprite.com/guides/sprite-team-review-contact-sheet-not-preview" rel="noopener noreferrer"&gt;sprite team review contact sheet not preview&lt;/a&gt; for the adjacent task. Carry the &lt;a href="https://www.framesprite.com/guides/sprite-animation-handoff-checklist" rel="noopener noreferrer"&gt;animation handoff checklist&lt;/a&gt; with the release, and use the &lt;a href="https://www.framesprite.com/guides/ai-game-asset-style-guide-reference-board" rel="noopener noreferrer"&gt;art reference board&lt;/a&gt; to retain visual intent.&lt;/p&gt;

&lt;p&gt;Prepared by the &lt;a href="https://www.framesprite.com/about#workflow-team" rel="noopener noreferrer"&gt;FrameSprite Workflow Team&lt;/a&gt;. &lt;a href="https://www.framesprite.com/about" rel="noopener noreferrer"&gt;Editorial method&lt;/a&gt; · &lt;a href="https://www.framesprite.com/contact" rel="noopener noreferrer"&gt;Corrections&lt;/a&gt;. Primary documentation checked 2026-10-20.&lt;/p&gt;

</description>
      <category>css</category>
      <category>frontend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why does a sprite selection border disappear in Windows high contrast?</title>
      <dc:creator>FrameSprite</dc:creator>
      <pubDate>Wed, 21 Oct 2026 10:34:34 +0000</pubDate>
      <link>https://dev.to/framesprite-team/why-does-a-sprite-selection-border-disappear-in-windows-high-contrast-5ef1</link>
      <guid>https://dev.to/framesprite-team/why-does-a-sprite-selection-border-disappear-in-windows-high-contrast-5ef1</guid>
      <description>&lt;p&gt;Disclosure: This draft was generated with AI and checked against the cited primary sources, with a separate AI editorial review. It was prepared for the FrameSprite team, which has a commercial interest in FrameSprite. Proposed examples are not executed tests unless explicitly identified as recorded fixture results.&lt;/p&gt;

&lt;p&gt;Make sprite selection and focus survive the user's forced-colors mode. A shadow-only selection ring can disappear when the browser replaces author colors or suppresses shadows. Adapt the controls narrowly instead of disabling the user's display preference for the whole gallery.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use structural cues for selection and visible focus.&lt;/li&gt;
&lt;li&gt;Inspect controls in the actual forced-colors environment.&lt;/li&gt;
&lt;li&gt;Keep the artwork's presentation separate from control affordances.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A decorative shadow can carry essential state accidentally
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/forced-colors" rel="noopener noreferrer"&gt;MDN forced-colors reference&lt;/a&gt; documents browser adjustments, including shadow handling. An interface that relies entirely on a glow can lose its only visible selection cue.&lt;/p&gt;

&lt;p&gt;This does not imply every raster sprite is recolored by the browser. Inspect the actual elements and properties involved. The state indicator surrounding the image may fail while the image itself remains unchanged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Distinguish selection from focus
&lt;/h2&gt;

&lt;p&gt;Selection tells the reviewer which frame or action will be acted on. Focus identifies the current keyboard location. Both can matter at once. The &lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/focus-visible.html" rel="noopener noreferrer"&gt;W3C visible-focus guidance&lt;/a&gt; addresses the latter; it does not automatically implement selection.&lt;/p&gt;

&lt;p&gt;Use a visible border, outline, text label, or other supported cue that remains perceivable. Avoid relying only on the difference between two custom background colors. Prefer native semantic controls when they fit the task.&lt;/p&gt;

&lt;p&gt;Review the meaningful boundary against its actual adjacent colors with &lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/non-text-contrast.html" rel="noopener noreferrer"&gt;non-text contrast guidance&lt;/a&gt;. The relevant colors can differ from the normal theme after the user's preference is applied.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: the selected attack card
&lt;/h2&gt;

&lt;p&gt;A card uses a teal box shadow when selected. Its plain border is intentionally transparent. In forced colors, the shadow no longer provides the expected cue, so the reviewer cannot tell whether Walk or Attack will be downloaded.&lt;/p&gt;

&lt;p&gt;A proposed repair keeps a real border for the selected state and a separate visible focus treatment. A textual Selected label can reinforce the distinction. Test whether moving focus to the download button leaves the selected action understandable.&lt;/p&gt;

&lt;p&gt;Do not broadly apply a forced-color opt-out to restore the original design. That can remove display adjustments the user relies on. If the artwork needs a controlled preview surface, isolate that requirement and retain the surrounding controls' support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Acceptance with user preferences active
&lt;/h2&gt;

&lt;p&gt;Run the review task using the supported operating-system and browser combination. Select a frame, move focus away, switch actions, and activate a control. Verify that both selection and focus are understandable rather than judging a static screenshot alone.&lt;/p&gt;

&lt;p&gt;Record the environment and any targeted CSS adjustment. A normal dark theme is not the same test as a real forced-colors mode, and a screenshot with simulated recoloring does not establish equivalent behavior.&lt;/p&gt;

&lt;p&gt;This is a proposed browser-interface check. No operating-system setting, CSS change, or keyboard task was executed for this article. It does not claim standards conformance from one visual cue or recommend changing the production sprite's palette to repair a review-control defect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related workflow
&lt;/h2&gt;

&lt;p&gt;See &lt;a href="https://www.framesprite.com/guides/game-ui-animation-state-screen-reader-feedback" rel="noopener noreferrer"&gt;game ui animation state screen reader feedback&lt;/a&gt; for the adjacent task. Carry the &lt;a href="https://www.framesprite.com/guides/sprite-animation-handoff-checklist" rel="noopener noreferrer"&gt;animation handoff checklist&lt;/a&gt; with the release, and use the &lt;a href="https://www.framesprite.com/guides/ai-game-asset-style-guide-reference-board" rel="noopener noreferrer"&gt;art reference board&lt;/a&gt; to retain visual intent.&lt;/p&gt;

&lt;p&gt;Prepared by the &lt;a href="https://www.framesprite.com/about#workflow-team" rel="noopener noreferrer"&gt;FrameSprite Workflow Team&lt;/a&gt;. &lt;a href="https://www.framesprite.com/about" rel="noopener noreferrer"&gt;Editorial method&lt;/a&gt; · &lt;a href="https://www.framesprite.com/contact" rel="noopener noreferrer"&gt;Corrections&lt;/a&gt;. Primary documentation checked 2026-10-20.&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>css</category>
      <category>frontend</category>
      <category>ui</category>
    </item>
    <item>
      <title>Why did an approved sprite change before the art pull request merged?</title>
      <dc:creator>FrameSprite</dc:creator>
      <pubDate>Wed, 21 Oct 2026 10:34:15 +0000</pubDate>
      <link>https://dev.to/framesprite-team/why-did-an-approved-sprite-change-before-the-art-pull-request-merged-4f2p</link>
      <guid>https://dev.to/framesprite-team/why-did-an-approved-sprite-change-before-the-art-pull-request-merged-4f2p</guid>
      <description>&lt;p&gt;Disclosure: This draft was generated with AI and checked against the cited primary sources, with a separate AI editorial review. It was prepared for the FrameSprite team, which has a commercial interest in FrameSprite. Proposed examples are not executed tests unless explicitly identified as recorded fixture results.&lt;/p&gt;

&lt;p&gt;Approve the commit that contains the reviewed sprite, not just the pull request title. If an artist replaces a texture or its timing metadata after approval, the earlier review is evidence about the earlier version. Request another review of the changed delivery files before merging.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Record the reviewed commit and the exact asset paths.&lt;/li&gt;
&lt;li&gt;Recheck visual output when pixels, layout, or playback metadata changes.&lt;/li&gt;
&lt;li&gt;Keep approval separate from a successful import or build.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why the green approval can become misleading
&lt;/h2&gt;

&lt;p&gt;A sprite pull request can contain several exports over its lifetime. A reviewer may approve a blue sword silhouette on Monday, while Tuesday's export changes the grip and frame order. The conversation still looks positive, but it no longer describes the delivery candidate.&lt;/p&gt;

&lt;p&gt;GitHub offers options for &lt;a href="https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches" rel="noopener noreferrer"&gt;dismissing stale approvals and requiring review of the latest push&lt;/a&gt;. These are configurable protections, not evidence that a particular repository has enabled them. Check the actual settings and bypass rules with the repository owner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bind the review to a small, explicit asset set
&lt;/h2&gt;

&lt;p&gt;Start the review message with the commit identifier, texture paths, sidecar paths, and preview generation method. A contact sheet attached to a comment should state which commit produced it. A screenshot uploaded before the final export needs replacement or an explicit historical label.&lt;/p&gt;

&lt;p&gt;Use the &lt;a href="https://git-scm.com/docs/git-diff" rel="noopener noreferrer"&gt;Git diff documentation&lt;/a&gt; to select the comparison you intend: the proposed branch against its base is different from unstaged local changes. Have the reviewer inspect the candidate export, not an editor tab that might contain uncommitted work.&lt;/p&gt;

&lt;p&gt;Classify later changes by consequence. A spelling correction in a README may need editorial review. Changing cell dimensions, action names, frame duration, or attachment positions needs the relevant visual or integration reviewer again. Do not decide that a JSON edit is harmless merely because the PNG did not change.&lt;/p&gt;

&lt;h2&gt;
  
  
  A concrete review sequence
&lt;/h2&gt;

&lt;p&gt;Suppose commit &lt;code&gt;art-a&lt;/code&gt; contains &lt;code&gt;guard/attack.png&lt;/code&gt; and an eight-frame timing file. The artist receives approval, then exports six frames at commit &lt;code&gt;art-b&lt;/code&gt; to improve the hit pose. The preview in the original comment still shows eight frames.&lt;/p&gt;

&lt;p&gt;The next review should identify the removed poses, inspect the six-frame sequence, and confirm that timing and any event references match it. Upload the new preview with &lt;code&gt;art-b&lt;/code&gt; in its caption. Keep the earlier discussion as context rather than silently replacing the candidate and assuming approval transfers.&lt;/p&gt;

&lt;p&gt;If the change only renames an internal file, verify all consumers before treating it as administrative. A resource reference can break while its image remains visually identical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ownership and acceptance
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners" rel="noopener noreferrer"&gt;CODEOWNERS&lt;/a&gt; can route review requests, but routing does not prove that both the art and importer contracts were checked. Name those responsibilities in the pull request when one person cannot cover both.&lt;/p&gt;

&lt;p&gt;Accept the revision when the review record identifies the final commit, the preview matches that revision, all changed sidecars are included, and required reviewers have approved the actual candidate. A passing build answers a different question: whether the files could be processed.&lt;/p&gt;

&lt;p&gt;This is a proposed review procedure derived from documented version-control behavior. No repository settings, review turnaround, or defect reduction were measured for this example.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continue the workflow
&lt;/h2&gt;

&lt;p&gt;Use the &lt;a href="https://www.framesprite.com/guides/sprite-team-review-contact-sheet-not-preview" rel="noopener noreferrer"&gt;Is a GIF preview enough for a teammate to approve a sprite animation?&lt;/a&gt; for the neighboring problem. Keep the &lt;a href="https://www.framesprite.com/guides/sprite-animation-handoff-checklist" rel="noopener noreferrer"&gt;animation handoff checklist&lt;/a&gt; with the delivered package, and preserve its visual decisions in the &lt;a href="https://www.framesprite.com/guides/ai-game-asset-style-guide-reference-board" rel="noopener noreferrer"&gt;game-art reference board&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and editorial responsibility
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches" rel="noopener noreferrer"&gt;Primary documentation 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners" rel="noopener noreferrer"&gt;Primary documentation 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-diff" rel="noopener noreferrer"&gt;Primary documentation 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prepared by the &lt;a href="https://www.framesprite.com/about#workflow-team" rel="noopener noreferrer"&gt;FrameSprite Workflow Team&lt;/a&gt;. See the &lt;a href="https://www.framesprite.com/about" rel="noopener noreferrer"&gt;editorial method&lt;/a&gt; or &lt;a href="https://www.framesprite.com/contact" rel="noopener noreferrer"&gt;contact the team&lt;/a&gt; with a reproducible correction. Sources checked 2026-10-20.&lt;/p&gt;

</description>
      <category>git</category>
      <category>softwaredevelopment</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Can reviewers understand added and deleted sprite changes without red and green?</title>
      <dc:creator>FrameSprite</dc:creator>
      <pubDate>Wed, 21 Oct 2026 10:33:57 +0000</pubDate>
      <link>https://dev.to/framesprite-team/can-reviewers-understand-added-and-deleted-sprite-changes-without-red-and-green-1fco</link>
      <guid>https://dev.to/framesprite-team/can-reviewers-understand-added-and-deleted-sprite-changes-without-red-and-green-1fco</guid>
      <description>&lt;p&gt;Disclosure: This draft was generated with AI and checked against the cited primary sources, with a separate AI editorial review. It was prepared for the FrameSprite team, which has a commercial interest in FrameSprite. Proposed examples are not executed tests unless explicitly identified as recorded fixture results.&lt;/p&gt;

&lt;p&gt;Label added, removed, and changed sprite regions with text or distinct marks as well as color. A red-green overlay can be quick for some reviewers, but hue alone makes the review meaning fragile. Keep annotation meaning separate from the artwork's own palette.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name each review state directly.&lt;/li&gt;
&lt;li&gt;Make annotations distinguishable without their hue.&lt;/li&gt;
&lt;li&gt;Preserve an unmarked source view for judging the art.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Review color is a second visual language
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html" rel="noopener noreferrer"&gt;W3C's use-of-color guidance&lt;/a&gt; explains why information should not depend only on color. An art-review overlay is an interface conveying decisions, even when the underlying sprite is decorative content.&lt;/p&gt;

&lt;p&gt;A red region might mean removed pixels in one tool and newly painted pixels in another. State the legend beside the comparison. Do not assume reviewers share a convention or can distinguish every overlay against the sprite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate evidence from annotation
&lt;/h2&gt;

&lt;p&gt;Retain the previous and candidate frames unchanged. Generate a distinct annotation layer that can be toggled off. This lets a reviewer inspect the actual silhouette without confusing a diagnostic tint with a proposed palette.&lt;/p&gt;

&lt;p&gt;Use a readable label such as Added, Removed, or Changed, and consider distinct outline or hatch treatments. Review essential marks against adjacent colors using &lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/non-text-contrast.html" rel="noopener noreferrer"&gt;non-text contrast guidance&lt;/a&gt;. Decorative highlights and essential indicators have different responsibilities.&lt;/p&gt;

&lt;p&gt;Keep selected-frame state visually separate from change type. A selection border should not make a removed region look approved or a changed region look like an error.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: red armor in a red deletion overlay
&lt;/h2&gt;

&lt;p&gt;A character wears dark red shoulder armor. A review tool tints removed pixels red and added pixels green. The deletion region becomes hard to see against the armor, while a green weapon glow appears similar to the addition overlay.&lt;/p&gt;

&lt;p&gt;A useful comparison offers an unmarked before/after view, a labeled change list, and annotation marks distinguishable by shape or pattern. The reviewer can identify a removed shoulder pixel without knowing whether its tint is red.&lt;/p&gt;

&lt;p&gt;If the tool can only generate a color heatmap, accompany it with specific frame coordinates and a textual description. Do not claim that a grayscale screenshot alone establishes usability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review the task, not merely the legend
&lt;/h2&gt;

&lt;p&gt;Ask a reviewer to locate a described removal, identify the candidate frame, and state whether the change is intentional. Record where the annotation causes confusion. This is a proposed task check, not a completed participant study.&lt;/p&gt;

&lt;p&gt;Microsoft's &lt;a href="https://learn.microsoft.com/en-us/xbox/accessibility/xbox-accessibility-guidelines/103" rel="noopener noreferrer"&gt;additional-cue guidance&lt;/a&gt; provides broader context for redundant communication in game interfaces. Apply that principle to the review workflow without presenting it as certification of the exported game.&lt;/p&gt;

&lt;p&gt;Accept the comparison when the intended states remain understandable, unmarked art is available, and comments identify the correct revision. Changing review annotations should not alter production pixels.&lt;/p&gt;

&lt;p&gt;This procedure concerns an art-review interface. It does not redesign the game's item-rarity system or prove accessibility through a single simulated view. No review tool or participant test was executed here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related workflow
&lt;/h2&gt;

&lt;p&gt;See &lt;a href="https://www.framesprite.com/guides/game-item-rarity-icons-without-color-only" rel="noopener noreferrer"&gt;game item rarity icons without color only&lt;/a&gt; for the adjacent decision. Keep the &lt;a href="https://www.framesprite.com/guides/sprite-animation-handoff-checklist" rel="noopener noreferrer"&gt;animation handoff checklist&lt;/a&gt; with the deliverable and preserve the &lt;a href="https://www.framesprite.com/guides/ai-game-asset-style-guide-reference-board" rel="noopener noreferrer"&gt;art reference board&lt;/a&gt; for visual intent.&lt;/p&gt;

&lt;p&gt;Prepared by the &lt;a href="https://www.framesprite.com/about#workflow-team" rel="noopener noreferrer"&gt;FrameSprite Workflow Team&lt;/a&gt;. &lt;a href="https://www.framesprite.com/about" rel="noopener noreferrer"&gt;Editorial method&lt;/a&gt; · &lt;a href="https://www.framesprite.com/contact" rel="noopener noreferrer"&gt;Corrections&lt;/a&gt;. Primary documentation checked 2026-10-20.&lt;/p&gt;

</description>
      <category>design</category>
      <category>gamedev</category>
      <category>ux</category>
    </item>
    <item>
      <title>Why does the same art release tag produce different sprite files?</title>
      <dc:creator>FrameSprite</dc:creator>
      <pubDate>Wed, 21 Oct 2026 10:33:39 +0000</pubDate>
      <link>https://dev.to/framesprite-team/why-does-the-same-art-release-tag-produce-different-sprite-files-odi</link>
      <guid>https://dev.to/framesprite-team/why-does-the-same-art-release-tag-produce-different-sprite-files-odi</guid>
      <description>&lt;p&gt;Disclosure: This draft was generated with AI and checked against the cited primary sources, with a separate AI editorial review. It was prepared for the FrameSprite team, which has a commercial interest in FrameSprite. Proposed examples are not executed tests unless explicitly identified as recorded fixture results.&lt;/p&gt;

&lt;p&gt;Record the resolved commit identifier with an art release tag. A tag is a convenient name, but a name alone is not a durable identity guarantee. If someone moves that name, recipients can build different sprite packages while both believe they used the same release.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store the tag name and resolved object identity together.&lt;/li&gt;
&lt;li&gt;Publish a new revision when accepted delivery files change.&lt;/li&gt;
&lt;li&gt;Distinguish signing, access control, and immutability.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A release label is not the texture itself
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://git-scm.com/docs/git-tag" rel="noopener noreferrer"&gt;Git tag manual&lt;/a&gt; distinguishes tag forms and documents replacing existing tags. A signed tag can help validate the signed object, but signing does not mean that every hosting platform will prevent future movement of a similarly named reference.&lt;/p&gt;

&lt;p&gt;Treat &lt;code&gt;characters-v1&lt;/code&gt; as a human label and the resolved commit as the source revision. Keep the exported package's identity separate because build tools, export settings, or dependencies can change the package even when source art looks the same.&lt;/p&gt;

&lt;p&gt;This distinction matters when a contractor, build server, and programmer download at different times. A conversation saying “use v1” gives them no way to resolve a disagreement about which pixels were approved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Publish a revision record
&lt;/h2&gt;

&lt;p&gt;For each delivery, record the release label, source commit, export tool version, export command or preset, package filename, and verification method. Include any external inputs needed to reproduce the output. Do not put credentials or private source references into a public record.&lt;/p&gt;

&lt;p&gt;Compare the intended source and delivery changes using the &lt;a href="https://git-scm.com/docs/git-diff" rel="noopener noreferrer"&gt;Git diff documentation&lt;/a&gt;. An unchanged atlas path does not mean the atlas is unchanged. Review texture bytes and decoded pixels according to the question being asked.&lt;/p&gt;

&lt;p&gt;When approved art changes, prefer a new release identifier with a short explanation. Keep the earlier delivery available according to the project's retention policy. This lets a recipient reproduce an old build without interpreting a mutable “latest” link.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: the corrected walk cycle
&lt;/h2&gt;

&lt;p&gt;A team releases &lt;code&gt;ranger-art-1.0&lt;/code&gt; with a walk cycle. Later, an artist replaces a foot pose and moves the tag to the new commit. A programmer who already fetched the original and a CI runner fetching today can now disagree about the same tag.&lt;/p&gt;

&lt;p&gt;A clearer handover is &lt;code&gt;ranger-art-1.0.1&lt;/code&gt;, linked to its own source commit and package. State that the right-foot contact pose changed, list affected actions, and identify whether the original release is still suitable for existing scenes. Do not silently replace a delivery used by a released game.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify at the recipient boundary
&lt;/h2&gt;

&lt;p&gt;Test a new checkout or download using the recorded revision. Verify its package contents and review the relevant sequence. If a merge introduced changes after tagging, the tag must identify the revision intended for delivery, not just a nearby artist commit. The &lt;a href="https://git-scm.com/docs/git-merge" rel="noopener noreferrer"&gt;merge documentation&lt;/a&gt; describes that history operation; visual approval still belongs to the delivered content.&lt;/p&gt;

&lt;p&gt;Accept the release when a recipient can identify both the approved source revision and the exact package. If the hosting service supports immutable releases, verify its settings separately. This guide proposes a traceability procedure and does not report a tested release pipeline or guarantee byte-for-byte reproducible builds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continue the workflow
&lt;/h2&gt;

&lt;p&gt;Use the &lt;a href="https://www.framesprite.com/guides/sprite-asset-version-manifest-cache-handoff" rel="noopener noreferrer"&gt;How do I prove a sprite manifest and texture belong to the same revision?&lt;/a&gt; for the neighboring problem. Keep the &lt;a href="https://www.framesprite.com/guides/sprite-animation-handoff-checklist" rel="noopener noreferrer"&gt;animation handoff checklist&lt;/a&gt; with the delivered package, and preserve its visual decisions in the &lt;a href="https://www.framesprite.com/guides/ai-game-asset-style-guide-reference-board" rel="noopener noreferrer"&gt;game-art reference board&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and editorial responsibility
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-tag" rel="noopener noreferrer"&gt;Primary documentation 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-diff" rel="noopener noreferrer"&gt;Primary documentation 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-merge" rel="noopener noreferrer"&gt;Primary documentation 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prepared by the &lt;a href="https://www.framesprite.com/about#workflow-team" rel="noopener noreferrer"&gt;FrameSprite Workflow Team&lt;/a&gt;. See the &lt;a href="https://www.framesprite.com/about" rel="noopener noreferrer"&gt;editorial method&lt;/a&gt; or &lt;a href="https://www.framesprite.com/contact" rel="noopener noreferrer"&gt;contact the team&lt;/a&gt; with a reproducible correction. Sources checked 2026-10-20.&lt;/p&gt;

</description>
      <category>git</category>
      <category>softwaredevelopment</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Why can a sprite PNG change bytes during Git checkout?</title>
      <dc:creator>FrameSprite</dc:creator>
      <pubDate>Wed, 21 Oct 2026 10:33:19 +0000</pubDate>
      <link>https://dev.to/framesprite-team/why-can-a-sprite-png-change-bytes-during-git-checkout-4dgg</link>
      <guid>https://dev.to/framesprite-team/why-can-a-sprite-png-change-bytes-during-git-checkout-4dgg</guid>
      <description>&lt;p&gt;Disclosure: This draft was generated with AI and checked against the cited primary sources, with a separate AI editorial review. It was prepared for the FrameSprite team, which has a commercial interest in FrameSprite. Proposed examples are not executed tests unless explicitly identified as recorded fixture results.&lt;/p&gt;

&lt;p&gt;Inspect the Git attributes and filters applied to the sprite before blaming the PNG exporter. A broad text rule or a custom clean/smudge filter can transform repository content. Classify raster files deliberately and verify the path-specific rules that actually win.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check attributes on the affected path, including inherited rules.&lt;/li&gt;
&lt;li&gt;Distinguish stored content, checkout content, and decoded pixels.&lt;/li&gt;
&lt;li&gt;Change conversion policy through a reviewed migration.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A repository can transform files
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://git-scm.com/docs/gitattributes" rel="noopener noreferrer"&gt;Git attributes reference&lt;/a&gt; documents text conversion, binary handling, and filters. A rule intended for source code can be too broad for a folder containing generated PNGs. A filter can also transform content even when ordinary line-ending conversion is not the problem.&lt;/p&gt;

&lt;p&gt;Begin by preserving a known export outside the investigation. Record whether the file opens correctly before staging, from the committed revision, and after a new checkout. These observations locate the boundary where behavior changes without assuming that every byte difference is corruption.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspect the effective policy
&lt;/h2&gt;

&lt;p&gt;Review the repository's attribute files and any configured filters that apply to the path. Do not inspect only the top-level file when a nested directory supplies another rule. Ask the repository maintainer to explain custom transformations rather than disabling them blindly.&lt;/p&gt;

&lt;p&gt;Use the &lt;a href="https://git-scm.com/docs/git-ls-files" rel="noopener noreferrer"&gt;Git ls-files reference&lt;/a&gt; to inspect tracked paths and relevant index information. Keep the original export and any transformed version separate. A viewer failure after checkout is useful evidence, but it does not identify the responsible rule by itself.&lt;/p&gt;

&lt;p&gt;For an ordinary PNG path, the team may choose explicit binary treatment. If the repository already uses LFS or another required filter, preserve that policy while fixing the inappropriate text rule. Do not copy a generic attribute snippet over an existing asset workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: a shared generated folder
&lt;/h2&gt;

&lt;p&gt;A project places generated JSON and character PNGs under one folder. An overbroad rule treats everything there as text. The artist's original PNG is valid, but the repository path is subject to a transformation intended for machine-readable files.&lt;/p&gt;

&lt;p&gt;Split the policy by actual file type or a narrower directory. Review existing affected files before applying renormalization. A normalization command can stage many files, so plan and inspect its impact rather than running it as a casual repair.&lt;/p&gt;

&lt;p&gt;Preserve the approved encoded PNG where no conversion is intended. For formats that legitimately change metadata, compare bytes and decoded pixels according to the question being asked. A file can be different without a visible change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify the correction through checkout
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://git-scm.com/docs/git-diff" rel="noopener noreferrer"&gt;Git diff manual&lt;/a&gt; supports inspecting changes, but a binary-difference summary is not an image validation. Obtain the candidate through a fresh checkout using the corrected policy, decode it, and compare the relevant frames with the approved export.&lt;/p&gt;

&lt;p&gt;Accept the fix after the repository policy is documented, the intended asset remains readable through the actual transfer path, and unrelated files have not changed accidentally. Keep a before-and-after record of effective attributes.&lt;/p&gt;

&lt;p&gt;This procedure follows documented Git mechanisms. No corrupted file or filter configuration was executed here. A successful local decode also does not prove that every collaborator's filter configuration matches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related workflow
&lt;/h2&gt;

&lt;p&gt;For the neighboring problem, see &lt;a href="https://www.framesprite.com/guides/sprite-png-file-hash-versus-decoded-pixel-identity" rel="noopener noreferrer"&gt;sprite png file hash versus decoded pixel identity&lt;/a&gt;. Keep the &lt;a href="https://www.framesprite.com/guides/sprite-animation-handoff-checklist" rel="noopener noreferrer"&gt;animation handoff checklist&lt;/a&gt; with the delivery, and retain approved visual decisions in the &lt;a href="https://www.framesprite.com/guides/ai-game-asset-style-guide-reference-board" rel="noopener noreferrer"&gt;art reference board&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Prepared by the &lt;a href="https://www.framesprite.com/about#workflow-team" rel="noopener noreferrer"&gt;FrameSprite Workflow Team&lt;/a&gt;. &lt;a href="https://www.framesprite.com/about" rel="noopener noreferrer"&gt;Editorial method&lt;/a&gt; · &lt;a href="https://www.framesprite.com/contact" rel="noopener noreferrer"&gt;Corrections&lt;/a&gt;. Primary documentation checked 2026-10-20.&lt;/p&gt;

</description>
      <category>git</category>
      <category>softwaredevelopment</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Why does a custom enemy color also recolor poison and selection cues?</title>
      <dc:creator>FrameSprite</dc:creator>
      <pubDate>Wed, 21 Oct 2026 10:33:01 +0000</pubDate>
      <link>https://dev.to/framesprite-team/why-does-a-custom-enemy-color-also-recolor-poison-and-selection-cues-1bao</link>
      <guid>https://dev.to/framesprite-team/why-does-a-custom-enemy-color-also-recolor-poison-and-selection-cues-1bao</guid>
      <description>&lt;p&gt;Disclosure: This draft was generated with AI and checked against the cited primary sources, with a separate AI editorial review. It was prepared for the FrameSprite team, which has a commercial interest in FrameSprite. Proposed examples are not executed tests unless explicitly identified as recorded fixture results.&lt;/p&gt;

&lt;p&gt;Map player-selected colors to semantic roles rather than replacing every matching RGB value. Enemy identity, poison, selection, and decorative highlights can share a source color while representing different information. A global recolor operation can change all of them unintentionally.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name the role being customized.&lt;/li&gt;
&lt;li&gt;Keep unrelated status and interaction cues separate.&lt;/li&gt;
&lt;li&gt;Review user-selected combinations, not just default presets.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Shared pixels do not imply shared meaning
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html" rel="noopener noreferrer"&gt;W3C use-of-color guidance&lt;/a&gt; addresses information conveyed through color. Changing a color does not automatically preserve that information, especially when the same replacement affects unrelated meanings.&lt;/p&gt;

&lt;p&gt;Microsoft's &lt;a href="https://learn.microsoft.com/en-us/xbox/accessibility/xbox-accessibility-guidelines/103" rel="noopener noreferrer"&gt;additional-cue guidance&lt;/a&gt; discusses color perception and player options. Treat custom colors as part of an information design, not a filter that can be declared universally successful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define a semantic mapping
&lt;/h2&gt;

&lt;p&gt;Create separate roles such as enemy indicator, poison status, current selection, and decorative accent. Map a user preference to the intended role. Keep the palette representation and rendering implementation behind that contract.&lt;/p&gt;

&lt;p&gt;In a browser interface, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Cascading_variables/Using_custom_properties" rel="noopener noreferrer"&gt;CSS custom properties&lt;/a&gt; can provide named values with deliberate scope. A native engine can use its own mechanism. Neither approach should infer semantic roles by searching the final flattened PNG for a particular RGB value.&lt;/p&gt;

&lt;p&gt;For artwork that bakes multiple roles into one image, decide whether separate masks, layers, or regenerated variants are needed. Do not claim a generic color-replacement function can reconstruct information that the asset no longer distinguishes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: the purple preference
&lt;/h2&gt;

&lt;p&gt;A player changes enemy markers from red to purple. The implementation replaces every red pixel in a shared interface atlas. A red poison warning and a selection highlight also become purple, making three different states look related.&lt;/p&gt;

&lt;p&gt;A role-based map changes only the enemy indicator. Poison retains its own label and symbol, while selection retains its interaction cue. If the player's chosen colors make these roles difficult to distinguish, keep additional visible cues and consider configurable alternatives.&lt;/p&gt;

&lt;p&gt;The example describes an implementation risk, not observed behavior in a tested game. Exact colors and roles should come from the project's real interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review saved and dynamic states
&lt;/h2&gt;

&lt;p&gt;Proposed checks include changing the preference while a menu is open, loading a saved setting, spawning new enemies, showing poison and selection together, and returning to default. Verify that later-created elements use the current mapping.&lt;/p&gt;

&lt;p&gt;Do not use a color-vision simulation as the only acceptance evidence. Review the actual task with relevant players where possible, and record what was tested. A readable legend cannot repair every in-scene ambiguity by itself.&lt;/p&gt;

&lt;p&gt;Accept the feature when each supported preference changes the intended role, unrelated meanings remain intact, and redundant cues are still available. No palette-remapping code, shader, browser implementation, or participant study was run here. This is separate from generating palette-swapped enemy artwork; it concerns user preference semantics across the live interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related workflow
&lt;/h2&gt;

&lt;p&gt;See &lt;a href="https://www.framesprite.com/guides/enemy-sprite-palette-swap-variants" rel="noopener noreferrer"&gt;enemy sprite palette swap variants&lt;/a&gt; for the adjacent task. Carry the &lt;a href="https://www.framesprite.com/guides/sprite-animation-handoff-checklist" rel="noopener noreferrer"&gt;animation handoff checklist&lt;/a&gt; with the release, and use the &lt;a href="https://www.framesprite.com/guides/ai-game-asset-style-guide-reference-board" rel="noopener noreferrer"&gt;art reference board&lt;/a&gt; to retain visual intent.&lt;/p&gt;

&lt;p&gt;Prepared by the &lt;a href="https://www.framesprite.com/about#workflow-team" rel="noopener noreferrer"&gt;FrameSprite Workflow Team&lt;/a&gt;. &lt;a href="https://www.framesprite.com/about" rel="noopener noreferrer"&gt;Editorial method&lt;/a&gt; · &lt;a href="https://www.framesprite.com/contact" rel="noopener noreferrer"&gt;Corrections&lt;/a&gt;. Primary documentation checked 2026-10-20.&lt;/p&gt;

</description>
      <category>design</category>
      <category>gamedev</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Why do linked sprite masters vanish when I send the project folder?</title>
      <dc:creator>FrameSprite</dc:creator>
      <pubDate>Wed, 21 Oct 2026 10:32:39 +0000</pubDate>
      <link>https://dev.to/framesprite-team/why-do-linked-sprite-masters-vanish-when-i-send-the-project-folder-4l5j</link>
      <guid>https://dev.to/framesprite-team/why-do-linked-sprite-masters-vanish-when-i-send-the-project-folder-4l5j</guid>
      <description>&lt;p&gt;Disclosure: This draft was generated with AI and checked against the cited primary sources, with a separate AI editorial review. It was prepared for the FrameSprite team, which has a commercial interest in FrameSprite. Proposed examples are not executed tests unless explicitly identified as recorded fixture results.&lt;/p&gt;

&lt;p&gt;Check whether every linked source resolves inside the handoff boundary before sending an art folder. A symbolic link can make a local project appear self-contained while its actual sprite master lives elsewhere. Decide explicitly whether the recipient receives materialized files or a documented link structure.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inspect resolved targets, not just visible folder entries.&lt;/li&gt;
&lt;li&gt;Separate a portable release copy from the editable working tree.&lt;/li&gt;
&lt;li&gt;Verify the recipient can open assets without the original machine.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The visible file tree can omit the real dependency
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.python.org/3/library/os.path.html" rel="noopener noreferrer"&gt;Python path documentation&lt;/a&gt; distinguishes operations such as resolving a real path from ordinary string normalization. A normalized-looking relative path does not prove the target belongs to the package.&lt;/p&gt;

&lt;p&gt;Artists may use links to share a master across several action folders. That can be useful locally, but packaging the link does not necessarily include its target. Archive tools and recipient systems can preserve, follow, ignore, or otherwise handle links differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose one delivery policy
&lt;/h2&gt;

&lt;p&gt;For a portable sprite export, materializing the required output files into a separate release directory is often the simplest contract. Keep editable-source links in the working project, and copy only the approved deliverables into the release boundary.&lt;/p&gt;

&lt;p&gt;If links must be preserved, document supported environments and target structure. Make sure the recipient is expected to understand that format. Do not let a general-purpose ZIP silently choose the policy on behalf of the team.&lt;/p&gt;

&lt;p&gt;Inspect how the project records relevant paths with &lt;a href="https://git-scm.com/docs/git-add" rel="noopener noreferrer"&gt;Git add&lt;/a&gt;, and inspect the chosen archive interface through the &lt;a href="https://docs.python.org/3/library/zipfile.html" rel="noopener noreferrer"&gt;ZIP documentation&lt;/a&gt;. Neither a committed path nor an archive member proves the target content traveled with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: a shared character master
&lt;/h2&gt;

&lt;p&gt;Three action directories refer to a shared master outside the folder being sent. On the artist's machine, opening any action finds that master. The contractor receives the action folders but not the external location, so the project opens with missing source art.&lt;/p&gt;

&lt;p&gt;Build a release copy from the approved revision. Materialize the required master if the source-delivery agreement includes it, or include only runtime exports if that is the agreed boundary. Update any included example project to use the delivered layout.&lt;/p&gt;

&lt;p&gt;Do not repair the artist's working links merely to make a one-time archive. That can disrupt other projects. Work in a separate destination and preserve the original structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify closure rather than appearance
&lt;/h2&gt;

&lt;p&gt;The proposed acceptance check is to open the release on a machine or environment that lacks the original external paths. Resolve every included reference and verify its actual target is available within the declared dependency set.&lt;/p&gt;

&lt;p&gt;Record intentional external dependencies separately, including access requirements and versions. If a private reference cannot travel, state whether it is needed to rebuild or only explains the original design.&lt;/p&gt;

&lt;p&gt;This guide proposes a path-closure audit and does not report a tested archive. It also does not guarantee every platform supports symbolic links the same way. The delivery policy must identify the actual recipient environment and tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related workflow
&lt;/h2&gt;

&lt;p&gt;See &lt;a href="https://www.framesprite.com/guides/game-asset-pack-source-export-preview-folders" rel="noopener noreferrer"&gt;game asset pack source export preview folders&lt;/a&gt; for the adjacent failure. Keep the &lt;a href="https://www.framesprite.com/guides/sprite-animation-handoff-checklist" rel="noopener noreferrer"&gt;animation handoff checklist&lt;/a&gt; with the package and record visual decisions in the &lt;a href="https://www.framesprite.com/guides/ai-game-asset-style-guide-reference-board" rel="noopener noreferrer"&gt;art reference board&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Prepared by the &lt;a href="https://www.framesprite.com/about#workflow-team" rel="noopener noreferrer"&gt;FrameSprite Workflow Team&lt;/a&gt;. &lt;a href="https://www.framesprite.com/about" rel="noopener noreferrer"&gt;Editorial method&lt;/a&gt; · &lt;a href="https://www.framesprite.com/contact" rel="noopener noreferrer"&gt;Corrections&lt;/a&gt;. Primary documentation checked 2026-10-20.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
