<?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: Nguyen Duc Canh</title>
    <description>The latest articles on DEV Community by Nguyen Duc Canh (@dotlinux26).</description>
    <link>https://dev.to/dotlinux26</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%2Fuser%2Fprofile_image%2F4241691%2Ff9beb5aa-b00d-4980-9d8b-c704362a6285.jpg</url>
      <title>DEV Community: Nguyen Duc Canh</title>
      <link>https://dev.to/dotlinux26</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dotlinux26"/>
    <language>en</language>
    <item>
      <title>Pixel Art Doesn't Have to Be Just a PNG</title>
      <dc:creator>Nguyen Duc Canh</dc:creator>
      <pubDate>Thu, 12 Nov 2026 19:32:27 +0000</pubDate>
      <link>https://dev.to/dotlinux26/pixel-art-doesnt-have-to-be-just-a-png-46no</link>
      <guid>https://dev.to/dotlinux26/pixel-art-doesnt-have-to-be-just-a-png-46no</guid>
      <description>&lt;h1&gt;
  
  
  Pixel Art Doesn't Have to Be Just a PNG
&lt;/h1&gt;

&lt;p&gt;Most pixel art workflows start with an image.&lt;/p&gt;

&lt;p&gt;You open an editor, draw pixels, arrange sprites into a spritesheet, define animation frames, and eventually export a PNG.&lt;/p&gt;

&lt;p&gt;That workflow works. Tools like Aseprite have made traditional pixel-art production remarkably accessible.&lt;/p&gt;

&lt;p&gt;But I've been thinking about a different question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if pixel art could be treated as structured, programmable data instead of just a collection of pixels?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This question became the starting point for &lt;strong&gt;PIX2&lt;/strong&gt; and &lt;strong&gt;NOIRADIX Studio&lt;/strong&gt;, two open-source projects I'm building to explore a different way of creating and managing pixel-art assets.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with treating sprites as only images
&lt;/h2&gt;

&lt;p&gt;A PNG is excellent at representing the final appearance of artwork. It is widely supported, easy to distribute, and understood by practically every game engine.&lt;/p&gt;

&lt;p&gt;However, it does not inherently describe the structure behind the image.&lt;/p&gt;

&lt;p&gt;Consider a character sprite. Its appearance might contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A body&lt;/li&gt;
&lt;li&gt;Eyes and facial details&lt;/li&gt;
&lt;li&gt;Clothing and accessories&lt;/li&gt;
&lt;li&gt;Different visual states&lt;/li&gt;
&lt;li&gt;Multiple animation directions&lt;/li&gt;
&lt;li&gt;A palette shared across several sprites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once everything is flattened into a raster image, the relationships between these elements are no longer explicitly represented in the file.&lt;/p&gt;

&lt;p&gt;This becomes particularly inconvenient when working with programmatic generation, reusable components, version control, or workflows where artwork needs to be inspected and modified by software.&lt;/p&gt;

&lt;p&gt;Git can tell you that a PNG changed. It cannot naturally explain which semantic part of the sprite changed or why.&lt;/p&gt;

&lt;p&gt;I wanted to explore whether a sprite could have something closer to a source file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing PIX2: structured data for pixel art
&lt;/h2&gt;

&lt;p&gt;PIX2 is an open structured language designed to represent pixel-art artwork as editable, machine-readable source.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn2j640l9ragr3smmflq8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn2j640l9ragr3smmflq8.png" alt=" " width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of treating the exported image as the only source of truth, a &lt;code&gt;.pix2&lt;/code&gt; document describes the artwork in a structured format.&lt;/p&gt;

&lt;p&gt;The idea is to make pixel art:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structured:&lt;/strong&gt; Artwork can contain meaningful organizational elements rather than being only a flat raster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diffable:&lt;/strong&gt; Text-based source can be inspected and compared through ordinary version-control workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Programmable:&lt;/strong&gt; Software and external AI assistants can work with the source representation directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic:&lt;/strong&gt; The same valid source, rendering rules, and renderer configuration produce the same rendered output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interoperable:&lt;/strong&gt; The format is designed to support independent tools and implementations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PIX2 also introduces structural concepts such as layers, groups, and regions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb78eirna2qr2rx4q5161.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb78eirna2qr2rx4q5161.png" alt=" " width="390" height="857"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These concepts provide a way to organize artwork beyond individual pixel coordinates.&lt;/p&gt;

&lt;p&gt;The important distinction is that PIX2 is not intended to replace PNG. PNG remains useful as an output format. PIX2 addresses a different layer: how the artwork is represented, edited, and managed before export.&lt;/p&gt;

&lt;h2&gt;
  
  
  NOIRADIX Studio: the visual environment
&lt;/h2&gt;

&lt;p&gt;A structured format needs a practical way to work with it.&lt;/p&gt;

&lt;p&gt;That is why I built &lt;strong&gt;NOIRADIX Studio&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;NOIRADIX Studio is a free, open-source, browser-based pixel-art editor and sprite animation environment built around PIX2.&lt;/p&gt;

&lt;p&gt;It connects structured source authoring with visual editing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6asptj8vtvomtdcdfgj0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6asptj8vtvomtdcdfgj0.png" alt=" " width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The current workflow includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating and editing pixel-art sprites.&lt;/li&gt;
&lt;li&gt;Organizing sprite sheets.&lt;/li&gt;
&lt;li&gt;Building 4-direction and 8-direction animations.&lt;/li&gt;
&lt;li&gt;Working with animation clips and structured artwork.&lt;/li&gt;
&lt;li&gt;Importing existing raster artwork into the workflow.&lt;/li&gt;
&lt;li&gt;Exporting assets for game development.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The editor is built using vanilla JavaScript, without runtime frameworks or external package dependencies.&lt;/p&gt;

&lt;p&gt;It is designed to work offline after the application has been loaded, with local-first workflows and no account requirement.&lt;/p&gt;

&lt;p&gt;I also wanted the project to remain accessible. You should not need to install a large development environment just to experiment with a pixel-art editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting visual editing with programmatic authoring
&lt;/h2&gt;

&lt;p&gt;One interesting possibility of having a text-based source format is that it creates another way to interact with artwork.&lt;/p&gt;

&lt;p&gt;For example, an external AI coding assistant can help author or modify PIX2 source.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9wyybm988y87vpovvhkz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9wyybm988y87vpovvhkz.png" alt=" " width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The resulting document can then be opened in NOIRADIX Studio, rendered, inspected, and refined visually.&lt;/p&gt;

&lt;p&gt;This is not a built-in AI image generator. NOIRADIX does not currently generate artwork by itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fthiwz3yynd11g7pdp62n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fthiwz3yynd11g7pdp62n.png" alt=" " width="800" height="597"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead, the idea is to let AI tools work with a structured representation that humans can still inspect and edit.&lt;/p&gt;

&lt;p&gt;I find this distinction important.&lt;/p&gt;

&lt;p&gt;An AI-generated image can be useful, but a structured document gives developers something more practical to work with: source that can be examined, modified, version-controlled, and processed by software.&lt;/p&gt;

&lt;p&gt;It also means that AI is optional. Artists can create and edit their work entirely through the visual editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  From pixel art to game-ready assets
&lt;/h2&gt;

&lt;p&gt;A pixel-art editor should not stop at producing an image.&lt;/p&gt;

&lt;p&gt;The assets eventually need to enter a game engine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fre8zx13m61ajunopx3vj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fre8zx13m61ajunopx3vj.png" alt=" " width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5raj8omlvhnp7h0xxewa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5raj8omlvhnp7h0xxewa.png" alt=" " width="691" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpppg7mxcyp5jefc5fat1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpppg7mxcyp5jefc5fat1.png" alt=" " width="800" height="738"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3e4x6z7c0oxrofs16ypt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3e4x6z7c0oxrofs16ypt.png" alt=" " width="799" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgjbcqpdgmafxs0ujy5tn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgjbcqpdgmafxs0ujy5tn.png" alt=" " width="799" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NOIRADIX currently supports a Unity export workflow that includes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Exporting the sprite atlas as PNG.&lt;/li&gt;
&lt;li&gt;Exporting the associated metadata.&lt;/li&gt;
&lt;li&gt;Using a custom Unity importer to slice sprites and generate native Unity &lt;code&gt;AnimationClip&lt;/code&gt; assets.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For other 2D development workflows, the project also supports TexturePacker Standard JSON export, targeting tools and engines such as Godot, Phaser, PixiJS, Defold, Raylib, and GameMaker.&lt;/p&gt;

&lt;p&gt;The intention is to reduce the gap between creating artwork and integrating it into an actual game project.&lt;/p&gt;

&lt;h2&gt;
  
  
  An open format matters more than vendor lock-in
&lt;/h2&gt;

&lt;p&gt;I deliberately keep PIX2 separate from the NOIRADIX Studio application.&lt;/p&gt;

&lt;p&gt;The licenses are also separated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NOIRADIX Studio: Apache License 2.0&lt;/li&gt;
&lt;li&gt;PIX2 Language Specification: Creative Commons Attribution 4.0&lt;/li&gt;
&lt;li&gt;PIX2 Reference Engine: Apache License 2.0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I do not want PIX2 to become a format that only one application can understand.&lt;/p&gt;

&lt;p&gt;Other developers should be able to study the specification, build their own implementations, and experiment with their own tooling.&lt;/p&gt;

&lt;p&gt;A format becomes more interesting when it can exist beyond the original application that introduced it.&lt;/p&gt;

&lt;p&gt;NOIRADIX Studio is one way to author and work with PIX2, but it does not need to be the only one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm working on next
&lt;/h2&gt;

&lt;p&gt;There is still a lot to improve.&lt;/p&gt;

&lt;p&gt;I want to continue developing the editing experience, animation workflows, language tooling, documentation, and interoperability.&lt;/p&gt;

&lt;p&gt;I am particularly interested in feedback from game developers, pixel artists, technical artists, and people working on creative developer tools.&lt;/p&gt;

&lt;p&gt;Some questions I'm still exploring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What should a structured pixel-art language expose to developers?&lt;/li&gt;
&lt;li&gt;How should animation data be represented and shared?&lt;/li&gt;
&lt;li&gt;What would make a format practical for independent game engines?&lt;/li&gt;
&lt;li&gt;How can visual editors and programmatic authoring complement each other without making either workflow unnecessarily complicated?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not problems I expect to solve alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it out
&lt;/h2&gt;

&lt;p&gt;Both projects are open source, and the current implementation is available publicly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOIRADIX Studio:&lt;/strong&gt; &lt;a href="https://noiradix.me/" rel="noopener noreferrer"&gt;https://noiradix.me/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub repository:&lt;/strong&gt; &lt;a href="https://github.com/dotlinux26/noiradix-studio" rel="noopener noreferrer"&gt;https://github.com/dotlinux26/noiradix-studio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PIX2 and project documentation:&lt;/strong&gt; Available through the repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Community:&lt;/strong&gt; &lt;a href="https://discord.gg/SJwsdGWubF" rel="noopener noreferrer"&gt;https://discord.gg/SJwsdGWubF&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm building NOIRADIX because I believe pixel art can be more than an image.&lt;/p&gt;

&lt;p&gt;It can also be structured, programmable, version-controlled data that remains accessible to both artists and developers.&lt;/p&gt;

&lt;p&gt;And I think there is room to explore what that could make possible.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>gamedev</category>
      <category>opensource</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
