<?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=X-Face</id>
		<title>X-Face - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://fileformats.archiveteam.org/index.php?action=history&amp;feed=atom&amp;title=X-Face"/>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=X-Face&amp;action=history"/>
		<updated>2026-05-21T19:13:43Z</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=X-Face&amp;diff=51791&amp;oldid=prev</id>
		<title>St. GIGA: Bad Apple info</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51791&amp;oldid=prev"/>
				<updated>2026-05-16T21:44:15Z</updated>
		
		<summary type="html">&lt;p&gt;Bad Apple info&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 21:44, 16 May 2026&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 26:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 26:&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;Essentially, under controlled conditions, you can do a limited form of how video codecs handle size reduction by exploiting that the human eye is more sensitive to changes in brightness than changes in color. The thing with extended X-Face in this situation is that it does not even have to follow a lossy approach, especially given that this is NOT the only type of space savings that can be done here. And for the record higher bit depth RGB headers have the same inverted status as grayscale because it literally IS 3 grayscale X-Face headers merged into a TrueColor RGB X-Face header.&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;Essentially, under controlled conditions, you can do a limited form of how video codecs handle size reduction by exploiting that the human eye is more sensitive to changes in brightness than changes in color. The thing with extended X-Face in this situation is that it does not even have to follow a lossy approach, especially given that this is NOT the only type of space savings that can be done here. And for the record higher bit depth RGB headers have the same inverted status as grayscale because it literally IS 3 grayscale X-Face headers merged into a TrueColor RGB X-Face header.&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;One thing that has been tested in Datula is that changing the grayscale depth in a multi grayscale (and in fact each cell can be true 1-bit) or TrueColor X-Face is possible on each 48x48 cell. Such a feature is capable of improving compression. A lot of the special part of why Datula can do what it can do is that because of how the oldest grayscale X-Face code would create X-Face-1: through X-Face-7: headers AND that X-Face-el ALSO defined its grayscale as using a field in X-Face-Type:, it means that 24bit via taking grayscale headers and shoving them into each channel of an RGB X-Face is possible, AND that you can fiddle with the depth in each channel, frame, and 48x48 cell, though doing something like switching from TrueColor in one cell to 1-bit BW in the other cell requires filling that second cell with 3 copies of the 1-bit header. Also all of this is creepily similar to NTSC color. Also the inversion of the grayscale code is preserved and you can make 1-bit grayscale X-Face headers but they only invert in X-Face-el, so you could potentially do something with that IF you're clever, and do it because of the huge difference in output size between solid black (larger due to an off-by-one error, and this is pretty bad for extended X-Face due to what those look like split-up, especially when you add the grayscale and TrueColor inversions) and solid white. But simply put, it IS possible to significantly optimize extended X-Face to not waste space, and in a way creepily similar to the NTSC-J inspiration AND modern video file codecs, though regrettably this historically was fairly niche. JPL's (NOT Jet Propulsion Laboratory) grid of X-Face images that has a few of the extended types only collected 3-bit color and multi X-Faces, but not grayscale, Datula RGB, animated X-Face, or X-Face code. Even though the file was a GIF. The archived 1998 version of the image DOES feature a very tall (tall multi is harder to generate than wide multi if you use RGB and this didn't) multi X-Face as well as an RGB multi X-Face that is 96x48 and has Japanese Kanji over color bars. So we know that SOME mixing of modes happened back in the day, and the fact that Yuuichi Teranishi made different expressions, as well as 2-bit grayscale, monochrome animation, and 3-bit RGB of his X-Face cartoon avatar implies that SOME people tried to go for an ALL modes header pool, but nobody seemed to have fully mixed the modes to the max historically, most likely due to the high usage of 56K and ISDN as slow as they are. But as long as you avoid throwing multi into a Datula X-Face you can do this safely. Sadly, no one tried. That being said, you CAN do per-cell and per-frame bit depth changes in Datula's extended grayscale mode, which would make for a perfectly-accurate Bad Apple! test animation or reproduction of films on the silver screen, without wasting space. It really is quite ingenious how Datula X-Face works and what you can do with it in a nuanced way.&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;One thing that has been tested in Datula is that changing the grayscale depth in a multi grayscale (and in fact each cell can be true 1-bit) or TrueColor X-Face is possible on each 48x48 cell. Such a feature is capable of improving compression. A lot of the special part of why Datula can do what it can do is that because of how the oldest grayscale X-Face code would create X-Face-1: through X-Face-7: headers AND that X-Face-el ALSO defined its grayscale as using a field in X-Face-Type:, it means that 24bit via taking grayscale headers and shoving them into each channel of an RGB X-Face is possible, AND that you can fiddle with the depth in each channel, frame, and 48x48 cell, though doing something like switching from TrueColor in one cell to 1-bit BW in the other cell requires filling that second cell with 3 copies of the 1-bit header. Also all of this is creepily similar to NTSC color. Also the inversion of the grayscale code is preserved and you can make 1-bit grayscale X-Face headers but they only invert in X-Face-el, so you could potentially do something with that IF you're clever, and do it because of the huge difference in output size between solid black (larger due to an off-by-one error, and this is pretty bad for extended X-Face due to what those look like split-up, especially when you add the grayscale and TrueColor inversions) and solid white. But simply put, it IS possible to significantly optimize extended X-Face to not waste space, and in a way creepily similar to the NTSC-J inspiration AND modern video file codecs, though regrettably this historically was fairly niche. JPL's (NOT Jet Propulsion Laboratory) grid of X-Face images that has a few of the extended types only collected 3-bit color and multi X-Faces, but not grayscale, Datula RGB, animated X-Face, or X-Face code. Even though the file was a GIF. The archived 1998 version of the image DOES feature a very tall (tall multi is harder to generate than wide multi if you use RGB and this didn't) multi X-Face as well as an RGB multi X-Face that is 96x48 and has Japanese Kanji over color bars. So we know that SOME mixing of modes happened back in the day, and the fact that Yuuichi Teranishi made different expressions, as well as 2-bit grayscale, monochrome animation, and 3-bit RGB of his X-Face cartoon avatar implies that SOME people tried to go for an ALL modes header pool, but nobody seemed to have fully mixed the modes to the max historically, most likely due to the high usage of 56K and ISDN as slow as they are. But as long as you avoid throwing multi into a Datula X-Face you can do this safely. Sadly, no one tried. That being said, you CAN do per-cell and per-frame bit depth changes in Datula's extended grayscale mode, which would make for a perfectly-accurate Bad Apple! test animation &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;(48x48 1bit is possible via using ffmpeg and X-Face-el but for proper frame rate you need to change the 10fps limit line in X-Face-el to a no operation line via commenting it out and then recompiling the Emacs Lisp files) &lt;/ins&gt;or reproduction of films on the silver screen, without wasting space. It really is quite ingenious how Datula X-Face works and what you can do with it in a nuanced way&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;, entirely possible by sheer chance&lt;/ins&gt;. &amp;#160;&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;So if you combine per-frame bit depth, unequal channel bit depth, and per-48x48px bit depth, you can actually make X-Face videos either using ONLY the needed colors to represent any given scene, without loss, or if that is not helping it can be coupled with the lossy approach of intentionally going under that. And if you used something like GIFski's pngquant-based temporal dithering, you could do some pretty wild compression (well, to the extent that the dither pattern isn't too checkerboard to trigger X-Face's compression worst-case compressed size). Even if you DO lower the depth a bit lower than needed, you could temporally dither as needed (which may be a good way to mitigate the over-dithering expansion risk). Whether intended or not, Datula X-Face's image and video fidelity is very very EXTREMELY selective. A bruteforce-match encoder would be the best option for doing X-Face video encoding so as to not waste space, as long as you do a colorcube analysis or its grayscale analysis sibling to see how many bits are needed for the smallest perfect reproduction or even below that if doing lossy compression (the creator of GIFski helped make a lossy [[GIF]] encoder so it IS possible to make lossless formats lossy) if one needs it even smaller, and then there's the temporal dithering. One could even do what Guetzli does and exploit human perception like it does with [[JPEG]] but for X-Face, though in ALL of these cases the code and potentially encode time would be slower. And this hasn't been fleshed out but an approach to the Arithmetic Coding step akin to what Zopfli and FlexiGIF do may work.&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;So if you combine per-frame bit depth, unequal channel bit depth, and per-48x48px bit depth, you can actually make X-Face videos either using ONLY the needed colors to represent any given scene, without loss, or if that is not helping it can be coupled with the lossy approach of intentionally going under that. And if you used something like GIFski's pngquant-based temporal dithering, you could do some pretty wild compression (well, to the extent that the dither pattern isn't too checkerboard to trigger X-Face's compression worst-case compressed size). Even if you DO lower the depth a bit lower than needed, you could temporally dither as needed (which may be a good way to mitigate the over-dithering expansion risk). Whether intended or not, Datula X-Face's image and video fidelity is very very EXTREMELY selective. A bruteforce-match encoder would be the best option for doing X-Face video encoding so as to not waste space, as long as you do a colorcube analysis or its grayscale analysis sibling to see how many bits are needed for the smallest perfect reproduction or even below that if doing lossy compression (the creator of GIFski helped make a lossy [[GIF]] encoder so it IS possible to make lossless formats lossy) if one needs it even smaller, and then there's the temporal dithering. One could even do what Guetzli does and exploit human perception like it does with [[JPEG]] but for X-Face, though in ALL of these cases the code and potentially encode time would be slower. And this hasn't been fleshed out but an approach to the Arithmetic Coding step akin to what Zopfli and FlexiGIF do may work.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>St. GIGA</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51733&amp;oldid=prev</id>
		<title>St. GIGA: Added Wikimedia Commons link</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51733&amp;oldid=prev"/>
				<updated>2026-05-01T21:10:29Z</updated>
		
		<summary type="html">&lt;p&gt;Added Wikimedia Commons link&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 21:10, 1 May 2026&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 169:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 169:&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;* https://stgiga.github.io/X-FacePlusFaceAllHeadersPlus24bitFixOG.txt - Sample of regular X-Face, Face ([[Base64]]+[[PNG]]), &amp;amp; the x-face-el and Datula extended X-Face types (Datula's animated 24-bit RGB, plus x-face-el's 8-bit grayscale &amp;amp; animated 3bpp RGB, including going beyond 48x48px.)&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;* https://stgiga.github.io/X-FacePlusFaceAllHeadersPlus24bitFixOG.txt - Sample of regular X-Face, Face ([[Base64]]+[[PNG]]), &amp;amp; the x-face-el and Datula extended X-Face types (Datula's animated 24-bit RGB, plus x-face-el's 8-bit grayscale &amp;amp; animated 3bpp RGB, including going beyond 48x48px.)&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;div&gt;* https://stgiga.github.io/LushFace.gif - A GIFski [[GIF]] rendering of the above, assembled into a 96x144 cell that modern UIs would prefer over stringing them side-by-side like x-face-el does, or in a tiny gallery like Datula does.&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;* https://stgiga.github.io/LushFace.gif - A GIFski [[GIF]] rendering of the above, assembled into a 96x144 cell that modern UIs would prefer over stringing them side-by-side like x-face-el does, or in a tiny gallery like Datula does.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&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;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;* https://commons.wikimedia.org/wiki/File:Extended_X-Face_Header_Sampling.gif - The above file on Wikimedia Commons, licensed as CC0.&lt;/ins&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;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* https://web.archive.org/web/20051029080349/http://www.jpl.org/elips/image/x-faces.gif - Many samples of X-Face and X-Face-el (extended mode is known as X-Face-Xmas internally) from long ago.&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;* https://web.archive.org/web/20051029080349/http://www.jpl.org/elips/image/x-faces.gif - Many samples of X-Face and X-Face-el (extended mode is known as X-Face-Xmas internally) from long ago.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>St. GIGA</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51726&amp;oldid=prev</id>
		<title>St. GIGA: Fix typo</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51726&amp;oldid=prev"/>
				<updated>2026-04-26T07:34:49Z</updated>
		
		<summary type="html">&lt;p&gt;Fix typo&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 07:34, 26 April 2026&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 29:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 29:&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;So if you combine per-frame bit depth, unequal channel bit depth, and per-48x48px bit depth, you can actually make X-Face videos either using ONLY the needed colors to represent any given scene, without loss, or if that is not helping it can be coupled with the lossy approach of intentionally going under that. And if you used something like GIFski's pngquant-based temporal dithering, you could do some pretty wild compression (well, to the extent that the dither pattern isn't too checkerboard to trigger X-Face's compression worst-case compressed size). Even if you DO lower the depth a bit lower than needed, you could temporally dither as needed (which may be a good way to mitigate the over-dithering expansion risk). Whether intended or not, Datula X-Face's image and video fidelity is very very EXTREMELY selective. A bruteforce-match encoder would be the best option for doing X-Face video encoding so as to not waste space, as long as you do a colorcube analysis or its grayscale analysis sibling to see how many bits are needed for the smallest perfect reproduction or even below that if doing lossy compression (the creator of GIFski helped make a lossy [[GIF]] encoder so it IS possible to make lossless formats lossy) if one needs it even smaller, and then there's the temporal dithering. One could even do what Guetzli does and exploit human perception like it does with [[JPEG]] but for X-Face, though in ALL of these cases the code and potentially encode time would be slower. And this hasn't been fleshed out but an approach to the Arithmetic Coding step akin to what Zopfli and FlexiGIF do may work.&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;So if you combine per-frame bit depth, unequal channel bit depth, and per-48x48px bit depth, you can actually make X-Face videos either using ONLY the needed colors to represent any given scene, without loss, or if that is not helping it can be coupled with the lossy approach of intentionally going under that. And if you used something like GIFski's pngquant-based temporal dithering, you could do some pretty wild compression (well, to the extent that the dither pattern isn't too checkerboard to trigger X-Face's compression worst-case compressed size). Even if you DO lower the depth a bit lower than needed, you could temporally dither as needed (which may be a good way to mitigate the over-dithering expansion risk). Whether intended or not, Datula X-Face's image and video fidelity is very very EXTREMELY selective. A bruteforce-match encoder would be the best option for doing X-Face video encoding so as to not waste space, as long as you do a colorcube analysis or its grayscale analysis sibling to see how many bits are needed for the smallest perfect reproduction or even below that if doing lossy compression (the creator of GIFski helped make a lossy [[GIF]] encoder so it IS possible to make lossless formats lossy) if one needs it even smaller, and then there's the temporal dithering. One could even do what Guetzli does and exploit human perception like it does with [[JPEG]] but for X-Face, though in ALL of these cases the code and potentially encode time would be slower. And this hasn't been fleshed out but an approach to the Arithmetic Coding step akin to what Zopfli and FlexiGIF do may work.&lt;/div&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;Oh and in the case of unequal bit depths for RGB, you CAN have a mixture of multi-bit/grayscale and 1-bit color channels, so long as it doesn't go below 3 channels. This naturally brings up the concept of inversion (also doing an X-Face-el trick where you use a depth of 1 in a grayscale X-Face but use a regular X-Face for the purposes of inversion and to deal with the solid-black inflation is not how it works on Datula for reasons that will become clear, and in fact it acts as if there was no X-Face-Type when you try via &amp;quot;X-Face-Type: GRAY; depth=1&amp;quot; which does invert on X-Face-el but the odds of someone intentionally generating this is quite low so it isn't a big problem), and basically if the channel is 1 bit Datula doesn't invert it and if it's more than 1 bit Datula inverts it for each 48×48 region. Also, because grayscale is 1-channel it doesn't need 3 copies of a monochrome X-Face to make 1-bit cells in a multi animation. Also, adding onto the part about Zopfli/FlexiGIF-like tricks the bitstream can technically be made smaller in some cases but not very usefully, only when the bottom right matches a specific pattern (same patterns you see when you make the x-face string something really short, like 1 character). These &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;x&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;faces &lt;/del&gt;are smaller than they would be if you decoded and re-encoded them but also by their nature they're mostly that dot pattern type, which are scrambled. Some even have that worst-case checker pattern, so there is that. An example is using &amp;quot;;-)&amp;quot; for a black checkerboard (which if encoded properly would be a worst-case), and &amp;quot;:-)&amp;quot; for a white checkerboard that would still be at least somewhat bad if encoded properly. So if an encoder ''really'' wants to save space it can change the actual shape to a smaller bitstream, situationally. Oh and assuming one uses image processing capable of identifying subjects this could be useful to be good shortcodes when they are needed most. Also codes like &amp;quot;:-|&amp;quot; have some utility too. And of course the fact this can be done to each bit of an image means you can subtly alter the image a la [[JPEG]] for smallest image size, beyond just doing the per-frame, per-cell, per-channel bit depth adjustments with (temporal) dithering and perceptual (Guetzli-esque tricks) methods. So in a way it is possible to compensate quite well for the inefficiency of this codec compared to other codecs, even ones that are already inefficient. In this case, the very sparse structure CAN save the whole thing in a way that other codecs simply cannot offer. None are nearly as selective codecs.&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;Oh and in the case of unequal bit depths for RGB, you CAN have a mixture of multi-bit/grayscale and 1-bit color channels, so long as it doesn't go below 3 channels. This naturally brings up the concept of inversion (also doing an X-Face-el trick where you use a depth of 1 in a grayscale X-Face but use a regular X-Face for the purposes of inversion and to deal with the solid-black inflation is not how it works on Datula for reasons that will become clear, and in fact it acts as if there was no X-Face-Type when you try via &amp;quot;X-Face-Type: GRAY; depth=1&amp;quot; which does invert on X-Face-el but the odds of someone intentionally generating this is quite low so it isn't a big problem), and basically if the channel is 1 bit Datula doesn't invert it and if it's more than 1 bit Datula inverts it for each 48×48 region. Also, because grayscale is 1-channel it doesn't need 3 copies of a monochrome X-Face to make 1-bit cells in a multi animation. Also, adding onto the part about Zopfli/FlexiGIF-like tricks the bitstream can technically be made smaller in some cases but not very usefully, only when the bottom right matches a specific pattern (same patterns you see when you make the x-face string something really short, like 1 character). These &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;X&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Faces &lt;/ins&gt;are smaller than they would be if you decoded and re-encoded them but also by their nature they're mostly that dot pattern type, which are scrambled. Some even have that worst-case checker pattern, so there is that. An example is using &amp;quot;;-)&amp;quot; for a black checkerboard (which if encoded properly would be a worst-case), and &amp;quot;:-)&amp;quot; for a white checkerboard that would still be at least somewhat bad if encoded properly. So if an encoder ''really'' wants to save space it can change the actual shape to a smaller bitstream, situationally. Oh and assuming one uses image processing capable of identifying subjects this could be useful to be good shortcodes when they are needed most. Also codes like &amp;quot;:-|&amp;quot; have some utility too. And of course the fact this can be done to each bit of an image means you can subtly alter the image a la [[JPEG]] for smallest image size, beyond just doing the per-frame, per-cell, per-channel bit depth adjustments with (temporal) dithering and perceptual (Guetzli-esque tricks) methods. So in a way it is possible to compensate quite well for the inefficiency of this codec compared to other codecs, even ones that are already inefficient. In this case, the very sparse structure CAN save the whole thing in a way that other codecs simply cannot offer. None are nearly as selective codecs.&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;Currently the cleanest extended X-Face: files you can generate with existing software fall within the &amp;quot;pixel art&amp;quot; resolutions at 24bpp.&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;Currently the cleanest extended X-Face: files you can generate with existing software fall within the &amp;quot;pixel art&amp;quot; resolutions at 24bpp.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>St. GIGA</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51725&amp;oldid=prev</id>
		<title>St. GIGA at 00:37, 25 April 2026</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51725&amp;oldid=prev"/>
				<updated>2026-04-25T00:37:56Z</updated>
		
		<summary type="html">&lt;p&gt;&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 00:37, 25 April 2026&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 20:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 20:&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 limits on sending from Datula are due to it having a limit on how big of a custom header it will let you send. It has no problem in the situation of it reading a header that is too large to send. An outright video header could be sent, email server-permitting, and it in theory would display. X-Face-el so far works best on XEmacs, its original environment. Modern Emacs doesn't even try to load it.&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 limits on sending from Datula are due to it having a limit on how big of a custom header it will let you send. It has no problem in the situation of it reading a header that is too large to send. An outright video header could be sent, email server-permitting, and it in theory would display. X-Face-el so far works best on XEmacs, its original environment. Modern Emacs doesn't even try to load it.&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;Another factor is that unequal channel depths in a TrueColor X-Face have been found to work even though the relevant X-Face-Type: header (which contains, separated by semicolons, geometry=NxN for multi, animate=N for animation, and MONO for 1-bit BW, and RGB or GRAY for color and grayscale, the latter two with a depth=N field with a value from 1-to-8 and these do not have to be in this order, and only the flags you need can be used, and superfluous fields like geometry=1x1 on a 48x48px X-Face are relatively safe) only has one depth value. More-consistently is that because grayscale (and by extension Datula color components) features X-Face-1 through X-Face-7 headers, it is also at least plausible to change bit depth per frame too, even potentially in conjunction with this, which is quite helpful for usage in situations where excessive size is a problem, such as, say, the Internet speeds of the format's early days &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;(~90s)&lt;/del&gt;. &amp;#160;&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;Another factor is that unequal channel depths in a TrueColor X-Face have been found to work even though the relevant X-Face-Type: header (which contains, separated by semicolons, geometry=NxN for multi, animate=N for animation, and MONO for 1-bit BW, and RGB or GRAY for color and grayscale, the latter two with a depth=N field with a value from 1-to-8 and these do not have to be in this order &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;(for instance something like &amp;quot;X-Face-Type: geometry=2x1; GRAY&amp;quot; is valid&lt;/ins&gt;, and only the flags you need can be used, and superfluous fields like geometry=1x1 on a 48x48px X-Face are relatively safe) only has one depth value. More-consistently is that because grayscale (and by extension Datula color components) features X-Face-1 through X-Face-7 headers, it is also at least plausible to change bit depth per frame too, even potentially in conjunction with this, which is quite helpful for usage in situations where excessive size is a problem, such as, say, the Internet speeds of the format's early days&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;, 1989 through the 1990s, and up until Face: headers. Dial-up was the issue&lt;/ins&gt;. &amp;#160;&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;So in theory it is possible when converting color animations to optimize the headers for size as needed based on colors usage. So if a scene favors Red, Green, or Blue (or multiple), you can allocate the most-used relevant channel(s) more bits (assuming you are skipping out on full 24-bit to save space, fit a limit, send faster on dial-up, and/or accounting for the human eye being more sensitive to green), and do this per-frame. And FaceMake allows one to set the bit depth of the color components to uncommon sizes not possible in [[PNG]], and that's without the unequal component ones in which manual assembly is needed to utilize it, let alone the per-frame changes. There's really no limits here. Of course, encoding this type of fancy optimized X-Face is a tall order, given this complexity.&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;So in theory it is possible when converting color animations to optimize the headers for size as needed based on colors usage. So if a scene favors Red, Green, or Blue (or multiple), you can allocate the most-used relevant channel(s) more bits (assuming you are skipping out on full 24-bit to save space, fit a limit, send faster on dial-up, and/or accounting for the human eye being more sensitive to green), and do this per-frame. And FaceMake allows one to set the bit depth of the color components to uncommon sizes not possible in [[PNG]], and that's without the unequal component ones in which manual assembly is needed to utilize it, let alone the per-frame changes. There's really no limits here. Of course, encoding this type of fancy optimized X-Face is a tall order, given this complexity.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>St. GIGA</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51724&amp;oldid=prev</id>
		<title>St. GIGA: Added more info</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51724&amp;oldid=prev"/>
				<updated>2026-04-25T00:32:44Z</updated>
		
		<summary type="html">&lt;p&gt;Added more info&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 00:32, 25 April 2026&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 26:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 26:&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;Essentially, under controlled conditions, you can do a limited form of how video codecs handle size reduction by exploiting that the human eye is more sensitive to changes in brightness than changes in color. The thing with extended X-Face in this situation is that it does not even have to follow a lossy approach, especially given that this is NOT the only type of space savings that can be done here. And for the record higher bit depth RGB headers have the same inverted status as grayscale because it literally IS 3 grayscale X-Face headers merged into a TrueColor RGB X-Face header.&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;Essentially, under controlled conditions, you can do a limited form of how video codecs handle size reduction by exploiting that the human eye is more sensitive to changes in brightness than changes in color. The thing with extended X-Face in this situation is that it does not even have to follow a lossy approach, especially given that this is NOT the only type of space savings that can be done here. And for the record higher bit depth RGB headers have the same inverted status as grayscale because it literally IS 3 grayscale X-Face headers merged into a TrueColor RGB X-Face header.&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;One thing that has been tested in Datula &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;(but is still under investigation) &lt;/del&gt;is that changing the grayscale depth in a multi grayscale (&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;albeit less investigated&lt;/del&gt;) or TrueColor X-Face is possible on each 48x48 cell. Such a feature is capable of improving compression. A lot of the special part of why Datula can do what it can do is that because of how the oldest grayscale X-Face code would create X-Face-1: through X-Face-7: headers AND that X-Face-el ALSO defined its grayscale as using a field in X-Face-Type:, it means that 24bit via taking grayscale headers and shoving them into each channel of an RGB X-Face is possible, AND that you can fiddle with the depth in each channel, frame, and 48x48 cell, though doing something like switching from TrueColor in one cell to 1-bit BW in the other cell requires filling that second cell with 3 copies of the 1-bit header. Also all of this is creepily similar to NTSC color. Also the inversion of the grayscale code is preserved and you can make 1-bit grayscale X-Face headers, so you could potentially do something with that IF you're clever, and do it because of the huge difference in output size between solid black (larger due to an off-by-one error, and this is pretty bad for extended X-Face due to what those look like split-up, especially when you add the grayscale and TrueColor inversions) and solid white. But simply put, it IS possible to significantly optimize extended X-Face to not waste space, and in a way creepily similar to the NTSC-J inspiration AND modern video file codecs, though regrettably this historically was fairly niche. JPL's (NOT Jet Propulsion Laboratory) grid of X-Face images that has a few of the extended types only collected 3-bit color and multi X-Faces, but not grayscale, Datula RGB, animated X-Face, or X-Face code. Even though the file was a GIF. The archived 1998 version of the image DOES feature a very tall (tall multi is harder to generate than wide multi if you use RGB and this didn't) multi X-Face as well as an RGB multi X-Face that is 96x48 and has Japanese Kanji over color bars. So we know that SOME mixing of modes happened back in the day, and the fact that Yuuichi Teranishi made different expressions, as well as 2-bit grayscale, monochrome animation, and 3-bit RGB of his X-Face cartoon avatar implies that SOME people tried to go for an ALL modes header pool, but nobody seemed to have fully mixed the modes to the max historically, most likely due to the high usage of 56K and ISDN as slow as they are. But as long as you avoid throwing multi into a Datula X-Face you can do this safely. Sadly, no one tried.&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;One thing that has been tested in Datula is that changing the grayscale depth in a multi grayscale (&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;and in fact each cell can be true 1-bit&lt;/ins&gt;) or TrueColor X-Face is possible on each 48x48 cell. Such a feature is capable of improving compression. A lot of the special part of why Datula can do what it can do is that because of how the oldest grayscale X-Face code would create X-Face-1: through X-Face-7: headers AND that X-Face-el ALSO defined its grayscale as using a field in X-Face-Type:, it means that 24bit via taking grayscale headers and shoving them into each channel of an RGB X-Face is possible, AND that you can fiddle with the depth in each channel, frame, and 48x48 cell, though doing something like switching from TrueColor in one cell to 1-bit BW in the other cell requires filling that second cell with 3 copies of the 1-bit header. Also all of this is creepily similar to NTSC color. Also the inversion of the grayscale code is preserved and you can make 1-bit grayscale X-Face headers &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;but they only invert in X-Face-el&lt;/ins&gt;, so you could potentially do something with that IF you're clever, and do it because of the huge difference in output size between solid black (larger due to an off-by-one error, and this is pretty bad for extended X-Face due to what those look like split-up, especially when you add the grayscale and TrueColor inversions) and solid white. But simply put, it IS possible to significantly optimize extended X-Face to not waste space, and in a way creepily similar to the NTSC-J inspiration AND modern video file codecs, though regrettably this historically was fairly niche. JPL's (NOT Jet Propulsion Laboratory) grid of X-Face images that has a few of the extended types only collected 3-bit color and multi X-Faces, but not grayscale, Datula RGB, animated X-Face, or X-Face code. Even though the file was a GIF. The archived 1998 version of the image DOES feature a very tall (tall multi is harder to generate than wide multi if you use RGB and this didn't) multi X-Face as well as an RGB multi X-Face that is 96x48 and has Japanese Kanji over color bars. So we know that SOME mixing of modes happened back in the day, and the fact that Yuuichi Teranishi made different expressions, as well as 2-bit grayscale, monochrome animation, and 3-bit RGB of his X-Face cartoon avatar implies that SOME people tried to go for an ALL modes header pool, but nobody seemed to have fully mixed the modes to the max historically, most likely due to the high usage of 56K and ISDN as slow as they are. But as long as you avoid throwing multi into a Datula X-Face you can do this safely. Sadly, no one tried&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;. That being said, you CAN do per-cell and per-frame bit depth changes in Datula's extended grayscale mode, which would make for a perfectly-accurate Bad Apple! test animation or reproduction of films on the silver screen, without wasting space. It really is quite ingenious how Datula X-Face works and what you can do with it in a nuanced way.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&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;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&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;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;So if you combine per-frame bit depth, unequal channel bit depth, and per-48x48px bit depth, you can actually make X-Face videos either using ONLY the needed colors to represent any given scene, without loss, or if that is not helping it can be coupled with the lossy approach of intentionally going under that. And if you used something like GIFski's pngquant-based temporal dithering, you could do some pretty wild compression (well, to the extent that the dither pattern isn't too checkerboard to trigger X-Face's compression worst-case compressed size). Even if you DO lower the depth a bit lower than needed, you could temporally dither as needed (which may be a good way to mitigate the over-dithering expansion risk). Whether intended or not, Datula X-Face's image and video fidelity is very very EXTREMELY selective. A bruteforce-match encoder would be the best option for doing X-Face video encoding so as to not waste space, as long as you do a colorcube analysis or its grayscale analysis sibling to see how many bits are needed for the smallest perfect reproduction or even below that if doing lossy compression (the creator of GIFski helped make a lossy [[GIF]] encoder so it IS possible to make lossless formats lossy) if one needs it even smaller, and then there's the temporal dithering. One could even do what Guetzli does and exploit human perception like it does with [[JPEG]] but for X-Face, though in ALL of these cases the code and potentially encode time would be slower. And this hasn't been fleshed out but an approach to the Arithmetic Coding step akin to what Zopfli and FlexiGIF do may work.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&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;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Oh and in the case of unequal bit depths for RGB, you CAN have a mixture of multi-bit/grayscale and 1-bit color channels, so long as it doesn't go below 3 channels. This naturally brings up the concept of inversion (also doing an X-Face-el trick where you use a depth of 1 in a grayscale X-Face but use a regular X-Face for the purposes of inversion and to deal with the solid-black inflation is not how it works on Datula for reasons that will become clear, and in fact it acts as if there was no X-Face-Type when you try via &amp;quot;X-Face-Type: GRAY; depth=1&amp;quot; which does invert on X-Face-el but the odds of someone intentionally generating this is quite low so it isn't a big problem), and basically if the channel is 1 bit Datula doesn't invert it and if it's more than 1 bit Datula inverts it for each 48×48 region. Also, because grayscale is 1-channel it doesn't need 3 copies of a monochrome X-Face to make 1-bit cells in a multi animation. Also, adding onto the part about Zopfli/FlexiGIF-like tricks the bitstream can technically be made smaller in some cases but not very usefully, only when the bottom right matches a specific pattern (same patterns you see when you make the x-face string something really short, like 1 character). These x-faces are smaller than they would be if you decoded and re-encoded them but also by their nature they're mostly that dot pattern type, which are scrambled. Some even have that worst-case checker pattern, so there is that. An example is using &amp;quot;;-)&amp;quot; for a black checkerboard (which if encoded properly would be a worst-case), and &amp;quot;:-)&amp;quot; for a white checkerboard that would still be at least somewhat bad if encoded properly. So if an encoder ''really'' wants to save space it can change the actual shape to a smaller bitstream, situationally. Oh and assuming one uses image processing capable of identifying subjects this could be useful to be good shortcodes when they are needed most. Also codes like &amp;quot;:-|&amp;quot; have some utility too. And of course the fact this can be done to each bit of an image means you can subtly alter the image a la [[JPEG]] for smallest image size, beyond just doing the per-frame, per-cell, per-channel bit depth adjustments with (temporal) dithering and perceptual (Guetzli-esque tricks) methods. So in a way it is possible to compensate quite well for the inefficiency of this codec compared to other codecs, even ones that are already inefficient. In this case, the very sparse structure CAN save the whole thing in a way that other codecs simply cannot offer. None are nearly as selective codecs&lt;/ins&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;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;So if you combine per-frame bit depth, unequal channel bit depth, and per-48x48px bit depth, you can actually make X-Face videos either using ONLY the needed colors to represent any given scene, without loss, or if that is not helping it can be coupled with the lossy approach of intentionally going under that. And if you used something like GIFski's pngquant-based temporal dithering, you could do some pretty wild compression. Even if you DO lower the depth a bit lower than needed, you could temporally dither as needed. Whether intended or not, Datula X-Face's image and video fidelity is EXTREMELY selective. A bruteforce-match encoder would be the best option for this.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&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;Currently the cleanest extended X-Face: files you can generate with existing software fall within the &amp;quot;pixel art&amp;quot; resolutions at 24bpp.&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;Currently the cleanest extended X-Face: files you can generate with existing software fall within the &amp;quot;pixel art&amp;quot; resolutions at 24bpp.&lt;/div&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 of what you can get out of FaceMake is about what you get out of NTSC Video CD but worse, though online video around the time of the Face header was on par with a theoretical Datula X-Face video file in resolution. Another caveat about mixing depths is that while some cases will have the &amp;quot;depth=N&amp;quot; field be the largest value of the animation (when doing frame changes alone, but this is still under investigation and needs more documenting too), but in cell depth changes and unequal bit depths it either has to be blank or it has to be the other way around. Also XEmacs when given grayscale and geometry displays each 48x48px piece sequentially. FaceMake can fold headers in varying ways. Also the X-Face-el developer information on backstory references a mountain picture and his own face as a test image used for color after finding someone with more than one B&amp;amp;W header before getting the idea to do color. Also a &amp;quot;status=&amp;quot; field existed in unpublished prototypes of X-Face-el's &amp;quot;X-Face-Type:&amp;quot; field and there was an X-Face-Shape: header planned that behaved like &amp;quot;geometry=NxN&amp;quot; in &amp;quot;X-Face-Type:&amp;quot;, and for color, &amp;quot;X-Color-Face:&amp;quot; was planned too, and this is akin to the &amp;quot;RGB&amp;quot; and &amp;quot;depth=N&amp;quot; parts of &amp;quot;X-Face-Type:&amp;quot;. Another catch is that in regards to depths Datula supports, a bit depth of 1 (channel-wise) is inverted compared to all higher depths (a side effect of grayscale being inverted compared to 1bit and compface quirks, and this plus another quirk make header size a thick mess in a situation like 24bit), and the &amp;quot;depth=N&amp;quot; in X-Face-Type has a visible effect on any images with a bit depth lower than the stated depth but it can be removed or lowered. So you may not even need depth=N if you're going to go at it with optimization on a granular, selective level, making each channel of each 48x48px cell in each frame be the exact bit depth needed to render it faithfully to the input content, and no bigger, or you go below that in a lossy approach. In essence, the extensions to X-Face are both quite nice and powerful but they are also just very particular and need to be handled appropriately given just how many quirks the whole codec has and still manages to work.&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 of what you can get out of FaceMake is about what you get out of NTSC Video CD but worse, though online video around the time of the Face header was on par with a theoretical Datula X-Face video file in resolution. Another caveat about mixing depths is that while some cases will have the &amp;quot;depth=N&amp;quot; field be the largest value of the animation (when doing frame changes alone, but this is still under investigation and needs more documenting too), but in cell depth changes and unequal bit depths it either has to be blank or it has to be the other way around. Also XEmacs when given grayscale and geometry displays each 48x48px piece sequentially. FaceMake can fold headers in varying ways. Also the X-Face-el developer information on backstory references a mountain picture and his own face as a test image used for color after finding someone with more than one B&amp;amp;W header before getting the idea to do color. Also a &amp;quot;status=&amp;quot; field existed in unpublished prototypes of X-Face-el's &amp;quot;X-Face-Type:&amp;quot; field and there was an X-Face-Shape: header planned that behaved like &amp;quot;geometry=NxN&amp;quot; in &amp;quot;X-Face-Type:&amp;quot;, and for color, &amp;quot;X-Color-Face:&amp;quot; was planned too, and this is akin to the &amp;quot;RGB&amp;quot; and &amp;quot;depth=N&amp;quot; parts of &amp;quot;X-Face-Type:&amp;quot;. Another catch is that in regards to depths Datula supports, a bit depth of 1 (channel-wise) is inverted compared to all higher depths (a side effect of grayscale being inverted compared to 1bit and compface quirks, and this plus another quirk make header size a thick mess in a situation like 24bit), and the &amp;quot;depth=N&amp;quot; in X-Face-Type has a visible effect on any images with a bit depth lower than the stated depth but it can be removed or lowered. So you may not even need depth=N if you're going to go at it with optimization on a granular, selective level, making each channel of each 48x48px cell in each frame be the exact bit depth needed to render it faithfully to the input content, and no bigger, or you go below that in a lossy approach. In essence, the extensions to X-Face are both quite nice and powerful but they are also just very particular and need to be handled appropriately given just how many quirks the whole codec has and still manages to work. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;The kicker is that the creator, James Ashton, as well as the X-Face-el developers, are university professors. Also the other thing to note is that the developer of Datula's X-Face plugins and their ancestor XFaceTool004 has the same Romanized Japanese name as a major game developer who has quite the studio history, and had programmer roles, so it COULD be him, but since the Wayback Machine is where the Datula plugins are relegated to, it's hard to say for sure if this is the same person.&amp;#160; &lt;/ins&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;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Another factor to consider with regards to the extensions is that the grayscale X-Face headers go from most significant bits to least. As a result of Datula TrueColor mode shoving grayscale into an RGB X-Face's color components, this is inherited. Also, multi/larger size images are ordered specially depending on their dimensions. The way combined modes work is that first color or grayscale if present is involved, then the larger picture, and then the animation. This is why it is so easy to make Datula FaceMake do animation, because it is the last step so frame-by-frame assembly is possible. This is fortunate, though it would seem nobody considered doing this. If they DID do an outright video X-Face and actually managed to send one, this would be interesting, but from what evidence there is out there it is the case that extended X-Face was exceedingly rare. Now, in lieu of Datula, for people who wanted to send color images not within the 8 colors of 3-bit RGB, what they did was use dithering, which was also used by most of the monochrome users to send images that were not just on or off. The extended X-Face headers and Face were designed to allow more-recognizable images to be used. It's unfortunate that they were rarely used. That said, in 3-bit RGB mode it was the case that the dithered images worked enough to do even the Mona Lisa, but it DID get used for at least one face in JPL's file. Oh and Yuuichi Teranishi's drawn X-Face in all its modes was given a 24-bit version for his Twitter/X profile picture, which is 96x96, so it could be fed into Datula to finish the collection. But seeing as he was one of the developers of X-Face-el, him not knowing about a Windows extension of X-Face-el is likely, given that X-Face-el and Linux were tied. &amp;#160;&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;Another factor to consider with regards to the extensions is that the grayscale X-Face headers go from most significant bits to least. As a result of Datula TrueColor mode shoving grayscale into an RGB X-Face's color components, this is inherited. Also, multi/larger size images are ordered specially depending on their dimensions. The way combined modes work is that first color or grayscale if present is involved, then the larger picture, and then the animation. This is why it is so easy to make Datula FaceMake do animation, because it is the last step so frame-by-frame assembly is possible. This is fortunate, though it would seem nobody considered doing this. If they DID do an outright video X-Face and actually managed to send one, this would be interesting, but from what evidence there is out there it is the case that extended X-Face was exceedingly rare. Now, in lieu of Datula, for people who wanted to send color images not within the 8 colors of 3-bit RGB, what they did was use dithering, which was also used by most of the monochrome users to send images that were not just on or off. The extended X-Face headers and Face were designed to allow more-recognizable images to be used. It's unfortunate that they were rarely used. That said, in 3-bit RGB mode it was the case that the dithered images worked enough to do even the Mona Lisa, but it DID get used for at least one face in JPL's file. Oh and Yuuichi Teranishi's drawn X-Face in all its modes was given a 24-bit version for his Twitter/X profile picture, which is 96x96, so it could be fed into Datula to finish the collection. But seeing as he was one of the developers of X-Face-el, him not knowing about a Windows extension of X-Face-el is likely, given that X-Face-el and Linux were tied. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>St. GIGA</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51723&amp;oldid=prev</id>
		<title>St. GIGA at 22:44, 24 April 2026</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51723&amp;oldid=prev"/>
				<updated>2026-04-24T22:44:13Z</updated>
		
		<summary type="html">&lt;p&gt;&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:44, 24 April 2026&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 105:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 105:&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;Another note is that this is far from the only eclectic decision by the developers working with X-Face, and even from the start, because&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;Another note is that this is far from the only eclectic decision by the developers working with X-Face, and even from the start, because&lt;/div&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;X-Face's code has an off-by-one quirk in it that as an effect of it makes a solid black image compress with worse efficacy than a solid white image&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;. The &lt;/del&gt;pieces of a grayscale X-Face are inverted compared to the 1-bit type, due to quirks in compface. Also of note is that extended X-Face headers that don't do anything too wild can display on weaker decoders. For example, grayscale X-Face's first header can display like a regular X-Face but all white is now black and all black is now white. Multi X-Faces that keep simple can end up with their first 48x48 cell displayed. Animated X-Faces kept simple will show their first frame. 48x48 beyond-3bpp Datula X-Faces display in X-Face-el recognizable but with wrong colors. Datula-favoring grayscale content displayed on X-Face-el can also mirror other weaker decoder rendering. Also, X-Face-el and Datula both allow toggling different extensions. Additionally, certain scattered patterns can compress badly. And as predictive as the [[Arithmetic coding]] is, X-Face IS lossless (as is Face due to [[PNG]] use), and it doesn't try to favor face-like shapes, which is an added bonus for the extensions because if either limit existed, extensions may have failed.&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;X-Face's code has an off-by-one quirk in it that as an effect of it makes a solid black image compress with worse efficacy than a solid white image&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;, and incidentally checkerboard patterns are up there in being the worst case for compression efficiency and so it makes dithering, shading, and higher bits of grayscale+Datula headers bloated at times, so like with solid black bloat it is a cause for concern, AND to top it off with regards to solid black vs solid white, the &lt;/ins&gt;pieces of a grayscale X-Face &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;or Datula 24-bit X-Face channels &lt;/ins&gt;are inverted compared to the 1-bit type, due to quirks in compface. Also of note is that extended X-Face headers that don't do anything too wild can display on weaker decoders. For example, grayscale X-Face's first header can display like a regular X-Face but all white is now black and all black is now white. Multi X-Faces that keep simple can end up with their first 48x48 cell displayed. Animated X-Faces kept simple will show their first frame. 48x48 beyond-3bpp Datula X-Faces display in X-Face-el recognizable but with wrong colors. Datula-favoring grayscale content displayed on X-Face-el can also mirror other weaker decoder rendering. Also, X-Face-el and Datula both allow toggling different extensions. Additionally, certain scattered patterns can compress badly. And as predictive as the [[Arithmetic coding]] is, X-Face IS lossless (as is Face due to [[PNG]] use), and it doesn't try to favor face-like shapes, which is an added bonus for the extensions because if either limit existed, extensions may have failed.&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;div&gt;All of these &amp;quot;graceful&amp;quot; fallbacks apply when the headers are read from the first to the last. In the Pan newsreader and apps like it, the rare approach of using the last header in a sequence would mean that the blue channel, the final multi cell, and/or the final frame would be seen, essentially the inverse of the &amp;quot;conventional&amp;quot; way/ordering. So if making a fancy extended X-Face, ideally the first and last 48x48px 1bit header should be significant. Also of note is that if one is building a client that can view grayscale and 1bit and tint them, both the grayscale and the 1-bit headers should each have their own tint setting (this keeps certain image shades visible). &amp;#160;&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;All of these &amp;quot;graceful&amp;quot; fallbacks apply when the headers are read from the first to the last. In the Pan newsreader and apps like it, the rare approach of using the last header in a sequence would mean that the blue channel, the final multi cell, and/or the final frame would be seen, essentially the inverse of the &amp;quot;conventional&amp;quot; way/ordering. So if making a fancy extended X-Face, ideally the first and last 48x48px 1bit header should be significant. Also of note is that if one is building a client that can view grayscale and 1bit and tint them, both the grayscale and the 1-bit headers should each have their own tint setting (this keeps certain image shades visible). &amp;#160;&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;/table&gt;</summary>
		<author><name>St. GIGA</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51718&amp;oldid=prev</id>
		<title>St. GIGA: /* Links */</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51718&amp;oldid=prev"/>
				<updated>2026-04-24T18:03:04Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Links&lt;/span&gt;&lt;/span&gt;&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 18:03, 24 April 2026&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 174:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 174:&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;== Links ==&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;== Links ==&lt;/div&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;* [http://www.cs.indiana.edu/ftp/faces/ Faces Archive] - Lists some X-Face resources&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;* [http://www.cs.indiana.edu/ftp/faces/ Faces Archive] - Lists some X-Face resources&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;.&lt;/ins&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;div&gt;** [https://web.archive.org/web/20170319101112/http://www.cs.indiana.edu/ftp/faces/ Faces Archive] - Archived page&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;** [https://web.archive.org/web/20170319101112/http://www.cs.indiana.edu/ftp/faces/ Faces Archive] - Archived page&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;div&gt;* [http://faces.sourceforge.net/Documents/faces.txt faces man page]&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;* [http://faces.sourceforge.net/Documents/faces.txt faces man page]&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;div&gt;* [[Wikipedia: X-Face]]&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;* [[Wikipedia: X-Face]]&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;div&gt;[[Category:E-Mail, newsgroups, and forums]]&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;[[Category:E-Mail, newsgroups, and forums]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>St. GIGA</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51717&amp;oldid=prev</id>
		<title>St. GIGA: /* Software */</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51717&amp;oldid=prev"/>
				<updated>2026-04-24T18:02:21Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Software&lt;/span&gt;&lt;/span&gt;&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 18:02, 24 April 2026&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 144:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 144:&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;* {{Deark}}&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;* {{Deark}}&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;div&gt;* [http://www.dairiki.org/xface/ Online X-Face Converter]&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;* [http://www.dairiki.org/xface/ Online X-Face Converter]&lt;/div&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;* [https://packages.debian.org/sid/x-face-el x-face-el] — extends the format, in a manner unsupported by other software, adding colour/greyscale pixels, animation, and larger image sizes&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;* [https://packages.debian.org/sid/x-face-el x-face-el] — extends the format, in a manner unsupported by other software, adding colour/greyscale pixels, animation, and larger image sizes&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;.&lt;/ins&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;div&gt;** https://web.archive.org/web/20051029080636/http://www.jpl.org/elips/ - Additional Emacs Lisp scripts that handle X-Face, plus examples of extended X-Face.&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;** https://web.archive.org/web/20051029080636/http://www.jpl.org/elips/ - Additional Emacs Lisp scripts that handle X-Face, plus examples of extended X-Face.&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;/table&gt;</summary>
		<author><name>St. GIGA</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51716&amp;oldid=prev</id>
		<title>St. GIGA: Add Saku's name</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51716&amp;oldid=prev"/>
				<updated>2026-04-24T18:01:18Z</updated>
		
		<summary type="html">&lt;p&gt;Add Saku&amp;#039;s name&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 18:01, 24 April 2026&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 149:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 149:&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;* [https://web.archive.org/web/20040405125946*/http://www.onsystems.co.jp Datula] - A Japanese e-mail client which supported plugins in versions such as [https://web.archive.org/web/20040405125946*/http://www.onsystems.co.jp:80/download/datula1.52.01.01.exe 1.52.01.01], two of which involved extended X-Face.&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;* [https://web.archive.org/web/20040405125946*/http://www.onsystems.co.jp Datula] - A Japanese e-mail client which supported plugins in versions such as [https://web.archive.org/web/20040405125946*/http://www.onsystems.co.jp:80/download/datula1.52.01.01.exe 1.52.01.01], two of which involved extended X-Face.&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;div&gt;** [https://web.archive.org/web/20001025151154/http://www.find.co.jp:80/~saku/download/dfaceex1001.zip Datula DFaceEX X-Face Plugin] - An X-Face viewer plugin for Datula capable of viewing extended X-Faces.&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;** [https://web.archive.org/web/20001025151154/http://www.find.co.jp:80/~saku/download/dfaceex1001.zip Datula DFaceEX X-Face Plugin] - An X-Face viewer plugin for Datula capable of viewing extended X-Faces.&lt;/div&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;** [https://web.archive.org/web/20080828060424/http://cgisv.chldren.net:80/~saku/xfaceplugin.html XFacePlugin with FaceMake] - Another viewer plugin by the same author (saku/Saku works) which includes a program called '''FaceMake''' which, on the latest version (Datula's is, but the version of FaceMake shipped in X-FaceTool004, a version for e-mail clients like EdMax and Eudora, among others, isn't) combines the X-Face-el extensions into a unified format of 24-bit RGB with animation (needs to be done frame-by-frame, but the decoder will happily decode it, at least where Datula is concerned) and beyond-48x48px. The 24-bit support in FaceMake doesn't exist in the build bundled with X-FaceTool004, unlike the FaceMake for Datula's X-Face plugin that it is bundled with. FaceMake is also picky, but it does support beyond-48x48px and animated grayscale images (assuming frame-by-frame assembly for animated) (or both), unlike X-Face-el. &amp;#160;&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;** [https://web.archive.org/web/20080828060424/http://cgisv.chldren.net:80/~saku/xfaceplugin.html XFacePlugin with FaceMake] - Another viewer plugin by the same author (saku/Saku works&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;/SAKUDA Yasunori&lt;/ins&gt;) which includes a program called '''FaceMake''' which, on the latest version (Datula's is, but the version of FaceMake shipped in X-FaceTool004, a version for e-mail clients like EdMax and Eudora, among others, isn't) combines the X-Face-el extensions into a unified format of 24-bit RGB with animation (needs to be done frame-by-frame, but the decoder will happily decode it, at least where Datula is concerned) and beyond-48x48px. The 24-bit support in FaceMake doesn't exist in the build bundled with X-FaceTool004, unlike the FaceMake for Datula's X-Face plugin that it is bundled with. FaceMake is also picky, but it does support beyond-48x48px and animated grayscale images (assuming frame-by-frame assembly for animated) (or both), unlike X-Face-el. &amp;#160;&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;div&gt;Furthermore, if a 24bit 48x48px X-Face of any type is loaded in X-Face-el, it will have wrong colors, but anything larger is garbled.&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;Furthermore, if a 24bit 48x48px X-Face of any type is loaded in X-Face-el, it will have wrong colors, but anything larger is garbled.&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;/table&gt;</summary>
		<author><name>St. GIGA</name></author>	</entry>

	<entry>
		<id>http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51715&amp;oldid=prev</id>
		<title>St. GIGA: Preliminary edit on inversion with bit depth</title>
		<link rel="alternate" type="text/html" href="http://fileformats.archiveteam.org/index.php?title=X-Face&amp;diff=51715&amp;oldid=prev"/>
				<updated>2026-04-24T08:55:54Z</updated>
		
		<summary type="html">&lt;p&gt;Preliminary edit on inversion with bit depth&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 08:55, 24 April 2026&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 26:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 26:&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;Essentially, under controlled conditions, you can do a limited form of how video codecs handle size reduction by exploiting that the human eye is more sensitive to changes in brightness than changes in color. The thing with extended X-Face in this situation is that it does not even have to follow a lossy approach, especially given that this is NOT the only type of space savings that can be done here. And for the record higher bit depth RGB headers have the same inverted status as grayscale because it literally IS 3 grayscale X-Face headers merged into a TrueColor RGB X-Face header.&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;Essentially, under controlled conditions, you can do a limited form of how video codecs handle size reduction by exploiting that the human eye is more sensitive to changes in brightness than changes in color. The thing with extended X-Face in this situation is that it does not even have to follow a lossy approach, especially given that this is NOT the only type of space savings that can be done here. And for the record higher bit depth RGB headers have the same inverted status as grayscale because it literally IS 3 grayscale X-Face headers merged into a TrueColor RGB X-Face header.&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;One thing that has been tested in Datula (but is still under investigation) is that changing the grayscale depth in a multi grayscale (albeit less investigated) or TrueColor X-Face is possible on each 48x48 cell. Such a feature is capable of improving compression. A lot of the special part of why Datula can do what it can do is that because of how the oldest grayscale X-Face code would create X-Face-1: through X-Face-7: headers AND that X-Face-el ALSO defined its grayscale as using a field in X-Face-Type:, it means that 24bit via taking grayscale headers and shoving them into each channel of an RGB X-Face is possible, AND that you can fiddle with the depth in each channel, frame, and 48x48 cell, though doing something like switching from TrueColor in one cell to 1-bit BW in the other cell requires filling that second cell with 3 copies of the 1-bit header. Also all of this is creepily similar to NTSC color. Also the inversion of the grayscale code is preserved and you can make 1-bit grayscale X-Face headers, so you could potentially do something with that &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;if &lt;/del&gt;you're clever, and do it because of the huge difference in output size between solid black (larger due to an off-by-one error, and this is pretty bad for extended X-Face due to what those look like split-up, especially when you add the grayscale and TrueColor inversions) and solid white. But simply put, it IS possible to significantly optimize extended X-Face to not waste space, and in a way creepily similar to the NTSC-J inspiration AND modern video file codecs, though regrettably this historically was fairly niche. JPL's (NOT Jet Propulsion Laboratory) grid of X-Face images that has a few of the extended types only collected 3-bit color and multi X-Faces, but not grayscale, Datula RGB, animated X-Face, or X-Face code. Even though the file was a GIF. The archived 1998 version of the image DOES feature a very tall (tall multi is harder to generate than wide multi if you use RGB and this didn't) multi X-Face as well as an RGB multi X-Face that is 96x48 and has Japanese Kanji over color bars. So we know that SOME mixing of modes happened back in the day, and the fact that Yuuichi Teranishi made different expressions, as well as 2-bit grayscale, monochrome animation, and 3-bit RGB of his X-Face cartoon avatar implies that SOME people tried to go for an ALL modes header pool, but nobody seemed to have fully mixed the modes to the max historically, most likely due to the high usage of 56K and ISDN as slow as they are. But as long as you avoid throwing multi into a Datula X-Face you can do this safely. Sadly, no one tried.&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;One thing that has been tested in Datula (but is still under investigation) is that changing the grayscale depth in a multi grayscale (albeit less investigated) or TrueColor X-Face is possible on each 48x48 cell. Such a feature is capable of improving compression. A lot of the special part of why Datula can do what it can do is that because of how the oldest grayscale X-Face code would create X-Face-1: through X-Face-7: headers AND that X-Face-el ALSO defined its grayscale as using a field in X-Face-Type:, it means that 24bit via taking grayscale headers and shoving them into each channel of an RGB X-Face is possible, AND that you can fiddle with the depth in each channel, frame, and 48x48 cell, though doing something like switching from TrueColor in one cell to 1-bit BW in the other cell requires filling that second cell with 3 copies of the 1-bit header. Also all of this is creepily similar to NTSC color. Also the inversion of the grayscale code is preserved and you can make 1-bit grayscale X-Face headers, so you could potentially do something with that &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;IF &lt;/ins&gt;you're clever, and do it because of the huge difference in output size between solid black (larger due to an off-by-one error, and this is pretty bad for extended X-Face due to what those look like split-up, especially when you add the grayscale and TrueColor inversions) and solid white. But simply put, it IS possible to significantly optimize extended X-Face to not waste space, and in a way creepily similar to the NTSC-J inspiration AND modern video file codecs, though regrettably this historically was fairly niche. JPL's (NOT Jet Propulsion Laboratory) grid of X-Face images that has a few of the extended types only collected 3-bit color and multi X-Faces, but not grayscale, Datula RGB, animated X-Face, or X-Face code. Even though the file was a GIF. The archived 1998 version of the image DOES feature a very tall (tall multi is harder to generate than wide multi if you use RGB and this didn't) multi X-Face as well as an RGB multi X-Face that is 96x48 and has Japanese Kanji over color bars. So we know that SOME mixing of modes happened back in the day, and the fact that Yuuichi Teranishi made different expressions, as well as 2-bit grayscale, monochrome animation, and 3-bit RGB of his X-Face cartoon avatar implies that SOME people tried to go for an ALL modes header pool, but nobody seemed to have fully mixed the modes to the max historically, most likely due to the high usage of 56K and ISDN as slow as they are. But as long as you avoid throwing multi into a Datula X-Face you can do this safely. Sadly, no one tried.&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;So if you combine per-frame bit depth, unequal channel bit depth, and per-48x48px bit depth, you can actually make X-Face videos either using ONLY the needed colors to represent any given scene, without loss, or if that is not helping it can be coupled with the lossy approach of intentionally going under that. And if you used something like GIFski's pngquant-based temporal dithering, you could do some pretty wild compression. Even if you DO lower the depth a bit lower than needed, you could temporally dither as needed. Whether intended or not, Datula X-Face's image and video fidelity is EXTREMELY selective. A bruteforce-match encoder would be the best option for this.&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;So if you combine per-frame bit depth, unequal channel bit depth, and per-48x48px bit depth, you can actually make X-Face videos either using ONLY the needed colors to represent any given scene, without loss, or if that is not helping it can be coupled with the lossy approach of intentionally going under that. And if you used something like GIFski's pngquant-based temporal dithering, you could do some pretty wild compression. Even if you DO lower the depth a bit lower than needed, you could temporally dither as needed. Whether intended or not, Datula X-Face's image and video fidelity is EXTREMELY selective. A bruteforce-match encoder would be the best option for this.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>St. GIGA</name></author>	</entry>

	</feed>