1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
|
VFETCH
neofetch but the ascii part is a video
DEPENDENCIES
============
Build Tools
-----------
* GNU Make
* C11-compliant compiler (a.k.a. ISO/IEC 9899:2011)
* pkg-config
* git
Libraries (Runtime & Development Headers)
-----------------------------------------
* chafa
* glib
Runtime Tools
-------------
* fastfetch or neofetch
COMPILE
=======
git clone https://git.doan.luuduct.ai/vfetch
cd vfetch
make
SPECIFY A DIFFERENT COMPILER
----------------------------
By default, make attempts to find Clang or GCC. It fails otherwise.
If you want to use a different compiler (e.g., icc, tcc), specify
the CC variable and use fallback target:
make fallback CC=<compiler>
where <compiler> is the C compiler of choice.
Note: Feel free to read and/or modify the Makefile for other useful targets.
USAGE
=====
After building, you can run the program:
vfetch --file <video_path> <flags>
VIDEO FORMAT REQUIREMENTS
-------------------------
- Video Codec: MPEG-1
- Audio Codec: MPEG-1 Audio Layer II (MP2)
- Container: MPEG-PS (.mpg, .mpeg)
Standard MP4, MKV, or MOV files will NOT work directly. You must convert them
accordingly (e.g. FFmpeg).
COMMAND REFERENCE
=================
--file <path>
(Required) Specifies the path to the input video file to be animated.
MUST be an MPEG-1 encoded file (see VIDEO FORMAT REQUIREMENTS section).
--help
Provides help. All other commands will be ignored if --help is passed.
--size <W>x<H> or --size <W>
Sets the dimensions of the animation output in character cells.
Format:
<W>: Automatically calculates the correct height to preserve the video's aspect ratio, based on the --cell-aspect.
<W>x<H>: Forces the animation to specific dimensions, ignoring aspect ratio.
Default: 80
--cell-aspect <value>
Specifies the aspect ratio (Width / Height) of a single character cell in
your terminal. This is used to calculate the correct image height when only
the width is provided in --size.
Most terminal fonts are twice as tall as they are wide. Therefore:
Default: 0.50
--pad <X>:<Y> or --pad <int>
Sets the positioning offset (padding) of the animation relative to the
terminal's top-left corner.
X (Horizontal): The number of spaces to indent from the left.
Y (Vertical): The number of lines to push down from the top.
Format:
<X>:<Y>: Sets specific values (e.g., 10:5 shifts 10 spaces right and 5 lines down).
<int>: Applies the same number to both X and Y (e.g., 5 becomes 5:5).
Default: 4:2
--fps <value>
Sets the target FPS for the animation.
Accepts floating-point numbers with up to two decimal places (e.g., 23.97, 29.98).
Cannot be higher than video's native FPS.
Default: Source video's native FPS.
--refresh-rate <value>
Sets the target refresh rate for the terminal animation in Hz.
Default: 60
Values: A positive integer from 1 to 65535
NOTE: This controls the screen redraw rate, which is independent of the
video's frame rate (--fps). A high refresh rate will not generate new video
frames but can make the animation appear more fluid.
--audio
Enables audio playback. The program extracts the audio track directly
from the input video file.
The audio codec MUST be MP2 (see VIDEO FORMAT REQUIREMENTS section).
--loop
Enables infinite looping of the animation. If this flag is not provided,
the program will play the video once and then exit automatically.
--fetch-tool <tool>
Controls which system information utility is displayed on the side of the animation.
Default Behavior: If not raised, the program will first try to use
'fastfetch', falling back to 'neofetch' if it's not available.
Values:
fastfetch: Explicitly use fastfetch. The program will exit with an error
if it's not installed.
neofetch: Explicitly use neofetch. The program will exit with an error
if it's not installed.
none: Completely disables the system information display.
--verbose
Enables verbose console output, showing high-level information about
caching, command execution, and pipeline steps.
By default, this output goes to stdout. If used with --debug, all verbose
output is redirected to stderr.
--debug
Enables highly detailed developer output to stderr for troubleshooting.
This includes low-level details like worker thread activity and raw command
outputs on failure.
This flag also enables --verbose and forces all diagnostic output to stderr.
--format <mode>
Sets the output format for rendering in the terminal. The fidelity and
compatibility vary significantly.
Default: symbols.
Values:
symbols: (Default) Renders using Unicode characters.
sixels: Renders a high-quality bitmap image.
Requires a Sixel-compatible terminal (e.g., Xterm, WezTerm).
kitty: Renders a pixel-perfect image.
Requires a Kitty-compatible terminal.
Requires Chafa 1.8.0+
iterm2: Renders a pixel-perfect image.
Requires an iTerm2-compatible terminal.
Requires Chafa 1.8.0+
--colors <mode>
Sets the color mode for the terminal output.
Values:
8: Use the 8 standard ANSI colors.
Requires Chafa 1.8.0+
16/8: A 16-color compatibility mode that maps to the 8 base colors.
Requires Chafa 1.12.0+
16: Use the 16 standard ANSI colors.
240: Use a 240-color palette.
256: Use the full 256-color xterm palette.
full: Use 24-bit truecolor for the highest color fidelity.
--fg <RRGGBB>
Sets a specific foreground color to be used for all characters. This is
most effective in 2-color modes but can influence other modes. Color is
specified as a 6-digit hex string.
--bg <RRGGBB>
Sets a specific background color. This color will be blended with the
video's background. Color is specified as a 6-digit hex string.
--fg-only
Renders only the foreground characters, leaving the background of each
character cell transparent. This allows the terminal's background color to
show through.
Requires Chafa 1.8.0+
--color-space <space>
Specifies the color space to use for calculating color similarity, which
affects color quantization.
Values:
rgb: RGB color space.
din99d: A perceptually uniform color space for better visual results.
--symbols <list>
Controls the set of characters used to render the image.
You can specify a preset or combine multiple classes with commas
(e.g., --symbols "block,braille,stipple").
Common Values:
all: Use all available symbols.
ascii: Restrict output to only the 7-bit ASCII character set.
block: Use all block-drawing characters (half, quad, sextant, etc.).
braille: Use all 256 braille patterns.
solid: Use only solid block characters.
stipple: Use stippled (shaded/dotted) characters.
none: Use no symbols.
List of supported values:
all, none, ascii, braille, space, solid, stipple, inverted,
block, border, diagonal, dot, half, hhalf, vhalf, quad, sextant, wedge,
alnum, alpha, digit, latin, wide,
geometric, technical,
ambiguous, bad, extra, imported, legacy, narrow, ugly
--fill <symbol-string>
Fills transparent background areas with repeating characters from the
provided string. This is not a class selector like --symbols.
Any valid UTF-8 characters can be used.
Example: --fill "ยท." will fill transparent areas with an alternating pattern
of dots.
INTERACTIVE CONTROLS
====================
During video playback, these keybindings are available:
* 'q' or 'Q': Quit the program immediately.
* 'p' or 'P': Toggle Pause/Resume.
LICENSE
=======
SOURCE CODE
-----------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
DEPENDENCIES
------------
* miniaudio - Licensed under the MIT No Attribution (SPDX: MIT-0).
* pl_mpeg - Licensed under the MIT License, also known as the Expat License (SPDX: MIT).
* chafa - Licensed under the GNU Lesser General Public License v3.0 or later (SPDX: LGPL-3.0-or-later).
* glib - Licensed under the GNU Lesser General Public License v2.1 or later (SPDX: LGPL-2.1-or-later).
|