Zeit-Boxen-Tool .: Konsolenbild
Ein glyph.--basierter Terminal Renderer mit Hilfe von shape---Matching-Algorithmen Unterstützt Bilder, animierte GIFs, ,-Videos und Live-Untertitel mit mehreren Rendermodi einschließlich Braille für maximale Details
Das Ziel ist nicht Pixel-Genauigkeit, es ist Überwachungsfähigkeit unter extremen Bandbreitenbeschränkungen.
Einleitung
Dies ist eins meiner "-Zeiten---Boxed -"-Werkzeuge-MSC3-Kleinprojekte, die ich als eine begrenzte Zeit Übung bauen...,-Normalerweise über ein paar Tage..-Die Idee ist es, einen Juckreiz zu zerkratzen ?,-Lernen Sie etwas Neues und Schiff etwas Nützliches, ohne sich in endloser Funktion kriechen
Dieses Projekt begann, als ich auftrat. Alex Harri-' ausgezeichnete Artikel über ASCII RenderingSeine Herangehensweise an die Formierung von -Matching und nicht einfache Helligkeit Mapping war faszinierend, und ich dachte, dass ".I bauen könnte, dass in C... Was begann als eine einfache ASCII Bildbetrachter wuchs zu einem Terminal-Grafiksystem mit mehreren Rendering-Modi,.Video-Unterstützung und sogar eine KI-Integrationsschicht.
Der vollständige Quellcode ist verfügbar auf GitHub-: Die Daten werden auf der Grundlage der in Anhang I der Verordnung (EU) Nr. 1305/2013 aufgeführten Daten und Informationen übermittelt, die von den zuständigen Behörden des betreffenden Mitgliedstaats gemäß Artikel 2 Absatz 1 Buchstabe b der vorliegenden Verordnung erstellt wurden.
Das neueste Release herunterladen GitHub veröffentlicht
NuGet-Pakete
mostlylucid.consoleimageCore-Rendering-Bibliothekmostlylucid.consoleimage.videoVideounterstützung (,FFmpeg,),mostlylucid.consoleimage.transcriptionTranskription von Whisper-Transkriptionenmostlylucid.consoleimage.playerDokument-Wiedergabemostlylucid.consoleimage.player.spectreAnzeige der Konsolenwiedergabe-Wiedergabewertemostlylucid.consoleimage.spectreIntegration der Konsolen
Schnellstart
ConsoleImage ist eine einzelne CLI, die Medien in Glyphen verwandelt - driven Terminal-Video Das Punkt ist nicht exakt Pixel.
Installieren
Der einfachste Weg, um loszulegen ist es, die neueste Version Binär herunterladen von GitHub veröffentlicht und stellen Sie sicher, consoleimage ist auf Ihrer PATH.
consoleimage photo.jpg
consoleimage "https://youtu.be/dQw4w9WgXcQ" --subs whisper

Neu in den u.a. YouTube-Überschriften
ConsoleImage ist leise zu einem Full-Terminal Media Player herangewachsen..-Version fügt YouTube-Wiedergabe hinzu.MSP2e auto.MSSK3edownloaded Abhängigkeiten und Live-KI-Untertitel, die von Whisper angetrieben werden.,e alle in den gleichen Befehl eingewickelt und es funktioniert einfach..."e flow...
Zero---Setup Auto Downloads
Abhängigkeiten werden bei der ersten Verwendung heruntergezogen und lokal zwischengespeichert, so dass neue Funktionen ohne manuelle Installationen funktionieren.
| -Komponente Erstes Download Trigger Speicherort | -Component |
|---|---|
Erste Video-Wiedergabe ~/.local/share/consoleimage/ffmpeg/ |
|
Erste YouTube-URL ~/.local/share/consoleimage/ytdlp/ |
|
Flüster-Laufzeit --subs whisper |
~/.local/share/consoleimage/whisper/runtimes/ |
Flüstermodelle für die ersten Transkriptionen ~/.local/share/consoleimage/whisper/ |
Unter Windows-Caches live unter %LOCALAPPDATA%\consoleimage\.
Auf macOS.,-Caches leben Sie unter Ihrem Benutzer, dem lokalen App-Datenordner, typischerweise ~/Library/Application Support/consoleimage/).
Verwendung -y / --yes um alle Downloads zu bestätigen
YouTube-Wiedergabe
YouTube-URLs spielen direkt im Terminal über die gleiche Render-Pipeline wie lokale Dateien. bedeutet die gleichen Modi: Breiten und Ausgabeformate gelten unabhängig davon, ob Sie live schauen oder einen Clip speichern. haben Sie ein benutzerdefiniertes yt-- dlp install.,. ConsoleImage kann auf es zeigen.
Untertitel und Live-Transkription
Untertitel kommen aus drei Quellen - bestehende Dateien - , - YouTube-Unterschriften - oder Live-Flüstertranskription - . - Whisper läuft
der hintergrund in 15-second chunks" , bleibt dem playback-, und Caches .vtt Dateien, so dass Wiederholungen sind instant.
mehrere Modellgrößen – Sprachauswahl – , und gehostete Endpunkte, damit Sie Geschwindigkeit für Genauigkeit traden oder die Arbeit ausladen können
Transkription: Nur Ausgabe wird auch unterstützt., , die ConsoleImage in einen Untertitelgenerator verwandelt, der andere Werkzeuge einspeisen kann ohne Rendering von Video-.
Diashow-Modus
Zeigen Sie es auf einen Ordner und es wird eine Bild-Diashow mit Tastatursteuerungen. Voraus-.
Vom einfachen Viewer zur Terminalgrafik
Was als Wochenende Projekt begann, um Alex Harri zu implementieren' s Algorithmus wurde etwas ehrgeizigeres... die Evolution ging ungefähr so
- TagGrundlegende ASCII-Rendering mit Form
- TagFarbunterstützung und animierte GIF-Wiedergabe hinzugefügt
- TagImplementierter ColorBlocks-Modus für höhere Treue
- TagErgänzter Braille-Modus für die Auflösung von 8,x
- SpäterVideo-Unterstützung ,-Matrixeffekte ,-Dokumentformat ,-MCP-Server
- Viel späterTemporale Stabilisierung für die Bewegung – ,® Wahrnehmungsfarbausgleich
Das Scope-Kreuzchen war real, aber jede Ergänzung fühlte sich natürlich und nützlich an. Jetzt verarbeitet es Bilder..... ,... GIFs.... Videos.... und bietet sogar einen MCP-Server für die KI-Toolintegration....
Die drei Rendering-Modi
ConsoleImage bietet drei verschiedene Möglichkeiten, Bilder im Terminal zu rendern.
flowchart LR
A[Source Image] --> B{Choose Mode}
B --> C[ASCII]
B --> D[ColorBlocks]
B --> E[Braille]
C --> F[Shape-matched characters]
D --> G[Unicode half-blocks]
E --> H[2×4 dot patterns]
style A stroke:#4a9eff
style B stroke:#ff6600
style C stroke:#00aa00
style D stroke:#00aa00
style E stroke:#00aa00
| -Modus Befehl Auflösung Am besten für | -Modus | |
|---|---|---|
| Braille | consoleimage photo.jpg Pixel pro Zelle ENDGÜLTIG Maximales Detail |
|
| ASCII | consoleimage photo.jpg -a Weitere Informationen: http:europa.eu.int/comm/index_de.htm |
|
| Farbschlösser | consoleimage photo.jpg -b 2×, vertikal (, halbig -, Blöcke ), Fotos ,, hohe Treue |
, |
Braille ist die Standard-Verwendung -a für ASCII oder -b für ColorBlocks-.
Terminalprotokoll-Modi
Einige Terminals unterstützen Inline-Grafikprotokolle pixel-- akkurate Rendering, während die gleiche Pipeline und Tooling
Modusvergleich
Hier ist die gleiche animierte GIF in jedem Modus dargestellt.
Farbschlösser für die Farbe |
|-------|---------|----------------|-------------|
|
|
|
|
|
Ausgeglichene Zeichen Ausgeprägte Buchstaben Ausgedrückte Zahlen Ausgemusterte Zahlen Ausgedehnte Zahlen Keine Farben Ausgefärbte Zahlen Unicode-Halbzahlen Ausgeblendete Zahlen
Der ASCII-Ausgang zeigt die Form, die bei der Arbeit passt. / und \Verwendete Kurven ( und )Zeichen und unterschiedliche Dichten verwenden Zeichen wie @, #, *L 347 vom 20.12.2013, S. 671. .Die monochrome Braille-Version ist kleiner als die Farbmodi bei voller Punktauflösung.
Braille-Auflösung Der Amiga Boingball
Der Auflösungsvorteil wird klar mit dem klassischen Amiga hüpfenden Ball eine Animation, die glatte Kurven und saubere Diagonalen erfordert.
| Brillanz der (Monochrom, )Brille der MSC4Farbe des | |
|---|---|
![]() |
![]() |
| -Auflösung ohne Farbe | -Aufauflösung mit voller Farbe MSC6-Auflosung |
Beide verwenden das gleiche -2×4 dot Grid.Die monochrome Version verzichtet auf ANSI Farbcodes, die wesentlich kleinere Ausgabe erzeugen.
Monochrome Braille-Brille-:-kompakte Schnell
Für Kurzvorschaus-Sessions oder Bandbreiten--Beschränkte Umgebungen-MSC3Monochrome Braille--monoDie Farbe der Tropfen ist vollständig.
consoleimage animation.gif --mono -w 120
Die Ergebnisse sind Verkleinerte als Farbmodi unter Beibehaltung der vollen Auflösung, die Boingball-Animation oben, ?, Die monochrome Version ist 259, KB versus 863, KB für Farbe Braille, MKK4, Für Text, -, schwerem Inhalt oder Linienkunst, MSC6, Monochrom sieht oft aus besser weil es kein Farbrauschen gibt, das mit den Forminformationen konkurriert
Wie funktioniert ASCII Shape?-?
Traditionelle ASCII-Kunst verwendet Helligkeitsmapping .- , dunklere Pixel erhalten dichtere Zeichen wie @ oder #Feuerzeug Pixel erhalten spärliche wie . oder Dies funktioniert, aber ignoriert die tatsächliche Form von Zeichen
Alex Harri-'-Ansatz ist klüger analysiert die visuelle Form jedes Zeichens, dann passen Sie Bildregionen mit Charakteren mit ähnlichen Formen zusammen. / oder \Nicht gerade irgendein Zeichen ähnlicher Helligkeit.
Sobald du jeden Charakter wie eine winzige 2-Form behandelst, wird das Rendering von , nächste MS K2 nähste Suche nach Nachbarn in einem niedrigen - dimensionalen Raum.
Der Formvektor
Jedes Zeichen wird mit einem Punkt-Probenahmeraster in einem gestaffelten Muster
[0] [1] [2] ← Top row (staggered vertically)
[3] [4] [5] ← Bottom row
Die linken Kreise sind abgesenkt und rechte Kreise werden angehoben, um Lücken zu minimieren, während Überlappungen vermieden werden.Jeder Probenahmekreis misst die Erfassung von ".
Hier ist der ASCII-Ausgang wieder als Referenz, während wir über das Sampling Grid sprechen.

// Staggered sampling positions (3x2 grid as per Harri's article)
private static readonly (float X, float Y)[] InternalSamplingPositions =
[
(0.17f, 0.30f), // Top-left (lowered)
(0.50f, 0.25f), // Top-center
(0.83f, 0.20f), // Top-right (raised)
(0.17f, 0.80f), // Bottom-left (lowered)
(0.50f, 0.75f), // Bottom-center
(0.83f, 0.70f) // Bottom-right (raised)
];
Aufbau der Zeichenkarte
Wenn der Renderer initialisiert, macht er jedes ASCII-Zeichen zu einem kleinen Bild und mustert die Regionen von 6.
private void GenerateVectors(string characterSet, string? fontFamily, int cellSize)
{
var font = GetFont(fontFamily, cellSize);
foreach (var c in characterSet.Distinct())
{
var vector = RenderCharacterVector(c, font, cellSize);
_vectors[c] = vector;
}
// Normalise vectors for comparable magnitudes
NormalizeVectors();
}
Das Ergebnis ist eine Lookup-Tabelle, die jedes Zeichen auf seine Formsignatur abbildet.
Baum, der mit dem Baum zusammenpasst
Das Finden des besten Zeichens für jede Bildzelle erfordert die Suche nach dem Raum ..Eine naive lineare Suche wäre langsam ,, so dass wir eine Baum der K.-.D. für schnelle nächstgelegene --Nachbar Lookups
flowchart TD
A[Image Cell] --> B[Sample 6 regions]
B --> C[Create shape vector]
C --> D[K-D tree lookup]
D --> E[Nearest character match]
style A stroke:#4a9eff
style C stroke:#ff6600
style D stroke:#00aa00
style E stroke:#00aa00
Das Baum der K.-.D. bietet O-(-log n-MSC1-Lookups anstelle von O-(-n-), und Ergebnisse werden mit quantisierten Vektoren für noch schnellere wiederholte Lookups gecached
Kontrastvergrößerung
Raw Shape Matching kann flach aussehen.Der Algorithmus wendet zwei Arten von Kontrastverbesserungen an.
Globaler Kontrast Eine Power-Funktion, die niedrigere Werte in Richtung Null knirscht.
value = (value / max)^power × max
Richtungskontrast Externe Probennahmekreise erkennen Kanten, bei denen der Inhalt auf leeren Raum trifft.
// 10 external sampling positions for directional contrast
private static readonly (float X, float Y)[] ExternalSamplingPositions =
[
(0.17f, -0.10f), // Above top-left
(0.50f, -0.10f), // Above top-center
(0.83f, -0.10f), // Above top-right
(-0.15f, 0.30f), // Left of top-left
(1.15f, 0.20f), // Right of top-right
(-0.15f, 0.80f), // Left of bottom-left
(1.15f, 0.70f), // Right of bottom-right
(0.17f, 1.10f), // Below bottom-left
(0.50f, 1.10f), // Below bottom-center
(0.83f, 1.10f) // Below bottom-right
];
Leistungsoptimierungen
Der Renderer enthält mehrere Performance-Tricks.
- Vorberechnete Trigonometrie Suchtabellen ersetzen per .-'cell Trig mit billiger Array-Indizierung
- SIMD Optimierung Verwendung
Vector128/Vector256/Vector512für Entfernungsberechnungen - Parallele Verarbeitung Mehrsprachiges Rendering für größere Bilder
- Stack-Zuweisung Vermeidet Haufendruck für temporäre Puffer
// Pre-computed sin/cos lookup tables (major performance optimisation)
private static readonly (float Cos, float Sin)[] InnerRingAngles = PrecomputeAngles(6, 0);
private static readonly (float Cos, float Sin)[] MiddleRingAngles = PrecomputeAngles(12, MathF.PI / 12);
private static readonly (float Cos, float Sin)[] OuterRingAngles = PrecomputeAngles(18, 0);
Braille Rendering-Auflösung
Der Braille-Modus war der größte technische Sprung, der traditionelle ASCII gibt Ihnen eine ." .pixel ?" ? pro Zeichenzelle ? . ? Unicode Braille Zeichenpaket Pixel in jede Zelle und KonsoleImage behandelt diese Punkte als zeitlich nicht nur eine statische Bitmap, sondern auch eine Art Glyphe, das Ergebnis ist eine Art glyphenhaltiges --Level, bei dem Bewegung und Frame, die Stabilität des Rahmens, das wahrgenommene Detail deutlich höher machen als das Rohgitter vermuten lässt.
Der Unicode Braille Block
Braille-Zeichen, die ein Muster in einem Rasterformat kodieren
┌─────┬─────┐
│ 1 │ 4 │ ← Row 0
├─────┼─────┤
│ 2 │ 5 │ ← Row 1
├─────┼─────┤
│ 3 │ 6 │ ← Row 2
├─────┼─────┤
│ 7 │ 8 │ ← Row 3
└─────┴─────┘
Col0 Col1
Jeder Punkt entspricht einem Bit.
// Dot bit positions in braille character
// Pattern: 1 4
// 2 5
// 3 6
// 7 8
// Listed in 2×4 scan order: 1,4,2,5,3,6,7,8.
private static readonly int[] DotBits = { 0x01, 0x08, 0x02, 0x10, 0x04, 0x20, 0x40, 0x80 };
Der Zeichencode ist einfach 0x2800 + (bit pattern)Eine leere Braille-Zelle ist ⠀ Ein vollständiger Block ist ⣿ (-U-+28-FF-).-
Die Braille-Pipeline
flowchart LR
A[Source Image] --> B[Resize to W×2, H×4]
B --> C[Grayscale conversion]
C --> D[Otsu threshold + temporal stabilisation]
D --> E[Atkinson dithering]
E --> F[Build braille codes]
F --> G[Hybrid colours + perceptual compensation]
G --> H[Terminal output]
style A stroke:#4a9eff
style D stroke:#ff6600
style E stroke:#ff6600
style G stroke:#00aa00
Da jede Braille-Zelle ein Punktgitter kodiert, arbeitet der Renderer auf einem internen Bild, das breiter und größer als die Zielzeichenmaße ist.
Verfahren zur automatischen Thresholding
Um in Braille umzuwandeln, sind binäre Entscheidungen erforderlich.Jeder Punkt ist auf oder aus......Ein fester Schwellenwert... wie bei der Helligkeit..
Otsu-'-Verfahren findet die optimale Schwelle, indem sie die Varianz zwischen Vordergrund und Hintergrund maximiert.
- Erstellen Sie ein Histogramm der Pixelintensitäten
- Für jede mögliche Schwelle berechnen Sie die Varianz zwischen der - und der Klasse.
- Wählen Sie den Schwellenwert, der die Varianz maximiert
Dies passt sich automatisch jedem Bild an.Dunkle Bilder erhalten niedrige Schwellen ., .Bright Images erhalten hohe Schwellen BrailleRenderer Quelle.)
In der Praxis ist die Naive Otsu-Schwellung nicht ausreichend für Animationen.Die Implementierungsebenen zeitliche Kohärenz........:... hysteresis so dot Entscheidungen nicht Flip Frame..........-... zu -... und Wahrnehmungskompensation nach oben...... also bleibt der Output stabil in Bewegung, anstatt zwischen Frames zu flimmern.
Atkinson Dithering
Binäre Schwellenbildung erzeugt raue Kanten Enthärtung diffusiert die Quantisierungsfehler in benachbarte Pixel, wodurch die Illusion von Zwischentönen entsteht.
Wir benutzen Atkinson-Trennung Von Bill Atkinson für den ursprünglichen Macintosh entwickelt Floyd---Steinberg-Algorithmus:
X 1 1
1 1 1
1
(each "1" receives 1/8 of the error)
Warum Atkinson besser für Braille arbeitet
|-Aspekt: Floyd---Steinberg-Atkinson: |--------|-----------------|----------| Fehler diffusiert |, 100%, (16/16), |, 75%, MSKS6, MSC7 Ausbreitungsmuster |Ausbreitung von Pixeln |Ausblendung von Pixel 6Ausbleichungen Ergebnis - Weichere Gradienten - Höherer Kontrast Am besten für Fotos von |.
Atkinson verwirft absichtlich die Fehlerbehebung des Fehlers, der schärfere Kanten erzeugt, die für kleine Punktmuster kritisch sind.
private static void ApplyAtkinsonDithering(Span<short> buffer, int width, int height, byte threshold)
{
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
int idx = y * width + x;
short oldPixel = buffer[idx];
byte newPixel = oldPixel > threshold ? (byte)255 : (byte)0;
buffer[idx] = newPixel;
short error = (short)(oldPixel - newPixel);
short diffuse = (short)(error / 8); // 1/8 of error
// Diffuse to 6 neighbours (only 6/8 = 75% of error)
if (x + 1 < width)
buffer[idx + 1] += diffuse;
if (x + 2 < width)
buffer[idx + 2] += diffuse;
if (y + 1 < height)
{
if (x > 0)
buffer[idx + width - 1] += diffuse;
buffer[idx + width] += diffuse;
if (x + 1 < width)
buffer[idx + width + 1] += diffuse;
}
if (y + 2 < height)
buffer[idx + width * 2] += diffuse;
}
}
}
Hybride Farbstichprobe
Terminal-Farben stellen eine Herausforderung dar, die wir nur setzen können eine Vordergrundfarbe pro Zeichen, aber Braille steht für Verschiedene Quellpixel.
Durch die Durchschnittung aller Pixelfarben von 8 ergibt sich ein solarisiertes "-Look-Farben-Mix zu schlammigen Grautönen von MKK4, anstatt , wir nur Beispielfarben aus Pixeln, bei denen Punkte beleuchtet werden:
flowchart TD
A[2×4 Pixel Block] --> B{Which pixels are lit?}
B -->|Dots 1,4,7| C[Sample only those 3 pixels]
B -->|Dots 2,3,5,6,8| D[Sample only those 5 pixels]
C --> E[Average lit pixel colours]
D --> E
E --> F[Apply colour boost]
F --> G[Set as foreground colour]
style A stroke:#4a9eff
style B stroke:#ff6600
style E stroke:#00aa00
style F stroke:#00aa00
Dadurch wird sichergestellt, dass die angezeigte Farbe dem entspricht, was der Benutzer tatsächlich sieht.
Wahrnehmungsfarbkompensation für Sparse Glyphen
Braille-Zeichen sind von Natur aus spärlich ein Zeichen mit nur . . 2-3 . Punkte beleuchtet erscheint Dimmer als ein solider Block . ohne Kompensation . , . Braille Ausgang sieht objektiv .
Um wahrgenommene Chroma anstatt zu übertreiben Farbe wiederherzustellen
Voreingestellte Erhöhungen von (-Tunable-Effekten
- Sättigung:-+25%-(-Restores wahrgenommene Lebendigkeit
- Helligkeit:-+15%-M(-Kompensate für spärliche Punktabdeckungen
// Apply gamma correction and boost saturation/brightness for braille
(r, g, b) = BoostBrailleColor(r, g, b, _options.Gamma);
Vergleich der Auflösung
Für eine Ausgabe eines Zeichens aus dem Zeichen :
|-Modus Effektive Pixel |------|------------------| Weitere Informationen: http:europa.eu.int/en/comm/index_de.html Farbschlösser aus |, 100 und ×, MKS4, MSC5 und MSC6 ,| , Braille , | , 200 , × , 200 ,= , -40,000 ,-| ,
Braille bietet Die Auflösung von ASCII und Die Auflösung von Farbblöcken
Braille im Aktions-:-Landschaft Detail
Die beste Demonstration der Braille-Auflösung Vorteil ist mit glatten Gradienten und feinem Detail Dieses Landschaftsfoto zeigt, wie Braille subtile klangliche Variationen einfängt, die in ASCII.: verloren gehen würden

An diesem Punkt stellte ich fest, dass ich nicht mehr bei " ASCII-Kunst war, sondern wiedererkennbare Bilder sah.
Beachten Sie, wie die Himmelsgradienten und Geländedetails auch bei Terminal-Auflösung sichtbar bleiben Mit Standard-ASCII-,. Diese würden blockig werden und ihre glatten Übergänge verlieren. - .. Das Punktraster bietet genügend räumliche Auflösung, dass das Auge das Muster als kontinuierliche Bilder anstatt diskrete Zeichen integriert. -..
Matrix-Modus
Es gibt auch eine -M Flagge für einen Matrix digitalen Regen Overlay-Effekt, weil warum nicht... Es Composites fallen Katakana strömt über Ihr Quellbild...
Animation und Video
Flicker---Kostenlose Wiedergabe
Animation in den Terminals ist knifflig.... naive Ansätze verursachen sichtbare Flackern.......
DECSET - Synchronisierte Ausgabe Ein Terminal-Feature, mit dem Sie einen ganzen Rahmen gleichzeitig verwenden und verhindern können, dass Sie an mehreren modernen Terminals reißen.
// Start synchronised output
Console.Write("\x1b[?2026h");
// Write entire frame
Console.Write(frameContent);
// End synchronised output
Console.Write("\x1b[?2026l");
Delta-Rendering Nur geänderte Zellen aktualisieren
public (string output, CellData[,] cells) RenderWithDelta(
Image<Rgba32> image,
CellData[,]? previousCells,
int colorThreshold = 8)
{
var cells = RenderToCells(image);
var height = cells.GetLength(0);
var width = cells.GetLength(1);
// First frame or dimension change - full redraw
if (previousCells == null)
return (RenderCellsToString(cells), cells);
// Delta render - only output changed cells
var sb = new StringBuilder();
for (var y = 0; y < height; y++)
{
for (var x = 0; x < width; x++)
{
var current = cells[y, x];
var previous = previousCells[y, x];
// Skip if cell hasn't changed
if (current.IsSimilar(previous, colorThreshold))
continue;
// Position cursor and output
sb.Append($"\x1b[{y + 1};{x + 1}H");
sb.Append(current.ToAnsi());
}
}
return (sb.ToString(), cells);
}
Dies reduziert in der Regel die Leistung um 70-90% für Video-Inhalte, bei denen der größte Teil des Frames statisch ist
Temporale Stabilität
Zum Verschieben von Inhalten können kleine Per---Frame-Farbänderungen schimmern..-ConsoleImage enthält einen Dejitterpass, der glättet Farbänderungen über Frames hinweg – Verbesserung der wahrgenommenen Stabilität – insbesondere in Braille- und Colour-Modi -Block
Videounterstützung
Videodateien und YouTube-URLs werden über FFmpeg und yt.-.dlp behandelt. Trimmdauern ,, , Schalter-Rendermodi , , , Untertitel hinzufügen und in GIF- oder Dokumentformate mit dem gleichen Rendering-Core , . , exportieren
Video-Wiedergabesteuerungen
| -Schlüssel Aktion | - |
|---|---|
Space Anhalten anhalten andauern anhalten |
|
Q / Esc Beenden Sie |
Format des Dokuments
ConsoleImage kann gerenderte Ausgabe in self-T--integrierte Dokumente speichern, die ohne die ursprüngliche Quelle abspielen .cidz
Format verwendet GZip-Kompression mit Delta-Encodierung -(-often -~7:1-versus roh JSON , und lange Videos können als NDJSON gestreamt werden
so dass Frames inkrementell anstelle von gepuffert im Speicher geschrieben werden
Es gibt auch ein leichtes Spielerpaket.ConsoleImage.PlayerDie Dokumente ohne ImageSharp oder FFmpeg können wieder abspielen.
was animierte CLI-Logos möglich macht, ohne starke Abhängigkeiten zu bündeln.
API-Integrationen
Es gibt eine vollständige C-API für das Rendering von Bildern, ,, GIFs, ,, Video und Dokumenten mit feinkörnigen Renderoptionen. Renderer zurück die CLI-, , so dass Sie die Algorithmen in Ihre eigenen Werkzeuge ohne re-umsetzung der Pipeline einbetten können
Spectre-.-Console Integration ist sowohl für Live-Renderings und Dokumentwiedergabe zur Verfügung, die Sie Bilder als behandeln können Renderables innerhalb von Layouts Die README- und NuGet-Paketseiten decken die API-Oberfläche im Detail ab
Readmes - Tiefentauchgänge
Wenn Sie das volle technische Detail wünschen, sind dies die kanonischen Docs.
- KonsoleImage CLI README
- Kernbibliothek README
- Video Kern README
- Transkription README
- Spieler README
- Spectre Integration README
- Spieler ,. , Spectre README
- MCP Server README
- Braille Rendering-Anmerkungen
- JSON-/-CIDZ-Format
- Änderungsprotokoll
MCP Server für die KI-Integration
ConsoleImage enthält einen MCP-Context Protocol (Model Context Protokol)), der ihn in eine visuelle Sonde verwandelt." für KI-Workflows.....Statt einfach nur als ".AI-Integration zu sein, weil es Trend ist, kann das Modell nach reduzierten Ansichten von Medien fragen und einfache Signale messen.
Weil ConsoleImage perceptually sinnvolle Vorschauen rendern kann – ein KI kann über Videoinhalte iterativ nachdenken – :.Sampling,.Vergleich von , und Verfeinerung anstatt ganze Videos blind zu verbrauchen
Konkrete KI-Aufgaben
Mit MCP-Integration eine KI-Kanone
- Farbige Segmente findenScann Sie ein Video mit niedriger Auflösung, identifizieren Sie die lebhaftesten oder höchsten kontrastierenden Frames und exportieren Sie eine kurze GIF
- Szenenänderungen erkennenMessen Sie Rahmen-, um - Frame-Deltaenergie zu identifizieren wichtige Momente
- Inhalt des Interesses suchenVerwenden Sie Heuristiken, um Frames zu finden, die Menschen oder menschliche Figuren enthalten scheinen.
- Storyboards erstellenErstellen Sie ein Kontaktblatt aus N-Schlüsselrahmen als einzelnes gerendertes Dokument
Echtes Beispiel: Dieser Artikel wird gebaut
Beim Schreiben dieses Artikels verwendete ich ConsoleImage als MCP-Tool, um gute Beispielclips zu finden.
→ extract_frames (low-res preview at various timestamps)
→ compare_render_modes (ASCII vs braille at promising scenes)
→ render_to_gif (final export of selected clips)
Hier ist eine winzige Braille-Vorschau bei den Schriftzeichen breit genug, um Komposition und Bewegung zu erkennen
⣿⣿⣿⣿⣿⣿⣿⣿⡿⢃⠌⡱⢈⠱⣈⠱⣈⠱⢈⠛⢿⠿⠟⢛⠛⢛⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⠇⡌⠒⡄⢃⢲⣾⣷⠶⡉⠤⡀⢆⠢⢉⠢⡘⢄⢂⠉⣺⣽⢿⣞⣷⣻⣞⣷⣻⣞⣷⣿
⣿⣿⣿⣿⣿⣿⣿⣿⠐⡈⢅⠢⡁⣾⣿⡏⠤⠑⡂⢅⠢⣕⢨⣔⠡⠌⣂⠱⠘⠯⠿⣾⣽⣳⠯⣝⡗⢿⣞⣿
Dies lassen Sie mich schnell scannen Inhalt, um interessante Frames zu identifizieren, anstatt alles in voller Auflösung zu rendern.
Einrichtung
Setup ist ein einzelner MCP-Servereintrag. MCP README für Details
Zu den wichtigsten Werkzeugen gehören render_image, render_to_gif, extract_framesL 347 vom 20.12.2013, S. 671. compare_render_modes.
Architektur
flowchart TB
subgraph Core["ConsoleImage.Core (NuGet)"]
AR[AsciiRenderer]
BR[BrailleRenderer]
CB[ColorBlockRenderer]
CM[CharacterMap]
AP[AnimationPlayer]
DOC[Document Format]
end
subgraph Video["ConsoleImage.Video.Core"]
FF[FFmpegService]
VP[VideoPlayer]
end
subgraph CLI["ConsoleImage CLI"]
MAIN[Unified CLI]
end
subgraph MCP["ConsoleImage.Mcp"]
TOOLS[AI Tools]
end
MAIN --> Core
MAIN --> Video
TOOLS --> Core
style Core stroke:#4a9eff
style Video stroke:#ff6600
style CLI stroke:#00aa00
style MCP stroke:#9933ff
Schlußfolgerung
Was begann als eine schnelle Implementierung von Alex Harri-'s ASCII Rendering-Algorithmus verwandelte sich in ein Terminal-Grafiksystem... Der Zeit-MSC2...Boxen Ansatz bedeutet Versand etwas Nützliches schnell.MSC3. dann iterieren, wenn Inspiration getroffen ?.?
Schlüsselkompetenzen
- Shape-Matching schlägt Helligkeit Mapping für Charakterauswahlqualität
- Blindenzeichen bieten überraschende Auflösung in Terminals
- Delta-Rendering ist wichtig für eine reibungslose Videowiedergabe
- Temporale Kohärenz - Wahrnehmungskompensation sind der Unterschied zwischen ", recognisable, " und ",watchable,",
Der Code ist public domain. GitHub.
Folgender Artikel wird vorgestellt:
Ein anderes Mal ,--Boxen-Tool ist Klarer Blick Ein schneller, kleiner Avalonia-Client, der Markdown schön ohne WebView macht
Mehr dazu in Teil -2.-
Literaturverzeichnis
- Alex Harri-'s ASCII Rendering Artikel Die Inspiration
- Unicode Braille Muster Blockieren Zeichenkodierungsreferenz
- Otsu-'-Verfahren -Wikipedia -)- Automatische Schwellenregelung
- Atkinson Dithering Der MacPaint-Algorithmus

