<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Tsubu Blog</title>
    <link>https://tsubu.art/blog</link>
    <description>Pixel-art tips, sprite workflows and product updates from Tsubu — the free web-based pixel art studio for indie game developers.</description>
    <language>en</language>
    <atom:link href="https://tsubu.art/blog/rss.xml" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Thu, 23 Jul 2026 19:08:27 GMT</lastBuildDate>
    <item>
      <title>How to make a sprite sheet: from your first frame to an engine-ready atlas</title>
      <link>https://tsubu.art/blog/how-to-make-a-sprite-sheet</link>
      <guid isPermaLink="true">https://tsubu.art/blog/how-to-make-a-sprite-sheet</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>A hands-on guide to making a sprite sheet in your browser — draw or generate your frames, animate them on a timeline, and export a packed PNG plus a JSON atlas that drops straight into Unity, Godot, Phaser or Pixi.</description>
      <category>sprite-sheets</category>
      <category>pixel-art</category>
      <category>indie-gamedev</category>
      <category>tutorial</category>
      <content:encoded><![CDATA[<p>A walking character, a spinning coin, an idle flame — in a 2D game, that motion is almost always a <strong>sprite sheet</strong>: one image holding every frame of an animation, side by side, plus a little metadata that tells your engine where each frame lives. This is a practical, do-it-with-me guide. By the end you&#39;ll have gone from a single frame to a packed sheet and a JSON atlas your engine can slice, and you&#39;ll have done it entirely in the browser with <a href="/login?utm_source=blog&utm_medium=organic&utm_campaign=how-to-make-a-sprite-sheet">Tsubu</a>.</p>
<p><img src="/blog/how-to-make-a-sprite-sheet/cover.png" alt="Pixel-art character progressing from individual frames to a completed sprite sheet"></p>
<h2>What a sprite sheet actually is</h2>
<p>A sprite sheet is two things travelling together:</p>
<ul>
<li><strong>The sheet</strong> — a single PNG that packs each animation frame into its own cell. Loading one texture is faster and tidier than loading twenty loose files.</li>
<li><strong>The atlas (the metadata)</strong> — a small file, usually JSON, that records the rectangle for every frame (<code>x</code>, <code>y</code>, <code>width</code>, <code>height</code>) and often its display duration. Your engine reads the atlas to know where frame 3 of the walk cycle sits, without you eyeballing pixel coordinates.</li>
</ul>
<p>The frames themselves are just the poses of your animation in order: a six-frame walk cycle is six drawings of the same character, each a step further into the stride. Get those frames right, keep them the same size, and packing them is the easy part.</p>
<h2>What you&#39;ll need</h2>
<p>Just a browser. Tsubu runs entirely in the browser — no install, no download. Sign in with Google and your library is there on any machine. It&#39;s free for early adopters while we&#39;re in early access, with AI usage sponsored by the platform and no credit cap — so you can follow this whole tutorial without spending anything.</p>
<h2>Step 1 — Get your frames</h2>
<p>There are two honest ways to start. Pick whichever fits how you work; you can mix them freely.</p>
<h3>Draw them by hand (the blank-canvas start)</h3>
<p>Open the editor and start a new sprite at a real pixel size — <strong>16×16</strong> for a small character or UI icon, <strong>32×32</strong> when you want more room for detail. Whatever you choose, every frame in the animation has to share that exact size, so the engine can slice the finished sheet on a fixed grid.</p>
<p>Draw your first pose with the pencil, lean on a small palette so the whole cycle stays consistent, and keep the background transparent. Then build the cycle frame by frame: duplicate the frame you just drew, nudge the arm, shift the legs, and repeat. Four frames read as a walk; six or eight read as a smooth one.</p>
<h3>Or start from an AI first pass (optional)</h3>
<p>Sometimes you just need a starting grain, fast. Describe what you want — <em>&quot;a small green forest adventurer facing right&quot;</em> — and Tsubu drafts a finished sprite with the discipline real pixel art needs: a readable silhouette, a limited palette, clean edges and a transparent background, aligned to the grid rather than a blurry, downscaled photo.</p>
<p><img src="/blog/how-to-make-a-sprite-sheet/tutorial-sprite.png" alt="A small pixel-art game character generated in Tsubu"></p>
<p>Here&#39;s the part that matters for a tutorial like this: the draft comes back as <strong>real, editable pixels on the grid</strong>, not a flattened picture. It&#39;s a first pass, not a finished asset. AI is opt-in, it drafts and you refine, and because you keep every pixel it&#39;s yours to edit and honest to disclose — worth being transparent about where your frames come from, especially in a scene that cares. Below is that generated sprite imported into the Tsubu editor as a single 32×32 frame: the pixel grid, the tool rail, a constrained palette, and the animation timeline previewing at 12 FPS, all ready for you to refine the pose and add the rest of the cycle.</p>
<p><img src="/blog/how-to-make-a-sprite-sheet/editor-workflow.png" alt="Tsubu editor with a generated sprite on the canvas and animation timeline visible"></p>
<p>Already sitting on a finished GIF or an old PNG sheet from another tool? You can import it instead: bring the file in, tell Tsubu the frame size, and it lands as an editable animation on the timeline — the same starting point as the two paths above.</p>
<h2>Step 2 — Animate on the timeline</h2>
<p>However your frames got here, they now live on a filmstrip timeline. Reorder them, duplicate the ones you want to hold longer, and scrub the loop. Set the playback speed to taste — <strong>8 to 12 FPS</strong> is the classic range for a walk; idles sit slower, attacks run faster. Every frame stays plain, editable pixels the whole time, so fixing a stray pixel on frame 4 is one click away. When the loop reads right in preview, it&#39;ll read right in your game.</p>
<h2>Step 3 — Pack it into a sheet + atlas</h2>
<p>This is the payoff. Export the animation and Tsubu packs every frame into a single PNG and writes a <strong>JSON atlas</strong> alongside it, in the familiar Aseprite / TexturePacker shape — frame rectangles, durations and sheet metadata included. An entry looks like this:</p>
<pre><code class="language-json">{
  &quot;frames&quot;: {
    &quot;walk_0&quot;: {
      &quot;frame&quot;: { &quot;x&quot;: 0, &quot;y&quot;: 0, &quot;w&quot;: 32, &quot;h&quot;: 32 },
      &quot;duration&quot;: 100
    },
    &quot;walk_1&quot;: {
      &quot;frame&quot;: { &quot;x&quot;: 32, &quot;y&quot;: 0, &quot;w&quot;: 32, &quot;h&quot;: 32 },
      &quot;duration&quot;: 100
    }
  },
  &quot;meta&quot;: { &quot;size&quot;: { &quot;w&quot;: 192, &quot;h&quot;: 32 }, &quot;scale&quot;: &quot;1&quot; }
}
</code></pre>
<p>Because the coordinates live in the atlas, your engine reads exact rectangles instead of guessing a grid. Need a still frame instead? Export a clean PNG scaled 1× to 8× with transparency preserved. Need a quick share for a devlog? One-click animated GIF.</p>
<p>If you already have your frames prepared and only want the packing step — drop files in, preview, download the sheet and atlas — that job has its own home: our <a href="/sprite-sheet-maker">sprite sheet maker</a> does exactly that, and this tutorial&#39;s editor workflow feeds straight into it.</p>
<h2>Padding, frame size and the questions people ask</h2>
<p>A few things that trip people up the first time:</p>
<ul>
<li><strong>What frame size should I use?</strong> Keep it uniform. 16×16 and 32×32 are the common pixel-character sizes; every frame in one sheet must match so the grid stays honest. Different animations can use different sizes — just keep each sheet internally consistent.</li>
<li><strong>Do I need padding between frames?</strong> For pixel art rendered at integer scales with nearest-neighbour (point) filtering, tight packing is usually fine. A 1–2 px gap or edge extrusion helps prevent neighbouring frames bleeding in when a frame is drawn at a non-integer scale. Since the atlas stores exact rectangles, your engine samples the right pixels either way.</li>
<li><strong>Does the sheet need to be a power of two?</strong> Modern engines don&#39;t require it. Power-of-two dimensions are a harmless old habit for maximum GPU compatibility, not a rule you have to follow.</li>
<li><strong>What&#39;s in the metadata?</strong> Per frame: its rectangle and duration. Per sheet: the overall size (and scale). That&#39;s what lets an importer rebuild the animation exactly, in order and at the right speed.</li>
</ul>
<h2>Drop it into your engine</h2>
<p>The sheet and atlas are engine-ready. Concisely, per engine:</p>
<ul>
<li><strong>Unity</strong> — import the PNG and slice it in the Sprite Editor (uniform grid or from the atlas rects).</li>
<li><strong>Godot</strong> — load the sheet and read the frames into a <code>SpriteFrames</code> / <code>AnimatedSprite2D</code>. We go deeper on this — H/V frames, <code>SpriteFrames</code> and <code>AnimationPlayer</code> — in <a href="/pixel-art-for-godot">making sprite sheets for Godot</a>.</li>
<li><strong>Phaser</strong> — feed the atlas JSON directly to the loader and play by frame names.</li>
<li><strong>Pixi</strong> — hand the atlas to the loader and pull textures by frame key.</li>
</ul>
<p>For the fuller picture across engines — canvas sizes, grid-true export and import guidance — see <a href="/pixel-art-for-games">making pixel art for your game engine</a>. None of this replaces your engine&#39;s own import step; the point is that Tsubu hands off a sheet and atlas that fit the shapes these engines already understand.</p>
<h2>Make your first sheet</h2>
<p>That&#39;s the whole loop: draw or generate your frames, animate them on the timeline, and export a packed sheet plus a JSON atlas that slots into your project. The fastest way to learn it is to make one.</p>
<p><a href="/login?utm_source=blog&utm_medium=organic&utm_campaign=how-to-make-a-sprite-sheet">Open the editor and build your first sprite sheet</a> — it&#39;s free while we&#39;re in early access. Prefer to follow along by email? New workflow guides land on the <a href="/blog/rss.xml">RSS feed</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Introducing Tsubu: pixel art from a single grain to your game engine</title>
      <link>https://tsubu.art/blog/introducing-tsubu</link>
      <guid isPermaLink="true">https://tsubu.art/blog/introducing-tsubu</guid>
      <pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate>
      <description>Tsubu is a free, browser-based pixel art studio built for indie game developers — draw and animate sprites, generate them with AI, and export a game-ready sprite sheet that drops straight into Unity, Godot, Phaser or Pixi.</description>
      <category>introducing-tsubu</category>
      <category>pixel-art</category>
      <category>indie-gamedev</category>
      <category>sprite-sheets</category>
      <content:encoded><![CDATA[<p>Tsubu (粒) means <em>grain</em> — and every sprite you have ever loved started as a single one. A lit window. A health pip. The first pixel of a character who would go on to carry a whole game. Tsubu is a free, browser-based pixel art studio built around that idea: start with one grain, and end with art your game engine can actually use.</p>
<p>If you make games, you know the gap that usually sits in the middle. You draw in one tool, wrangle frames in another, hand-pack a sprite sheet, hand-write an atlas, and pray the coordinates line up. Tsubu closes that gap. It is one place to draw, animate, generate, and export — no install, nothing to lose, and free while we&#39;re in early access.</p>
<h2>Made for the person shipping the game</h2>
<p>Tsubu is not a toy pixel painter. It is a keyboard-first editor with the tools you reach for a hundred times a day — pencil, eraser, fill, eyedropper, select &amp; move — plus a real palette workflow so a whole tileset or character roster stays consistent. Grids go up to 256×256, square or not, because your UI icons and your boss sprites don&#39;t live at the same size.</p>
<p>Everything is saved to the cloud and reachable from any browser. Start a walk cycle on the studio desktop; fix a stray pixel from a laptop on the train. Sign in with Google and your library is just there.</p>
<h2>From a text prompt to editable pixels</h2>
<p>Sometimes you need a first pass, fast. Describe what you want — <em>&quot;a tiny knight with a red cape&quot;</em>, <em>&quot;a 16×16 potion bottle&quot;</em> — and Tsubu&#39;s AI drafts a finished sprite in the proportions and palette discipline of real pixel art. Readable silhouettes, limited palettes, clean outlines. Not a noisy, downscaled photo.</p>
<p>The important part: what you get back is <strong>real pixel data on your canvas</strong>, not a flattened image. Every cell is editable. Recolor the cape, fix an outline, redraw a limb. The AI gives you a strong starting grain; you grow the sprite from there.</p>
<h2>Animation that stays honest</h2>
<p>Build walk cycles, idle bobs and attacks on a filmstrip timeline. Duplicate and reorder frames, preview the loop at your chosen FPS, and keep every frame as plain, editable pixels — never baked, never locked.</p>
<h2>The part that usually hurts: export</h2>
<p>This is where Tsubu earns its place in your pipeline. Export an animation as a single packed PNG plus a <strong>JSON atlas</strong> in the familiar Aseprite / TexturePacker shape — frame rects, durations and metadata included. It drops straight into the engines you already use:</p>
<ul>
<li><strong>Unity</strong> — slice it in the Sprite Editor</li>
<li><strong>Godot</strong> — load the sheet and atlas</li>
<li><strong>Phaser</strong> and <strong>PixiJS</strong> — feed the atlas directly</li>
</ul>
<p>Need a still? Export a clean, scaled PNG (1×–8×) with transparency preserved. Need a quick share? Animated GIF, one click.</p>
<h2>Free while we&#39;re in early access</h2>
<p>The whole studio — editor, animation, AI generation and export — is free for early adopters for a limited time, with usage sponsored by the platform. No credit card. No catch. Try it on your current game jam; it costs nothing but the time to draw your first grain.</p>
<p><a href="/login">Start now — it&#39;s free</a>, or read more about <a href="/ai-pixel-art-generator">generating pixel art with AI</a> and <a href="/pixel-art-for-games">making sprites for your game engine</a>.</p>
<p>We&#39;re building Tsubu in the open, and this blog is where the workflow tips, sprite breakdowns and product updates will land. Subscribe to the <a href="/blog/rss.xml">RSS feed</a> and start with a single grain.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
