Sixel

 

La technologie sixel (six + pixel) permet d'afficher des images bitmap sur notamment les terminaux et imprimantes DEC (Digital Equipment Corporation) VT340, datant de 1987, mais elle est probablement bien antérieure à cela (début des années 80, voire fin des années 70).

 

https://fr.wikipedia.org/wiki/Sixel

 

Il est possible de profiter de cette technologie sur nos terminaux modernes, via l'émulation VT.

 

Le site "Are We Sixel Yet?" permet d'ailleurs de lister la prise en charge de cette technologie sur la plupart des Terminaux actuel.

 

https://www.arewesixelyet.com/

 

 

 

 

Pour xterm, il faut (parfois) le recompiler mais dans une version récente de xterm sur Debian Bookworm, je n'ai pas eu besoin de le faire :

 

./configure --enable-sixel-graphics --enable-regis-graphics

 

Et il faudra le démarrer avec ces options (cela cassera la gestion de l'unicode) :

 

xterm -ti vt340 +u8

 

 

 

 

mlterm -y vt340

 

 

 

 

 

img2sixel image.jpg

 

 

 

Pour afficher des images dans le terminal avec la nouvelle commande lsix :

 

 

function lsix() { montage -tile 7x1 -label %f -background black -fill white "$@" gif:- | convert - -colors 16 sixel:-; }

 

 

https://github.com/hackerb9/lsix

 

 

La séquence d'échappement [esc] s'écrit avec \e

 

 

 Exemples sixel

 

 

echo -e '\e

Pq"1;1;16;16#0;2;97;97;97#1;2;0;0;0#2;2;91;91;91#3;2;94;94;94#4;2;75;75;75#5;2;66;66;66#6;2;19;19;19#7;2;82;82;82#8;2;9;9;9#9;2;78;78;78#0!4^FF@@FNBB@B~~$#7_#1___?weCGOGCA{$#2!4?W??A#3??C$#8!4?_#5?W???O$#4!7?g___w{$#6!7?OO-#1Rkc_O_!7?@eW$#0c#4RBFN^!7~}W$#2G#9?OO#7_#0!9?@f$#5??G#8G-#0!6NKKKGGGKMNN$#1!6?@@BACCA@$#2!6?A#6A#4?CBB@$#7!9?@~

\e\'

 

echo -e '\e

Pq"1;1;110;104#0;2;6;9;13#1;2;19;25;16#2;2;44;56;28#3;2;28;38;19#4;2;41;53;28#5;2;50;66;31#6;2;31;41;22#7;2;53;72;35#8;2;35;44;22#9;2;35;47;25#10;2;9;13;13#11;2;25;35;19#12;2;47;63;31#13;2;22;28;16#14;2;16;22;16#15;2;53;69;35#16;2;9;16;13#17;2;22;31;19#18;2;44;60;28#19;2;25;31;19#20;2;13;16;13#21;2;38;50;25#22;2;16;19;16#23;2;28;38;22#0!110~-!44~N??wpBFN^!29~^^NNN^!22~$#1!44?_@???_#3!32?_?O#6_O#13_$#10!44?O#6CSCA???_#12!30?_#4_?_$#9!45?O!4?GO#2!33?O$#8!45?GG??C$#4!45?_A?G$#3!45?A?@#7CGo_$#2!46?@#5A?O$#11!46?_-#0!43~F?_}~~~{wo?@BFN^!11~^^NNfbbpxw{{}}{}{?@F!20~$#16!43?G#12_!6?A!5?_#6!12?_!5?C#1A!5?@?@?_?o$#20!43?o#3C!6?C?@#19AC#17G#1O_#5!12?_#4_!4?C?A!7?@s$#2!44?OA#14@???A#7@AKwo_#9!15?O?W#17O!4?@???@?@#6GA$#9!44?G#4D!6?G#5QCGO#12!16?O#2?G??C#18?A@@#20?A?A??G$#11!44?A#1O#8!4?@#15?D#22_#20!19?_#22?C#16O??@#11?A!5?O$#13!44?@#6G#21!30?G#3GAC#21!7?AG$#9!87?C-#0!31~!5^!5NFF?G!5N!4^]wo???@Ffbrpxw{{}}!15~}??!20~$#1!31?_!9?G??C!4?O#4???_???O!4?GG?C#19?C#12?@#20!17?@#2A#3O$#6!32?_!4?O!4?G!5?O#3!5?_!5?_!7?@#4!19?L#6_$#2!33?_#5___???OOOGO!5?__!4?C??_?O#6O???A#8!21?_#17@$#14!36?O#15_#7!5_o!6_!5?@BN][W#1??S?A???A#21!18?O#19M$#4!38?O#12O???C?OO!5?_!5?_#2AC!5?CA??@$#17!43?@#9A#2??O#8!6?@#18A??@??G!6?A$#21!43?A#18@#16!10?C?_#14?@#20A_!5?@???@$#23!56?G#9!7?K#17G-#0!27~^B?o}!4{!5w!5o!5_#4O!9?O!8?C#15??G#13C#16?O#1!11?C#2W#16B$#20!27?_C!7?C#2??CC!5?G#1O#19O#11O#16?_!4?_?___???@#6QO!6?C!14?@#4C#20{$#6!28?GP??A!4?C!5?G!6?O#20?!4_?_???@@@#3??AOO#1A!5?OG#11!11?A#9@$#2!28?O#21G!8?C!6?G#22O#12!5?O???OO#18P#2OO???A#19??A!6?O#22!13?G#18_$!28?_#12E!4?A!6?C#3G#8?G!14?@!4?O#17???A#12C!4?G#21!14?A$#19!29?_#15@!6?A#14???G#13!18?@#0!4_!5`!5bff!11~o??!19~$#16!30?K#7!7@!5B!5F!9N!6M!5K!5G$#17!30?A#4??A#5?AA!5?C!4?G!5?OOO?@!5?A!4?C#11!5O$#21!62?O#9O!7?CC??G-#0!5~NBr!5b!7B!5@!7?!5@!4B!4F!4N!40~??!19~$#11!5?O!5?O#8C#16_#3??CC!5?A!5?@!9?C#12G!4?_O#21_#16O#2!40?w#20~$#21!5?_???C#7!6GOO!4W[[[{!4}!5{!4wo!4O#18??_#22?_#18!40?F$#6!6?c!5?OCCC??C!8?@#2???A!9?G$#12!6?G!7?O!6?C???A#16!5?@!4?A#9C#6C!4?G???O$#4!6?OKC!4?O#23!5?_#21_???A#8!7?A#11A#19A#1A!8?G$#20!8?O!5?!4_??A!4?@@???@!9?C$#18!8?G#5G!5?OGG!4?__!4?@?A!4?C???G??__oO$#1!9?O!8?_??A#19A#15?_#4!11?C!5?G$#9!10?CC!7?C#2C#18_#15!18?__$#19!10?O-#0!4~B?o!19~!11}!52~w_F^!17~$#1!4?C?@#14!19?@#3@#9@#2@#4@@#8@#6@#11@#1@#22@#2!52?BC?_$!4?_C#16G#6!82?C?g$!4?GO#20E#14!83?P#5O$#4!4?O#11_#17!84?A$#12!5?B#18!84?G$#21!5?G-#0~~~p__FNN^!81~}woBF^!13~$#1???AOA#7O__#16!82?@#20C???_$#19???C?@#6G#13?O#3!83?AG#6CO$#14???G#4E!4?_#18!82?@#2AW#1G$#2!4?H#12G?O#4!85?C#14_#12_$#18!5?O#21_#11!86?@$#22!5?C-#0!7~}{woo_@BBFNN^!75~}w`FN!10~$#3!7?@???@#6O#17A#13?C#9G#11?O#9!76?@#4@?G#2_$#7!8?@@AEK[Woo_#15_#5!77?A#12C#6_#13O$#19!8?A#5A@???_G?O#17!78?C#19A#18O$#1!9?C???_#21!83?G$#18!10?C?A!6?_#22!77?O$#20!10?G#21G??C$#16!12?@-#0!14~}}{wo_??@@BBFNN^!68~}{o`F^!6~$#20!14?@#18@#2A???O!8?_#1!68?@#4@AO#5_#22_$#7!16?@@BFM]{{woo__#6!70?A@C#9O$#15!17?A??@#4_??C#19C#21G#11?O#2!71?C#18G#16G$#9!17?C#5C!6?G#19!74?G#20A$#3!18?G!4?A$#12!19?G??A!4?O$#1!19?O#16_#8@-#0!6~@@??__ooo!13_!5?@BBFn!64~}w@Fn~~~$#12!6?GOgG!9?G??@#21!4?O!6?C#12G#3G#6!65?@?a#2O$#18!6?O???G!7?G#11@!4?O#2???O#20___???C?O#1!65?C??O$#16!6?A?@??O???OO#17?@#5?GG!7?OO??C#17__#14_#18!66?B#21GG$#3!6?_#7cCC!12EM!7NM][WWOO#12!67?C#8_$!6?C#6I#22O_O!5@??O#3?@!4?O#16??_#15?@#22?__#19!70?O$#2!8?A!8?G#6???@!4?O#10!5?@#1A$#20!9?@@!6?O#13???O#19OO!7?@#18A$#5!9?A#4?G??GGG$#14!9?O#21??GG#1??@@?OO-#0!7~{wo`BFNN!14^!69~NFbpx{}!5~$#12!7?@!4?G!6?___#4???_#9_#8_#3_#21!69?_oG?C?@$#14!7?A!4?_#9_#20O#16!83?OGC#10A#6A@$#5!8?ACG??O#9!86?OK#4?A$#7!8?@ACGO$#3!8?C#18@!6?___???_$#6!9?G#2AO??__!7?__$#17!10?O#4C$#16!11?_-#0!22~!8}!4{wwwxxx`!6@!8B!4FNNN^!28~^NFbpx{}!11~$#20!22?@#1@!6?A#18?A#20@@#4A??C!8?C!8?G#8G#1G#13??O#9_#10!28?_#14O#6_OG#9C$#19!24?@#3@#6@!4?@!4?C?A#3AA#7K{!8w!7o!4_#18!30?_#1GC#4CAB@$#9!27?@???A!5?C#5??CO?CC!8?G!4?O#2!34?OG#20A$#2!28?@!5?A!4?CG_!4?C!8?G!4?O$#5!29?@#12@??A#14C#16@@#8A#17??O??A#1A#12C!8?G!4?O$#22!32?@#11??C#21A#19!4?AA#14??A#20A#9?C#6CCC#3C#19C#22C$#15!51?GG-#0!41~}{o_#17_#5!16?@?GO#2_#1!18?_???A#6CA#8@$#1!41?@#5@CGO_#1!16?@#0@F^!18~^NFbpw{}!17~$#4!42?A#7BFN^!15~}{o_#12!20?_???A@$#19!43?G#3O#12!18?A#16A#19G#17!20?O#19gC#16?@$#21!64?C#18!22?O#2GC$#3!88?OG-#0!47~}}{{{wwooo___!8?@BN^!7~^NFbpw{}!23~$#9!47?@!8?G#22O???_#23_#12_!4?C#15O_#6_!8?OGC#11A#5?@#13@$#5!48?@??AA??C#17??O#6O#3!7?@??O!8?_#12_???A$#15!49?@!8?G#5!8?A#1A#21G#2!11?OG#18C$#19!49?A#7@@@BBBFFFNN^^^~~~{w_#20!11?_#1OGDA$#2!50?A!6?G??O$#3!52?C??G$#4!53?C#16G!5?_!8?C$#18!54?C-#0!65~}}}{{wwwoprrp{}!30~$#6!65?@??A??C??G?GA@$#12!66?@??A!9?@$#5!67?@??A??CC#9GC#16G$#15!68?@??A?A#3A#4C#21?C$#7!69?@@@A#20@$#14!70?C??G$#2!72?C!5?A$#18!72?@-#0!110~-!110B

\e\'

 

 

 

 

 ReGIS

 

Il existe également la technologie ReGIS, pour afficher des images vectorielles, c'est une sorte d'ancêtre du postscript, juste antérieur de quelques années, 1981 contre 1982-1984 :

 

https://en.wikipedia.org/wiki/ReGIS

 

 

Idem que pour sixel, il faudra configurer xterm pour gérer le format ReGIS :

 

./configure --enable-regis-graphics

 

 

Note : il semble que les macro (macrographs) ne s'affichent pas dans xterm

 

 

Le projet ReGIS pour arduino est une interface qui délègue la génération des vecteurs à l'arduino. C'est également un convertisseur d'une syntaxe plus lisible vers la syntaxe ReGIS

 

https://github.com/feilipu/ReGIS

https://feilipu.me/2022/09/28/regis-serial-graphics-for-arduino-rc2014/

 

Cela s'interface, comme expliqué dans le projet github, avec un adaptateur série comme picocom :

 

xterm +u8 -geometry 102x35 -ti 340 -tn 340 -e picocom -b 115200 -p 2 -f h /dev/ttyUSB0

 

 

Comme idées possibles d'utilisation, on pourrait voir un capteur arduino qui s'affiche directement dans xterm sur un raspberry connecté, évitant de passer par une interface web.

 

 

Mais on peut également afficher des images au format ReGIS directement depuis xterm, en le démarrant avec

 

xterm +u8 -geometry 102x35 -ti 340 -tn 340

 

 

 

Exemples ReGIS :

 

echo -e '\e

P0p
S(E)(C1)
P[100,440]
V(B),[+100,+0],[+0,-10],[-100,+0],(E)
P[500,300],F(C[+100])

\e\'

 

 

echo -e '\e

<code>

\e\'

 

 

echo -e '\e

P1pS(E)W(I(M))

P[193,227]V[][260,160]V[][223,096]V[][211,021]V[][150,050]V[][112,009]V[][103,049]V[][080,053]V[][073,059]V[][067,073]V[][018,077]V[][008,107]V[][055,148]V[][018,152]V[][013,159]V[][025,176]V[][147,185]V[][193,227]
P[103,049]V[][181,065]V[][129,066]V[][073,059]
P[067,073]V[][108,082]V[][018,077]
P[008,107]V[][090,158]V[][018,152]
P[090,158]V[][055,148]P[095,180]V[][117,209]V[][193,227]

\e\'

 

 

 

 Autres

 

Dans un autre genre, CFR est amusant. Dessiner avec 5 instructions seulement :

 

CFR

 

 

 

https:susam.net/cfr.html#5

 

 

 

C[RRR][[[FFFFFF]]][RRRRR][CCC][[FF]]R[[FF]]R[[[FF]]]R[[F]]FRR[[FF]]FF[[R][R][R]FF[[FF]]RRF[[F]]R[[FFFF]]R[[FF]]R[FF]FFRRCCC[RR][[C]C]CFF[RRR][[FFF]]FFF[RRR][[[FFFFFFF]]][RRR]CCCC[[[FF]F]]FFFF[RFFFFFF][[[F]]]R[FF]FR[[[FFF]]]RFFFFRRFFFFRR[[R]RRFFFFRRFFFFRR]

 

 

 

https:susam.net/cfr.html#C3B12F2RFEFE3F6R2E2B3F3E3R2B2FE2BR3CEC2E6

 

 

 

https:susam.net/cfr.html#B3F4RF4BF3BR2CBF2C2R2F2E2R4F5E4

 

 

 

Dans le même style il y a le bytebeat :

 

https:dollchan.net/bytebeat/#v3b64q1ZKzk9JVbJSKtHSKFEzNDO2MLE3tzLV1NIw1dUwViuxs7PQ1LSzAzJ1gWygEhMDSzN7IytDM03NGogIRBNUxtjKxMpYU6kWAA

 

Des mélodies assez complexes à partir de formules simples…