<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://fileformats.archiveteam.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://fileformats.archiveteam.org/index.php?action=history&amp;feed=atom&amp;title=Tweetable-polyglot-png</id>
		<title>Tweetable-polyglot-png - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://fileformats.archiveteam.org/index.php?action=history&amp;feed=atom&amp;title=Tweetable-polyglot-png"/>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=Tweetable-polyglot-png&amp;action=history"/>
		<updated>2026-05-21T10:49:39Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.2</generator>

	<entry>
		<id>http://fileformats.archiveteam.org/index.php?title=Tweetable-polyglot-png&amp;diff=51013&amp;oldid=prev</id>
		<title>Havoc Crow: add wikilink</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=Tweetable-polyglot-png&amp;diff=51013&amp;oldid=prev"/>
				<updated>2025-09-06T22:34:32Z</updated>
		
		<summary type="html">&lt;p&gt;add wikilink&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 22:34, 6 September 2025&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 6:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 6:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''tweetable-polyglot-png''' by David Buchanan is an open source Python script to pack up to 3MB of data into a tweetable [[PNG]] polyglot file.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''tweetable-polyglot-png''' by David Buchanan is an open source Python script to pack up to 3MB of data into a tweetable [[PNG]] &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[[&lt;/ins&gt;polyglot&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]] &lt;/ins&gt;file.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Hosts where this works:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Hosts where this works:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Havoc Crow</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/index.php?title=Tweetable-polyglot-png&amp;diff=50967&amp;oldid=prev</id>
		<title>MihaiPopa7: Some fixes and used American spelling.</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=Tweetable-polyglot-png&amp;diff=50967&amp;oldid=prev"/>
				<updated>2025-09-02T23:32:25Z</updated>
		
		<summary type="html">&lt;p&gt;Some fixes and used American spelling.&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 23:32, 2 September 2025&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Twitter strips unnecessary data from PNG uploads, however, they do not strip trailing data from the DEFLATE stream inside the IDAT chunk, provided that the overall image file meets the requirements to avoid being re-encoded.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Twitter strips unnecessary data from PNG uploads, however, they do not strip trailing data from the DEFLATE stream inside the IDAT chunk, provided that the overall image file meets the requirements to avoid being re-encoded.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The cover image must compress well, such that the compressed filesize is less than (width * height) - size_of_embedded_file. If the cover image does not have a palette, then it must have at least 257 unique &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;colours &lt;/del&gt;(otherwise &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;twitter &lt;/del&gt;will &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;optimise &lt;/del&gt;it to use a palette).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The cover image must compress well, such that the compressed filesize is less than (width * height) - size_of_embedded_file. If the cover image does not have a palette, then it must have at least 257 unique &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;colors &lt;/ins&gt;(otherwise &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Twitter &lt;/ins&gt;will &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;optimize &lt;/ins&gt;it to use a palette).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The resolution can be up to 4096x4096, however, be aware that &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;twitter &lt;/del&gt;will serve a downscaled version by default, for images greater than 680x680 (depending on your display DPI, etc.).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The resolution can be up to 4096x4096, however, be aware that &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Twitter &lt;/ins&gt;will serve a downscaled version by default, for images greater than 680x680 (depending on your display DPI, etc.).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The image should not have any unnecessary metadata chunks.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The image should not have any unnecessary metadata chunks.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The total output file size must be less than 3MB (maybe 5MB?), otherwise &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;twitter &lt;/del&gt;will convert the PNG to a JPEG.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The total output file size must be less than 3MB (maybe 5MB?), otherwise &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Twitter &lt;/ins&gt;will convert the PNG to a JPEG.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If the embedded file is a .zip, then the offsets are automatically adjusted so that the overall file is still a valid zip. For any other file formats, you're on your own (many will work without any special handling, notably .pdf, .mp3).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If the embedded file is a .zip, then the offsets are automatically adjusted so that the overall file is still a valid zip. For any other file formats, you're on your own (many will work without any special handling, notably .pdf, .mp3).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MihaiPopa7</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/index.php?title=Tweetable-polyglot-png&amp;diff=45330&amp;oldid=prev</id>
		<title>Parchivist: Created page with &quot;{{FormatInfo |formattype=electronic |subcat=Encryption |subcat2=Data Hiding/Embedding |released=2021 }}  '''tweetable-polyglot-png''' by David Buchanan is an open source Pytho...&quot;</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=Tweetable-polyglot-png&amp;diff=45330&amp;oldid=prev"/>
				<updated>2023-09-03T05:15:36Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{FormatInfo |formattype=electronic |subcat=Encryption |subcat2=Data Hiding/Embedding |released=2021 }}  &amp;#039;&amp;#039;&amp;#039;tweetable-polyglot-png&amp;#039;&amp;#039;&amp;#039; by David Buchanan is an open source Pytho...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{FormatInfo&lt;br /&gt;
|formattype=electronic&lt;br /&gt;
|subcat=Encryption&lt;br /&gt;
|subcat2=Data Hiding/Embedding&lt;br /&gt;
|released=2021&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''tweetable-polyglot-png''' by David Buchanan is an open source Python script to pack up to 3MB of data into a tweetable [[PNG]] polyglot file.&lt;br /&gt;
&lt;br /&gt;
Hosts where this works:&lt;br /&gt;
* Twitter/X&lt;br /&gt;
* Imgur&lt;br /&gt;
* Github repo thumbnail/header image&lt;br /&gt;
* Discord&lt;br /&gt;
&lt;br /&gt;
Hosts where it doesn't work:&lt;br /&gt;
* Reddit (Perhaps it could be made to work by embedding data within the DEFLATE stream, rather than appending?)&lt;br /&gt;
&lt;br /&gt;
Twitter strips unnecessary data from PNG uploads, however, they do not strip trailing data from the DEFLATE stream inside the IDAT chunk, provided that the overall image file meets the requirements to avoid being re-encoded.&lt;br /&gt;
&lt;br /&gt;
The cover image must compress well, such that the compressed filesize is less than (width * height) - size_of_embedded_file. If the cover image does not have a palette, then it must have at least 257 unique colours (otherwise twitter will optimise it to use a palette).&lt;br /&gt;
&lt;br /&gt;
The resolution can be up to 4096x4096, however, be aware that twitter will serve a downscaled version by default, for images greater than 680x680 (depending on your display DPI, etc.).&lt;br /&gt;
&lt;br /&gt;
The image should not have any unnecessary metadata chunks.&lt;br /&gt;
&lt;br /&gt;
The total output file size must be less than 3MB (maybe 5MB?), otherwise twitter will convert the PNG to a JPEG.&lt;br /&gt;
&lt;br /&gt;
If the embedded file is a .zip, then the offsets are automatically adjusted so that the overall file is still a valid zip. For any other file formats, you're on your own (many will work without any special handling, notably .pdf, .mp3).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://github.com/DavidBuchanan314/tweetable-polyglot-png Homepage]&lt;/div&gt;</summary>
		<author><name>Parchivist</name></author>	</entry>

	</feed>