# Time Boxed Tool: Консольні зображення

<!--category-- .NET, Tools, ASCII Art -->
<datetime class="hidden">2026-01-24T12:00</datetime>

> **Гліфовий рендератор на основі МСК0, що використовує форму МСК1, алгоритми співпадіння МСК2, підтримують зображення МСК3, анімовані GIF, МSK4, відео МСК5, YouTube повторюваність МСК6 та субтитры з багатьма режимами рендерування, включно з шрифтом Брайля для максимального деталізації**

> [![NuGet](https://img.shields.io/nuget/v/mostlylucid.consoleimage.svg)](https://www.nuget.org/packages/mostlylucid.consoleimage/)
> [![Лицензія: Нелицензія](https://img.shields.io/badge/license-Unlicense-blue.svg)](https://unlicense.org)
> [![Релізи GitHub](https://img.shields.io/github/v/release/scottgal/mostlylucid.consoleimage)](https://github.com/scottgal/mostlylucid.consoleimage/releases)

*Метою не є точність пікселі; а спостережливість під екстремними обмеженнями пропускної спроможностіM SK1*

## Введение

Це один із моїх інструментів. МSK1, МSK2, малі проекти, які я створюю як обмежену тривалість тренувань. ,, як правило, протягом декількох днів.

Цей особливий проект розпочався, коли я зустрів [Алекс Гаррі - чудовий artykuł про ASCII рендерінг](https://alexharri.com/blog/ascii-rendering). Його підхід до формування - співпадіння, а не простого відображання яскравості, був захоплюючим МSK2 і я подумав, що МSK3 Я міг би зробити це в C МСК4 Те, що почалося як простий ASCII зображений переглядач, переросло у терминалну графічну систему з багатьма режимами рендерування ММСК5 відеоінтеграція МПСК6 і навіть інтерфейс інтеграції штучного інтелекту МУСК7

Полний вихідний код доступний на GitHub: [https://githubMSC1com/scottgalM SK3mostlylucidMスク4consoleimage](https://github.com/scottgal/mostlylucid.consoleimage)

**завантажити останній випуск:** [Релізи GitHub](https://github.com/scottgal/mostlylucid.consoleimage/releases)

**NuGet пакети:**

- [`mostlylucid.consoleimage`](https://www.nuget.org/packages/mostlylucid.consoleimage/) - Коренная бібліотека рендеринга
- [`mostlylucid.consoleimage.video`](https://www.nuget.org/packages/mostlylucid.consoleimage.video/) - Obsługа відео
- [`mostlylucid.consoleimage.transcription`](https://www.nuget.org/packages/mostlylucid.consoleimage.transcription/) - Транскрипція шепоту МSK1 генерація субтитров
- [`mostlylucid.consoleimage.player`](https://www.nuget.org/packages/mostlylucid.consoleimage.player/) - Відтворення документа
- [`mostlylucid.consoleimage.player.spectre`](https://www.nuget.org/packages/mostlylucid.consoleimage.player.spectre/) - СпектрM SK1 Рендерабельності odtwarzaння консолі
- [`mostlylucid.consoleimage.spectre`](https://www.nuget.org/packages/mostlylucid.consoleimage.spectre/) - Спектр . Інтеграція з консольою

## Швидкий старт

ConsoleImage - це єдиний CLI, який перетворює ЗМІ на гліф.

### Установити

Найпростіший спосіб, щоб почати - завантажити останній бінар випуску з [Релізи GitHub](https://github.com/scottgal/mostlylucid.consoleimage/releases) і переконатися, `consoleimage` на вашому `PATH`.

```bash
consoleimage photo.jpg
consoleimage "https://youtu.be/dQw4w9WgXcQ" --subs whisper
```

![Демо-моди Брайля](/articleimages/consoleimage_wiggum_braille.gif)

[TOC]

## Нова в v4.0: YouTube + Живі субтитры

КонсольImage спокійно перетворилась на повний мобільний плеєр. . Версия 4.0 додає YouTube playback, МSK2 авто, \ - завантажені віддалення, ♪ , \ і живі субтитры штучного інтелекту, керовані Whisper \ \ МSK5 \ усі загортані в один і той самий \" \ один наказ, і це просто працює.

### Zero-Auto завантаження

Відносноти відокремлені від першого використання і зберігаються локально, так що нові функції працюють без ручної інсталяції:

| Комп 'ютер МSK1 Перший триггер завантаження МSK2 Место вキャッシュі |
|-----------|------------------------|----------------|
| FFmpeg `~/.local/share/consoleimage/ffmpeg/` |
| ytM SK1dlp | Перший URL YouTube МSK3 `~/.local/share/consoleimage/ytdlp/` |
| Сміх Czas trwania | Перше `--subs whisper` | `~/.local/share/consoleimage/whisper/runtimes/` |
| Моделі шепоту МSK1 Перше перетворення МSK2 `~/.local/share/consoleimage/whisper/` |

На Windows, キャッシュи живі під `%LOCALAPPDATA%\consoleimage\`.

На macOS, キャッシュи знаходяться під вашим користувачамM SK1 локальний папок даних aplikacji (звичайно `~/Library/Application Support/consoleimage/`).

Використовувати `-y` / `--yes` до авто-утвердити всі завантаженняM SK1

### Репетиція на YouTube

Веб-адреси YouTube відтворюються безпосередньо в terminaлі за допомогою yt-dlp,, які запускаються через таку ж рендеровану лінію, як і локальні файлиM SK2 Це
означає, що ті самі режими, шириниM SK1 і вихідні формати пристосовуються, незалежно від того, дивитесь ви в прямому ефірі чи зберігаєте кліп
having a custom yt-dlp installM SK1 ConsoleImage can point at it.

### Субтитры та транскрипція наживо

Субтитры походять з трьох джерел:
фон у 15-секундних chunks, залишається попереду від odtwarzaнняM SK2 і кэшів `.vtt` файли, так що повторюваність є миттєвою. Вона підтримує
численні розміри моделей, вибір мови , і домашні кінцеві точки, так що ви можете обмінювати швидкість на точність або відштовхувати роботу

Transcript- також поддерживается лише вихідний код,, який перетворює ConsoleImage на генератор субтитров, що може fed інші інструменти
без відтворення відео.

### У режимі слайд-шоу

Навімкніть на папку і вона перетвориться на слайд-шоу з клавіатурними контролями, опційне перемішуванняM SK1 і ручним або таймом
попередження.

## Від простого переглядача до графічного інтерфейсу

Те, що почалося як вихідний проект, щоб реалізувати алгоритм Алекса Гаррі, стало чимось більш амбітним.

1. **День 1**: Базовий ASCII відтворювання за допомогою форми - співпадіння
2. **День 2**: Добавлена поддержка кольорів і анімований GIF повтор
3. **День 3**: Введений режим ColorBlocks для більшої вірогідності
4. **День 4**: Добавлений режим шрифта Брайля для роздільності 8x
5. **Пізніше**: Obsługа відео , Efektи матриці МSK2 формат документу M SK3 МЦП сервер
6. **Набагато пізніше**: Temporal stabilisation for motion , Perceptual colour compensation

Спектр був справжнім, але кожен додатковий елемент був природнім і корисним. МСК1. Тепер він обробляє зображення, МSK2, GIF, ,, відео, МСК4, і навіть забезпечує MCP-сервер для інтеграції програмного забезпечення. МSK5

## Три trybи відображання

КонсольImage надає три різні способи відтворювання зображень в терминалі:

```mermaid
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
```

| tryb МSK1 команда МSK2 роздільна здатність | найкраще для M|
|------|---------|------------|----------|
| **Брайля** | `consoleimage photo.jpg` МSK0 8× пікселі на клітину МSK2 крапки **Знешкоджений** - Максимальний деталі
| **ASCII** | `consoleimage photo.jpg -a` МSK0 1× ♫ ♫ МSK2 ♫ форма ♫ - ♫ співпадна ♫
| **Колірні блоки** | `consoleimage photo.jpg -b` МSK0 2× вертикально МSK2 половину - блоки мSK4 мSK5 Фотографії M, висока вірність МСК7

Брайля - по замовчуванню. Використовувати `-a` для ASCII або `-b` для ColorBlocks.

### Терминалні режими протоколу

Деякі терминали підтримують вбудовані графічні протоколи (iTerm2, KittyM SK2 SixelMSC3 ConsoleImage можуть використати ці режими для
піксель-точне відображання, зберігаючи ту ж трубку та інструментиM SK1

### Порівняння

Ось один і той самий анімований GIF, відтворений у кожному режимі:

МSK0 ASCII | шрифт Брайля МSK2 шрифт Braille ( Моно
|-------|---------|----------------|-------------|
| ![ASCII](/articleimages/consoleimage_wiggum_ascii.gif) | ![Брайля](/articleimages/consoleimage_wiggum_braille.gif) | ![Моно шрифту](/articleimages/consoleimage_wiggum_mono.gif) | ![Блоки](/articleimages/consoleimage_wiggum_blocks.gif) |
| ФормаM SK1 співпадні символи МSK2 МSK3 патерни з точками | Компактна M, без кольорів МСК6 Unicode півтора МСК7 блоки

Виход ASCII показує форму- співпадіння на роботі M SK1 використання діагонічних ребер `/` і `\`, використання кривых `(` і `)`, та інші щільності використовують такі символи, як `@`, `#`, `*`, і `.`. Монохромна версія шрифта Брайля менша, ніж у кольорних режимах, водночас зберігаючи повну роздільну здатність

### Розdzielczość шрифта Брайля: The Amiga Boingball

Різниця роздільної здатності стає очевидною з класичною кулею Amiga - анімації, яка вимагає гладких кривих і чистих діагональ МSK1

МSK0 Брайля (Монохрома МSK2 | Браюля ♫ ♫ МSK4 ♫ Колір ♫ ) ♫
|----------------------|------------------|
| ![Боінґбол Моно](/articleimages/consoleimage_boingball_mono.gif) | ![Боїнгбол Брайля](/articleimages/consoleimage_boingball_braille.gif) |
| МSK1 роздільна здатністьM SK2 без кольорів

Обидві системи мають однакову сітку з точками 2×4 (8 пікселі на символову клітину МSK2 Монокаромна версія повністю не використовує коди кольорів ANSI МSK3, що дає набагато менший результат

### Монохромний шрифт: Компактний M SK1 швидкий

Для швидких подивів, сеанси SSH , або пропускна спроможністьM SK2 обмежені середовища, монохромний шрифт MSC4`--mono`) повністю змінює колір

```bash
consoleimage animation.gif --mono -w 120
```

Результати: **3-5x менший** ніж у кольорних режимах, зберігаючи повну роздільну здатність. Ця анімація бейсболю вищеM SK1 Монохромна версія МSK2 КБ у порівнянні з МSK3 Кб для кольорового Брайля . Для тексту-важкий зміст або графічний малюнокMSC6 монохром часто виглядає *краще* тому що в ' немає кольорного шуму, який б конкурував з інформацією про форму

## Як працює ASCII Shape-Matching

Традиційне мистецтво ASCII використовує відображення світла - темні пікселі отримують щільніші символи, такі як `@` або `#`, легші пікселі отримують такі вузькі, як `.` або ` `. Це працюєM SK1, але не звертає уваги на реальну *форма* символів.

Алекс Гаррі' підход розумніший : аналізує візуальну форму кожного символа M SK2 потім співставляє зображення з зображенням символів з схожими формами . Диагональна лінія має `/` або `\`, не просто будь-який символ схожої яскравості

Після того, як ви сприймаєте кожен символ як крихітний 2D-формуM SK1 рендеринг стає найближчим -помічником пошуку в нижньому M SK3вимірному МSK4формовому просторі МSK5

### Вектор форми

Кожен символ аналізується за допомогою **6-نقча зразкова сітка** в 3×2 загострюваному візерункуM SK1

```
[0]  [1]  [2]   ← Top row (staggered vertically)
[3]  [4]  [5]   ← Bottom row
```

Ліві круги знизуються, а права - підняються, щоб мінімізувати розриви і уникнути перетинів.. Кожний коло зразку вимірює M SK1 вкритість пелюшкою " на цьому місці. МSK3 створюючи вектор розміру МSK4VSK5

Тут - МСК0 - знову вихід ASCII як референц, коли ми говоримо про сітку зразків.

![Схожість форми в дії](/articleimages/consoleimage_wiggum_ascii.gif)

```csharp
// 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)
];
```

### Збудувати карту символів

Коли рендерер запускає,, він відтворює кожен символ ASCII на маленьке зображення і відображає ділянки M SK1

```csharp
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();
}
```

Результатом є пошукова таблиця, яка відображає кожен символ на його форму.

### K-D Об 'єднання дерев

Для пошуку найкращого символу для кожної клітини зображення потрібно шукати: 6-простор у вимірахM SK1 Наївний лінійний пошук буде повільним, тому ми використовуємо **[Дерево K-D](https://en.wikipedia.org/wiki/K-d_tree)** для найшвидшого найближчого-подиви на сусідівM SK1

```mermaid
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
```

І [Дерево K-D](https://en.wikipedia.org/wiki/K-d_tree) забезпечує пошук O(log nM SK1 замість O (nMSC3, а результати зберігаються за допомогою квантових векторів для ще швидших повторюваних пошуків

### Підсилення контрасту

Matching Raw shape can look flat. Алгоритм застосовує два типи покращення контрасту

**Глобальний контраст** - Функція живлення, яка рухає нижчі значення до нуля

```
value = (value / max)^power × max
```

**Контраст напряму** - МSK1 зовнішні зразкові кола виявляють краї, де зміст зустрічається з пустим просторомM SK2

```csharp
// 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
];
```

### Оптимізації ефективності

Рендерер включає в себе декілька хитрощів

- **До- обчислювальна тригонометрия** - Погляньмо на таблички, які заміняють натриг клітини на дешевому артеріальному індексуванні
- **Оптимізація SIMD** - Використовується `Vector128`/`Vector256`/`Vector512` для обчислень відстані
- **Паралельное оброблення** - Мільйозок МSK1рендерування натовпом для більших зображень
- **Дозволення набірів** - Уникає викидного тиску для тимчасових буферів

```csharp
// 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);
```

## Передача шрифту Брайля: M SK1x роздільна здатність

. Традиційний ASCII дає вам один " піксель МSK2 на клітину символів M SK3 пакет символів шрифта Unicode **8 пікселі** в кожну клітину, і ConsoleImage сприймає ці точки як *тимчасовий* сигналу, не тільки статичну бітмапуM SK1 Результатом є щось на зразок глифуМSK2рівню "суперрозбірливостіMSC4 де рух і рамкиMSL5на \-стабільність кадрів роблять відчутні деталі помітно вищими, ніж це передбачає сирова сітка

### Блок шрифту Брайля Unicode

Олівець літер (U+2800 - UM SK3FFMSC4 кодує шаблон МSK5доти в графі МSK6

```
┌─────┬─────┐
│  1  │  4  │  ← Row 0
├─────┼─────┤
│  2  │  5  │  ← Row 1
├─────┼─────┤
│  3  │  6  │  ← Row 2
├─────┼─────┤
│  7  │  8  │  ← Row 3
└─────┴─────┘
  Col0  Col1
```

Кожна точка відповідає bit:

```csharp
// 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 };
```

Код символу просто `0x2800 + (bit pattern)`. Empty braille cell is `⠀` (UM SK1 повний блок - `⣿` МSK0U+28FFM SK2

### Трубопровод шрифта Брайля

```mermaid
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
```

Через те, що кожна клітина шрифту кодує сітку з точками 2×4 , рендерер працює на внутрішньому малюнку, який МSK2 ширший і МSK3 вищий, ніж виміри символів-ターゲта \. \

### Оцу's MetodаM SK1 Автоматичний порог

Перетворення на шрифт Брайля вимагає бінарних рішень - кожна точка ввімкнута чи вимкнена МSK1 фіксований порог МSK2 схожий 50% яскравість

**[Метод Otsu'](https://en.wikipedia.org/wiki/Otsu%27s_method)** знаходить оптимальний порог, збільшуючи різницю між фоном і переднім планом. АлгоритмM SK1

1. Збудувати гістограму інтенсивності пікселів (256 контейнериM SK1
2. Для кожного можливого порогу (0-255), розрахуйте різницю між classesми МSK1
3. Виберите межу, яка збільшує розбіжність

Це автоматично пристосовується до будь-якого зображення. - темні зображення отримують низькі проміжки, , світлі зображення отримують високі промижки, [Źródło BrailleRenderer](https://github.com/scottgal/mostlylucid.consoleimage/blob/master/ConsoleImage.Core/BrailleRenderer.cs).)

У практиці, наївна шкала Otsu недостатньо для анімаціїM SK1 Подібні шари застосування мають часову послідовність MSC2думка: істеріза, тому рішення про крапки не перевертають кадра - доMST5 кадру МST6 і перцептуальну kompensацію зверху MST7 саме тому виведення залишається стабільним в руслі, а не блукає між кадрами M ST8

### Дитерінг, Аткінсон

Бінарний порог створює жорсткі краї. **Погнічення** поширює помилки квантування на сусідні пікселі, створюючи ілюзію проміжних тонівM SK1

Ми використовуємо **[Розчарування Аткінсона](https://beyondloom.com/blog/dither.html)** (, розроблений Біллом Аткінсоном для оригінального Macintosh [Алгоритм Floyd-Стівенберг](https://en.wikipedia.org/wiki/Floyd%E2%80%93Steinberg_dithering):

```
        X   1   1
    1   1   1
        1

(each "1" receives 1/8 of the error)
```

Чому Аткінсон працює краще для шрифта Брайля:

| Аспект МSK1 Флойд - Стівенберг МSK3 Аткінсон M|
|--------|-----------------|----------|
| Ошибка розсіяна
| Розширюваний візерунок
МSK0 Результат | Мягкі відхилення МSK2 Гострі контрасти |
| Найкраще для МSK1 Фотографії МSK2 графічний малюнок

Аткінсон навмисно відкидає 25% помилкиM SK1, створюючи чіткіші краї - вирішальне для маленького патерна маленьких точок

```csharp
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;
        }
    }
}
```

### Гібридне зразок кольорів

Консольні кольори викликають. Ми можемо тільки налаштувати **один колір на передньому плані** за символом,, але шрифт Брайля представляє **8 різні вихідні пікселі**.

Оцінивши всі 8 піксельні кольори, ми отримуємо " соляризований МSK2 вигляд МSK3 кольори змішуються в слюдовий сірий **лише зразки кольорів з пікселі, де засвітлені крапки**:

```mermaid
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
```

Це гарантує, що відображаний колір відповідає тому, що насправді бачить пользователь - засвітлені крапки МSK1

### Здатність сприймати кольори для запасних глифів

Брайляні символи по суті розсіяні. - символ, на якому є тільки МSK1 засвітлені крапки, виглядає тьмянішим, ніж цілісний блок. ♫ . ♫ Без補償у ♫ МSK3 ♫ вихід шрифта виглядає об 'єктивно ♫

Щоб повернути сприйманий хром, а не перебільшувати колір:

По замовчуванню підштовхування (вмиканийM SK1

- **Насилення**МSK0 +25%
- **Світло**МSK0 +15% ♫ ♫ МSK2 ♫ Compensations for sparse dot coverage ) ♫

```csharp
// Apply gamma correction and boost saturation/brightness for braille
(r, g, b) = BoostBrailleColor(r, g, b, _options.Gamma);
```

### Порівняння роздільної здатніти

Для виjścia символу 100×50

| tryb МSK1 ефективні пікселі МSK2
|------|------------------|
МSK0 ASCII | МSK2 × \ \ 50 | \ МSK5 \
| Колірні блоки
МSK0 Брайля | МSK2 × ♫ ♫

Брайля надає **8x резолюція** ASCII і **4x резолюція** кольорних блоків.

### Брайля в дії: Декілька пейзажів

Найкраще продемонструвати перевагу роздільної здатності шрифта Брайля: плавні відхилення та дрібні деталі. Це пейзажна фотографія показує, як шрифт Брайла захоплює тональні відмінності, які б були втрачені в ASCII.

![Пейзаж в Брайлі](/articleimages/consoleimage_landscape_braille.gif)

На цьому етапі я зрозумів, що я більше не дивлюся на "ASCII-арт " МSK3 це були розпізнавані зображення

Зверніть увагу на те, що падіння неба та деталі місцевості залишаються помітними навіть при кінцевому розширенні.. З стандартним ASCIIM SK1 вони стали б блокованими і втратили плавний перехід. . Мережа крапів MSC3 надає достатньо просторової роздільної здатності, щоб око інтегрувало візерунок як послідовне зображення, а не дискретні символи.

## Матричний режим

Є також `-M` прапорець для цифрового ефекту цифрової дощової накладки Matrix, тому що чому б не . Він об 'єднує падаючих кавказських потоків над вашим зображенням-источником

## Анімація та відео

### Flicker-Свободний повтор

Анімація в terminaх складна. - наївні підходи спричиняють видиме тремтіння

**[DECSET 2026 Синхронний вихід](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036)** - консольна функція, яка дозволяє вам " запустити МSK2 весь кадр одразу ж МSK3 запобігти розриву

```csharp
// Start synchronised output
Console.Write("\x1b[?2026h");

// Write entire frame
Console.Write(frameContent);

// End synchronised output
Console.Write("\x1b[?2026l");
```

**Рендерінг Дельти** - Тільки оновлення змінних клітинM SK1

```csharp
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);
}
```

Зазвичай, це зменшує **70-90%** для відеоконтенту, де більшість кадру статична.

### Temporal Stability (DejitterM SK1

Для переміщення контенту, малі зміни кольорів кадру на один кадрM SK1 можуть світитися. КонсоліЗображення включає в себе деджиттер, який плавно
зміна кольору в кадрах, покращення відчуття стабільностіM SK1 особливо в шрифті Брайля та кольорів-моди блокуванняМSK3

### Obsługа відео

Файлі відео та YouTube URL обробляються за допомогою FFmpeg і yt-dlp (autoM SK2загрузили на першій користі). Можна розпочати з відхиленням
тривалість рендерування, перемикання режимів рендераціїM SK1 доdanie субтитров, і виведення в формат GIF або документу, використовуючи той самий рендеруючий ядро .

**Контроль відеозапису:**

| Ключ МSK1 akcja МSK2
|-----|--------|
| `Space` | Повільно МSK1Закінчимо МSK2
| `Q` / `Esc` | Виход МSK1

## Формат документа

КонсольImage може заpisać рендерований вихід на власні-документи, які відтворюються без оригінального джерела. `.cidz`
формат використовує комппресію GZip з кодуванням delta (частіше ~7:1 проти сирого JSONM SK2, а довгі відео можуть бути завантажені як NDJSON
frames записуються поступово, замість буферів у пам 'яті.

Є також пакет для легких гравців (`ConsoleImage.Player`), який може відтворювати документи без ImageSharp чи FFmpeg
що робить анімовані логотипи CLI можливими без поєднання великих залежності.

## Інтеграції API &

Існує повна інтерфейс C# для відтворювання зображень , GIFs M SK2 відео , і документів з тонким MSC4 забарвленими опціями відтворення МSK5 Те ж саме
відтворювачі повертають CLI, таким чином, що ви можете вбудувати алгоритми у власні інструменти без перепрограмування

Спектр. Інтеграція консоль available for both live renders and document playback , which allows you treat images as
вбудовані інтерфейси. Страницы пакетів README та NuGet охоплюють поверхню API у деталях

## Readmes & Deep Dives

Якщо ви хочете повний технічні деталі, це канонічні Docs:

- [README CLI ConsoleImage](https://github.com/scottgal/mostlylucid.consoleimage/blob/master/ConsoleImage/README.md)
- [Корейна бібліотека README](https://github.com/scottgal/mostlylucid.consoleimage/blob/master/ConsoleImage.Core/README.md)
- [Video Core README](https://github.com/scottgal/mostlylucid.consoleimage/blob/master/ConsoleImage.Video.Core/README.md)
- [README транскрипції](https://github.com/scottgal/mostlylucid.consoleimage/blob/master/ConsoleImage.Transcription/README.nuget.md)
- [README гравця](https://github.com/scottgal/mostlylucid.consoleimage/blob/master/ConsoleImage.Player/README.md)
- [README для інтеграції спектру](https://github.com/scottgal/mostlylucid.consoleimage/blob/master/ConsoleImage.Spectre/README.nuget.md)
- [Игрок.Спектр README](https://github.com/scottgal/mostlylucid.consoleimage/blob/master/ConsoleImage.Player.Spectre/README.md)
- [README Сервера MCP](https://github.com/scottgal/mostlylucid.consoleimage/blob/master/ConsoleImage.Mcp/README.md)
- [Написи про рендерінг шрифту Брайля](https://github.com/scottgal/mostlylucid.consoleimage/blob/master/docs/BRAILLE-RENDERING.md)
- [ДСОНМSK0CIDZ Формат](https://github.com/scottgal/mostlylucid.consoleimage/blob/master/docs/JSON-FORMAT.md)
- [Зміна журналу](https://github.com/scottgal/mostlylucid.consoleimage/blob/master/CHANGELOG.md)

## Сервер MCP для інтеграції штучного інтелекту

Консольна зображення включає в себе MCP (Model Context Protocol) сервер, який перетворює його на " візуальний зонд МSK3 для операційної системи штучного інтелекту \ . Замість того, щоб просто бути МSK5 інтеграцією з штучним інтелектом через тенденцію \", це \ МSK7 насправді корисне | : модель може попросити зменшити зображення медіа

Через те, що ConsoleImage може відтворювати візуально значні перед переглядами, штучний інтелект може обдумати відеоконтент ітеративно : зразки МSK2 порівнювати M SK3 і досконалювати, а не сліпо споживати цілий відеоконтинент

### Конкретні завдання штучного інтелекту

З інтеграцією MCP, штучний інтелект

- **Найти кольорові сегменти**: Сканувати відео з низькою роздільною здатністю , ідентифікувати найяскравіші чи найвищі кадри МSK2 контрастні кадри, МSK3 і вивести короткий GIF
- **Помітити зміни сцени**: виміряти енергію діаграми МSK1 до МSK2 для визначення важливих моментів
- **Найти зміст, який вас цікавить**: Використовуйте гуристику, щоб знайти кадри, які здаються містити людей або людських фігур.
- **Створити сюжетні дошки**: Створити контактний лист кадрів N ключів в один рендерований документ

### Справжній приклад: Збудувати цей artykuł

Під час написання цієї статті, Я використав ConsoleImage як інструмент MCP для пошуку хороших прикладних кліпів

```
→ 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)
```

Ось ' маленька діаграма шрифта Брайля на широті символів МSK1 МSK2 достатньо, щоб побачити комбінацію та рухи

```
⣿⣿⣿⣿⣿⣿⣿⣿⡿⢃⠌⡱⢈⠱⣈⠱⣈⠱⢈⠛⢿⠿⠟⢛⠛⢛⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⠇⡌⠒⡄⢃⢲⣾⣷⠶⡉⠤⡀⢆⠢⢉⠢⡘⢄⢂⠉⣺⣽⢿⣞⣷⣻⣞⣷⣻⣞⣷⣿
⣿⣿⣿⣿⣿⣿⣿⣿⠐⡈⢅⠢⡁⣾⣿⡏⠤⠑⡂⢅⠢⣕⢨⣔⠡⠌⣂⠱⠘⠯⠿⣾⣽⣳⠯⣝⡗⢿⣞⣿
```

Це дозволяє мені швидко сканувати контент, щоб визначити цікаві кадри, а не відтворювати все на повній роздільності.

### Konfiguracja

Установка - це один запис на MCP сервері; читайте [МCP README](https://github.com/scottgal/mostlylucid.consoleimage/tree/master/ConsoleImage.Mcp) для деталей.
Головні інструменти: `render_image`, `render_to_gif`, `extract_frames`, і `compare_render_modes`.

## Архітектура

```mermaid
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
```

## Завершення

Те, що почалося як швидке застосування алгоритму ASCII відтворення Алекса Гаррі, перетворилося на терминалну графічну систему.

Головні уроки:

- **Форма-matching Beats brightness mapping** для якості вибору символів
- **Karakterи шрифта Брайля** забезпечити дивовижну роздільну здатність в terminaх
- **Рендерінг Дельти** є необхідним для плавного odtwarzaння відео
- **Temporal coherence + Perceptual compensation** є різницею між "відомим " і МSK2видимим МSK3

Код - громадський домен (НеlicencjumM SK1 - використовуйте його, як вам сподобається [GitHub](https://github.com/scottgal/mostlylucid.consoleimage).

## Наступний: Частина M SK1 - lucidVIEW

Ще один час - це інструмент "-". [**lucidVIEW**](https://github.com/scottgal/lucidview) - швидкий , маленький клиент Avalonia, який гарно відтворює Маркдау без використання WebView.

Більше про це в частині 2.

## Відповіді

- [Alex Harri's Article ASCII Rendering](https://alexharri.com/blog/ascii-rendering) -インspirація
- [Блок шрифтів Брайля Unicode](https://unicode.org/charts/PDF/U2800.pdf) - Відказ на кодування шрифта Брайля
- [Metodа (WikipediaM SK2](https://en.wikipedia.org/wiki/Otsu%27s_method) - Автоматичний порог
- [Дитерінг, Аткінсон](https://beyondloom.com/blog/dither.html) - Алгоритм MacPaint