<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>API Reference on KGP</title><link>https://serenafontaine.github.io/kgp/docs/api/</link><description>Recent content in API Reference on KGP</description><generator>Hugo</generator><language>en</language><atom:link href="https://serenafontaine.github.io/kgp/docs/api/index.xml" rel="self" type="application/rss+xml"/><item><title>Command</title><link>https://serenafontaine.github.io/kgp/docs/api/command/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://serenafontaine.github.io/kgp/docs/api/command/</guid><description>&lt;p&gt;&lt;code&gt;Command&lt;/code&gt; represents a complete Kitty Graphics Protocol command.&lt;/p&gt;
&lt;h2 id="creating-commands"&gt;Creating Commands&lt;/h2&gt;
&lt;p&gt;Commands are created via builders. Do not instantiate &lt;code&gt;Command&lt;/code&gt; directly.&lt;/p&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;cmd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;kgp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewTransmitDisplay&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;kgp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FormatPNG&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;TransmitDirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Returns *Command&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="methods"&gt;Methods&lt;/h2&gt;
&lt;h3 id="encode"&gt;Encode&lt;/h3&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Command&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Encode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Returns the complete escape sequence as a string, including the APC delimiters &lt;code&gt;ESC_G&lt;/code&gt; and &lt;code&gt;ESC\&lt;/code&gt;. Payload data is base64-encoded.&lt;/p&gt;
&lt;h3 id="encodechunked"&gt;EncodeChunked&lt;/h3&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Command&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;EncodeChunked&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;maxChunkSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Splits the payload into multiple escape sequences for chunked transmission. Required when payload exceeds terminal limits (e.g., over SSH).&lt;/p&gt;</description></item><item><title>TransmitBuilder</title><link>https://serenafontaine.github.io/kgp/docs/api/transmit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://serenafontaine.github.io/kgp/docs/api/transmit/</guid><description>&lt;p&gt;Builds transmit or transmit+display commands. Transmit uploads image data; transmit+display also creates the initial placement.&lt;/p&gt;
&lt;h2 id="constructors"&gt;Constructors&lt;/h2&gt;
&lt;h3 id="newtransmit"&gt;NewTransmit&lt;/h3&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;NewTransmit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;TransmitBuilder&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Creates a transmit-only builder (action &lt;code&gt;t&lt;/code&gt;). Image data is uploaded but not displayed. Use with &lt;code&gt;NewPut()&lt;/code&gt; for placements.&lt;/p&gt;
&lt;h3 id="newtransmitdisplay"&gt;NewTransmitDisplay&lt;/h3&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;NewTransmitDisplay&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;TransmitBuilder&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Creates a transmit-and-display builder (action &lt;code&gt;T&lt;/code&gt;). Uploads and displays in one command.&lt;/p&gt;
&lt;h2 id="methods"&gt;Methods&lt;/h2&gt;
&lt;h3 id="image-identification"&gt;Image Identification&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Signature&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ImageID&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(id uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Set image ID (auto-generated if omitted)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ImageNumber&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(num uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Set image number (application-specific, non-unique)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="format--dimensions"&gt;Format &amp;amp; Dimensions&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Signature&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Format&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(format Format)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Set format: &lt;code&gt;FormatRGB&lt;/code&gt;, &lt;code&gt;FormatRGBA&lt;/code&gt;, &lt;code&gt;FormatPNG&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Dimensions&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(width, height int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Required&lt;/strong&gt; for RGB/RGBA formats&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="transmission"&gt;Transmission&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Signature&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;TransmitDirect&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(data []byte)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Embed data in escape sequence (default)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;TransmitFile&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(path string)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Read from file path&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;TransmitFileWithOffset&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(path string, offset, size int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Read from file with byte range&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ValidateTempPath&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(path string) error&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Validate temporary-file path requirement&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;TryTransmitTemp&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(path string) (*TransmitBuilder, error)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Temporary file with error return on invalid path&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;TransmitTemp&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(path string)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Temporary file; panics if path is invalid&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;TransmitSharedMemory&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(name string, size int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;POSIX shared memory object&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Compress&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;()&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Enable ZLIB compression (use with pre-compressed data)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="placement-options"&gt;Placement Options&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Signature&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;PlacementID&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(id uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Set placement ID for initial placement&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;CellOffset&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(x, y int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Pixel offset within starting cell&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;DisplaySize&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(columns, rows int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Display size in terminal cells&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;SourceRect&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(x, y, width, height int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Crop source to rectangle&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ZIndex&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(z int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Z-index (negative=below text, positive=above)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;CursorMovement&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(move bool)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;true&lt;/code&gt;=cursor moves after, &lt;code&gt;false&lt;/code&gt;=stays&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;RelativeTo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(parentImageID, parentPlacementID uint32, offsetH, offsetV int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Relative positioning&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;VirtualPlacement&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;()&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Invisible placement for Unicode placeholders&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="response"&gt;Response&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Signature&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ResponseSuppression&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(mode ResponseSuppression)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ResponseAll&lt;/code&gt;, &lt;code&gt;ResponseErrorsOnly&lt;/code&gt;, &lt;code&gt;ResponseOKOnly&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="build"&gt;Build&lt;/h2&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;TransmitBuilder&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Command&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Constructs the final &lt;code&gt;*Command&lt;/code&gt;. Call exactly once per builder.&lt;/p&gt;</description></item><item><title>PutBuilder</title><link>https://serenafontaine.github.io/kgp/docs/api/put/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://serenafontaine.github.io/kgp/docs/api/put/</guid><description>&lt;p&gt;Creates placement commands for existing images. Use after &lt;code&gt;NewTransmit()&lt;/code&gt; to display an image in multiple locations or with different display parameters.&lt;/p&gt;
&lt;h2 id="constructor"&gt;Constructor&lt;/h2&gt;
&lt;h3 id="newput"&gt;NewPut&lt;/h3&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;NewPut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;imageID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;PutBuilder&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Creates a put builder for the specified image. The image must already exist (transmitted previously).&lt;/p&gt;
&lt;h2 id="methods"&gt;Methods&lt;/h2&gt;
&lt;h3 id="image--placement-identification"&gt;Image &amp;amp; Placement Identification&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Signature&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ImageNumber&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(num uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Application-specific image number (non-unique)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;PlacementID&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(id uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Set placement ID (auto-generated if omitted)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="display-options"&gt;Display Options&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Signature&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;CellOffset&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(x, y int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Pixel offset within starting cell&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;DisplaySize&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(columns, rows int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Display size in terminal cells&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;SourceRect&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(x, y, width, height int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Display only a region of the source image&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ZIndex&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(z int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Z-index (negative=below text, positive=above)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;CursorMovement&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(move bool)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;true&lt;/code&gt;=cursor advances, &lt;code&gt;false&lt;/code&gt;=cursor stays&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;RelativeTo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(parentImageID, parentPlacementID uint32, offsetH, offsetV int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Position relative to parent placement&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;VirtualPlacement&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;()&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Invisible placement for Unicode placeholders&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="response"&gt;Response&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Signature&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ResponseSuppression&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(mode ResponseSuppression)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Control which responses are sent&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="build"&gt;Build&lt;/h2&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;PutBuilder&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Command&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>DeleteBuilder</title><link>https://serenafontaine.github.io/kgp/docs/api/delete/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://serenafontaine.github.io/kgp/docs/api/delete/</guid><description>&lt;p&gt;Builds delete commands. Delete modes determine what is removed and whether image data is freed.&lt;/p&gt;
&lt;h2 id="constructor"&gt;Constructor&lt;/h2&gt;
&lt;h3 id="newdelete"&gt;NewDelete&lt;/h3&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;NewDelete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;DeleteMode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;DeleteBuilder&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Creates a delete builder. The mode must be one of the &lt;code&gt;DeleteBy*&lt;/code&gt; constants.&lt;/p&gt;
&lt;h2 id="methods"&gt;Methods&lt;/h2&gt;
&lt;p&gt;Mode-specific parameters (call only the ones relevant to the chosen mode):&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Signature&lt;/th&gt;
 &lt;th&gt;Used With Modes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ImageID&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(id uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DeleteByImageID&lt;/code&gt;, &lt;code&gt;DeleteByImageIDFree&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ImageNumber&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(num uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DeleteByImageNumber&lt;/code&gt;, &lt;code&gt;DeleteByImageNumberFree&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;PlacementID&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(id uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DeleteByPlacementID&lt;/code&gt;, &lt;code&gt;DeleteByPlacementIDFree&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Cell&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(x, y int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DeleteByCell&lt;/code&gt;, &lt;code&gt;DeleteByCellFree&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Column&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(x int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DeleteByColumn&lt;/code&gt;, &lt;code&gt;DeleteByColumnFree&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Row&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(y int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DeleteByRow&lt;/code&gt;, &lt;code&gt;DeleteByRowFree&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ZIndex&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(z int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DeleteByZIndex&lt;/code&gt;, &lt;code&gt;DeleteByZIndexFree&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;IDRange&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(startID, endID int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DeleteByIDRange&lt;/code&gt;, &lt;code&gt;DeleteByIDRangeFree&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Signature&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ResponseSuppression&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(mode ResponseSuppression)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Control responses&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; For &lt;code&gt;DeleteByImageID&lt;/code&gt;, &lt;code&gt;DeleteByImageIDFree&lt;/code&gt;, &lt;code&gt;DeleteByPlacementID&lt;/code&gt;, and &lt;code&gt;DeleteByPlacementIDFree&lt;/code&gt;, you must also set &lt;code&gt;ImageID&lt;/code&gt; via &lt;code&gt;ImageID()&lt;/code&gt; when the mode requires it. The protocol uses &lt;code&gt;i&lt;/code&gt; for both image ID and (in some modes) other purposes; the builder maps these correctly.&lt;/p&gt;</description></item><item><title>Animation Builders</title><link>https://serenafontaine.github.io/kgp/docs/api/animation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://serenafontaine.github.io/kgp/docs/api/animation/</guid><description>&lt;p&gt;Animation support uses three builders: &lt;code&gt;FrameBuilder&lt;/code&gt; (add frames), &lt;code&gt;AnimateBuilder&lt;/code&gt; (control playback), and &lt;code&gt;ComposeBuilder&lt;/code&gt; (compose frames).&lt;/p&gt;
&lt;h2 id="framebuilder"&gt;FrameBuilder&lt;/h2&gt;
&lt;p&gt;Adds animation frames to an existing image.&lt;/p&gt;
&lt;h3 id="newframe"&gt;NewFrame&lt;/h3&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;NewFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;imageID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;FrameBuilder&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="methods"&gt;Methods&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Signature&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;FrameData&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(data []byte)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Raw frame image data&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Format&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(format Format)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Format for frame (required for RGB/RGBA)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Dimensions&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(width, height int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Required for RGB/RGBA&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;FrameNumber&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(frameNum uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Edit existing frame (replace instead of append)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;BackgroundFrame&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(frameNum uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Frame to use as background (0 = base image)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Gap&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(milliseconds uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Delay before next frame in ms&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Composition&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(mode CompositionMode)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;CompositionBlend&lt;/code&gt; or &lt;code&gt;CompositionReplace&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;BackgroundColor&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(rgba uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;32-bit RGBA background color&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ResponseSuppression&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(mode ResponseSuppression)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Control responses&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="animatebuilder"&gt;AnimateBuilder&lt;/h2&gt;
&lt;p&gt;Controls animation playback.&lt;/p&gt;</description></item><item><title>QueryBuilder</title><link>https://serenafontaine.github.io/kgp/docs/api/query/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://serenafontaine.github.io/kgp/docs/api/query/</guid><description>&lt;p&gt;Queries terminal capabilities. Send a minimal graphics command; the terminal responds with &lt;code&gt;OK&lt;/code&gt; if supported.&lt;/p&gt;
&lt;h2 id="constructor"&gt;Constructor&lt;/h2&gt;
&lt;h3 id="newquery"&gt;NewQuery&lt;/h3&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;NewQuery&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;QueryBuilder&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="methods"&gt;Methods&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Signature&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Format&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(format Format)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Format to test&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Dimensions&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(width, height int)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Test dimensions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;TransmitMedium&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(medium TransmitMedium)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Medium to test&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;TestData&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;(data []byte)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Minimal payload (e.g., 3 bytes for RGB)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="build"&gt;Build&lt;/h2&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;qb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;QueryBuilder&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Command&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="querysupport"&gt;QuerySupport&lt;/h2&gt;
&lt;p&gt;Convenience function for the most common query:&lt;/p&gt;</description></item><item><title>Response</title><link>https://serenafontaine.github.io/kgp/docs/api/response/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://serenafontaine.github.io/kgp/docs/api/response/</guid><description>&lt;p&gt;Parsed terminal response to a graphics command.&lt;/p&gt;
&lt;h2 id="struct"&gt;Struct&lt;/h2&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ImageID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Assigned image ID&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ImageNumber&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Assigned image number (if requested)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;PlacementID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Assigned placement ID&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Success&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// true if OK&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ErrorCode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// e.g., &amp;#34;ENOSPC&amp;#34;, &amp;#34;ENOENT&amp;#34;, &amp;#34;EINVAL&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Error message (if any)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="parseresponse"&gt;ParseResponse&lt;/h2&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;ParseResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Parses a terminal response string in permissive mode. This parser accepts responses with or without APC markers and tolerates unknown/malformed control-data pairs when possible.&lt;/p&gt;</description></item><item><title>Constants</title><link>https://serenafontaine.github.io/kgp/docs/api/constants/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://serenafontaine.github.io/kgp/docs/api/constants/</guid><description>&lt;h2 id="formats"&gt;Formats&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Constant&lt;/th&gt;
 &lt;th&gt;Value&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;FormatRGB&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;24&lt;/td&gt;
 &lt;td&gt;24-bit RGB (3 bytes per pixel)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;FormatRGBA&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;32&lt;/td&gt;
 &lt;td&gt;32-bit RGBA (4 bytes per pixel, default)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;FormatPNG&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;100&lt;/td&gt;
 &lt;td&gt;PNG with embedded dimensions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="transmit-mediums"&gt;Transmit Mediums&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Constant&lt;/th&gt;
 &lt;th&gt;Value&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;TransmitDirect&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;d&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Embed data in escape sequence (default)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;TransmitFile&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;f&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Read from regular file&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;TransmitTemp&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;t&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Temporary file (terminal deletes after read)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;TransmitSharedMem&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;s&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;POSIX shared memory&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="compression"&gt;Compression&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Constant&lt;/th&gt;
 &lt;th&gt;Value&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;CompressionZlib&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;z&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="delete-modes"&gt;Delete Modes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Preserve data&lt;/strong&gt; (lowercase): Delete placement(s) but keep image data in memory.&lt;/p&gt;</description></item><item><title>Helper Functions</title><link>https://serenafontaine.github.io/kgp/docs/api/helpers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://serenafontaine.github.io/kgp/docs/api/helpers/</guid><description>&lt;p&gt;Convenience functions for common operations.&lt;/p&gt;
&lt;h2 id="transmit-helpers"&gt;Transmit Helpers&lt;/h2&gt;
&lt;h3 id="transmitimage"&gt;TransmitImage&lt;/h3&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;TransmitImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Command&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Transmits and displays an &lt;code&gt;image.Image&lt;/code&gt; as PNG. Uses &lt;code&gt;image/png&lt;/code&gt; for encoding.&lt;/p&gt;
&lt;h3 id="transmitimagewithid"&gt;TransmitImageWithID&lt;/h3&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;TransmitImageWithID&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;imageID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Command&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Same as &lt;code&gt;TransmitImage&lt;/code&gt; but with a specific image ID.&lt;/p&gt;
&lt;h3 id="transmitimagergba"&gt;TransmitImageRGBA&lt;/h3&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;TransmitImageRGBA&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compress&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Command&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Transmits as raw RGBA. If &lt;code&gt;compress&lt;/code&gt; is true, applies ZLIB compression.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="delete-helpers"&gt;Delete Helpers&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Function&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;DeleteAll()&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Delete all placements, preserve data&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;DeleteAllFree()&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Delete all and free memory&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;DeleteImage(imageID uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Delete placements of image, preserve data&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;DeleteImageFree(imageID uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Delete image and free memory&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;DeleteAtCursor()&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Delete at cursor, preserve data&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;DeleteAtCursorFree()&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Delete at cursor and free&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="animation-helpers"&gt;Animation Helpers&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Function&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;PlayAnimation(imageID uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Play using protocol &lt;code&gt;LoopCount(2)&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;PlayAnimationLoop(imageID uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Play with infinite looping&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;PlayAnimationWithLoopCount(imageID, count uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Play with explicit protocol loop-count value&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;StopAnimation(imageID uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Stop at current frame&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ResetAnimation(imageID uint32)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Stop and reset to first frame&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="image-utilities"&gt;Image Utilities&lt;/h2&gt;
&lt;h3 id="conversion"&gt;Conversion&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Function&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ImageToRGBA(img image.Image) []byte&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Convert to raw RGBA bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ImageToRGB(img image.Image) []byte&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Convert to raw RGB bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ImageToPNG(img image.Image) ([]byte, error)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Encode as PNG&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="compression"&gt;Compression&lt;/h3&gt;




&lt;div class="chroma-wrap"&gt;
 
 &lt;div class="chroma-header"&gt;
 &lt;span class="chroma-lang"&gt;go&lt;/span&gt;
 &lt;button type="button" class="btn-copy" data-copy-target aria-label="Copy code"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CompressZlib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Compresses data with ZLIB (RFC 1950). Use with &lt;code&gt;TransmitDirect()&lt;/code&gt; and &lt;code&gt;Compress()&lt;/code&gt;.&lt;/p&gt;</description></item></channel></rss>