@@ -177,12 +177,20 @@ func (r *KittyRenderer) Render(img image.Image, opts RenderOptions) (string, err
177177 return "" , err
178178 }
179179
180- // Encode as PNG for transfer.
181- var buf bytes.Buffer
182- if err := png .Encode (& buf , processed ); err != nil {
183- return "" , fmt .Errorf ("failed to encode png: %w" , err )
180+ var data []byte
181+ unicodeFormat := DATA_RGBA_32_BIT
182+ if kittyOpts != nil && kittyOpts .PNG {
183+ unicodeFormat = DATA_PNG
184+ var buf bytes.Buffer
185+ if err := png .Encode (& buf , processed ); err != nil {
186+ return "" , fmt .Errorf ("failed to encode png: %w" , err )
187+ }
188+ data = buf .Bytes ()
189+ } else {
190+ rgbaImg := image .NewRGBA (bounds )
191+ draw .Draw (rgbaImg , rgbaImg .Bounds (), processed , bounds .Min , draw .Src )
192+ data = rgbaImg .Pix
184193 }
185- data := buf .Bytes ()
186194 encoded := Base64Encode (data )
187195
188196 // Step 1: Transmit image data in chunks (no immediate placement).
@@ -201,7 +209,12 @@ func (r *KittyRenderer) Render(img image.Image, opts RenderOptions) (string, err
201209
202210 var seq string
203211 if first {
204- seq = fmt .Sprintf ("\x1b _Gf=100,t=d,i=%d,q=2,m=%d;%s\x1b \\ " , imageNum , more , chunk )
212+ if unicodeFormat == DATA_RGBA_32_BIT {
213+ seq = fmt .Sprintf ("\x1b _Gf=32,s=%d,v=%d,t=d,i=%d,q=2,m=%d;%s\x1b \\ " ,
214+ pixelWidth , pixelHeight , imageNum , more , chunk )
215+ } else {
216+ seq = fmt .Sprintf ("\x1b _Gf=100,t=d,i=%d,q=2,m=%d;%s\x1b \\ " , imageNum , more , chunk )
217+ }
205218 first = false
206219 } else {
207220 seq = fmt .Sprintf ("\x1b _Gm=%d;%s\x1b \\ " , more , chunk )
0 commit comments