Commit cd22a15611

cd22a15611f0dcd584f871c9807abe4f20676908

parent: 3d17b4a205

Verified · cmc

cmc <hello@cleberg.net> · 2026-08-20 16:03 UTC

publish new post: nfogen

Layout: unified · split

content/blog/2026-08-20-nfogen.org added +270
@@ -0,0 +1,270 @@
1#+date: [2026-08-20 Thu 10:24:00]
2#+title: generating scene-style .nfo files in 2026
3#+description: Announcing nfogen, a small utility to generate NFO files.
4#+slug: nfogen
5#+filetags: :development:
6
7* What Is an .nfo File?
8
9If you're unfortunate enough not to have lived through the heyday of =.nfo= files,
10I want to provide some context. Because honestly, this project might seem weird
11or useless without it.
12
13First, an [[https://en.wikipedia.org/wiki/.nfo][NFO]] file (short for info/informational) is a file format originally
14released in 1990. This file format was used by various projects, but especially
15by [[https://en.wikipedia.org/wiki/Warez_scene][warez/scene]] groups to provide info about their projects. This might include
16credits, installation instructions, BBS/contact info, greetz/notes, etc.
17
18For example, here's the =bonzai.nfo= file for a patched save game for Lemmings
19III, with credits to those involved and instructions to get in touch.
20
21#+begin_src nfo
22 К К
23
24 лллллК К
25 лллллК К
26 лллллпллл лллллпллл лллллпллл лллллпллл лллллпллл ппппп
27 лллллКлллл ллллл лллл ллллл лллл ллллл лллл ллллл лллл ллллл
28 лллллКлллл ллллл лллл ллллл лллл ммммммлллл лллллмлллл лллллл
29 лллллКлллл ллллл лллл ллллл лллл ллллл мммм ллллл лллл лллллл
30 ллллл лллл ллллл лллл ллллл лллл ллллл лллл ллллл лллл лллллл
31 лллллКлллл ллллл лллл ллллл лллл ллллл лллл ллллл лллл лллллл
32 лллллКлллл ллллл лллл ллллл лллл ллллл лллл ллллл лллл лллллл
33 ллллл лллл ллллл лллл ллллл лллл ллллл лллл ллллл лллл лллллл
34 пппппппппп пппппппппп ппппп пппп пппппппппп ппппп пппп пппппп
35 К жФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФЗ К
36 К ў BONZAi Ф EVERYTHiNG BUT FRiENDSHiP ў К
37 К гФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФН К
38 R E L E A S E D :
39 К К
40 К 9O BYTES SAVE GAME PATCHER FOR LEMMiNGS III К
41
42 К FiLENAME .............. : ........... BNZ-L3T.ZiP К
43 К TYPE .................. : ............... TRAiNER К
44 К COMPANY ............... : ............. PSYGNOSiS К
45 К CODER .. .............. : ................ SCAMPY К
46 К PACKAGER .............. : ................ SCAMPY К
47 К DATE AT RELEASiNG ..... : ............ 11-27-1994 К
48 К TiME AT RELEASiNG ..... : .............. 15:OO PM К
49 К RELEASE NOTES : ..................... READ BELOW! К
50 К К
51 К !!!*!!! IMPORTANT !!!*!!! К
52 К К
53 К NiCE PATCHER FOR A NiCE GAME - THiS PATCHER WAS К
54 К KINDA DiFFiCULT BECAUSE OF THE MANY BYTES TO BE К
55 К PATCHED. BUT PROBLEMS WiTH PATCHiNG TiME AND К
56 К FiLE LENGTH HAVE BEEN SOLVED. К
57 К К
58 К ENJOY PLAYiN' -SCAMPY! К
59 К К
60 К К
61 К MEMBERS OF BONZAi ARE . : К
62 К MOTiV8- SCAMPY- SUM-1- DEViL К
63 К К
64 К BULLETiN BOARD SYSTEMS : К
65Э Э ЭЭ ЭЭЭМ NONE! SEARCHiNG! ШЭЭЭ ЭЭ Э Э
66
67 GREETiNGS TO:
68 TOXiC HYBRiD PENTAGRAM PARADOX THHG G.T.A TRSI
69
70 #TO GET iN TOUCH WiTH BNZ LEAVE MAiL TO US ANYWHERE YOU FiND US#
71
72 CURRENTLY WE ARE SEARCHiNG FOR ALL KiND OF MEMBERS.. LiKE TRADERS
73 SUPPLiERS.. SYSOPS.. ETC.
74
75Э Э ЭЭ ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ ЭЭ Э Э
76#+end_src
77
78If you want to browse an archive of NFO files, head over to [[http://www.textfiles.com/piracy/NFO/][textfiles]].
79
80* The Aesthetic
81** ASCII Art and Box Drawing
82
83As you can see in the example above, complex ASCII drawings, logos, and
84structure are a staple of a good NFO file. Commonly, the ASCII art is used to
85create recognizable logos for specific groups in the scene.
86
87This requires fixed-width fonts to be viewed appropriately. E.g., on Windows,
88you could open an NFO file in Notepad and ensure a fixed-width font is selected,
89such as Consolas. Proportional and custom fonts break the flow and structure of
90these files, which is unfortunately the default in modern browsers (unless you
91use code blocks, like I did above).
92
93** Codepage 437
94
95One such character set was often used for NFO files: IBM's [[https://en.wikipedia.org/wiki/Code_page_437][CP437]] character set,
96released with the 1981 IBM PC. This set was popular because each character could
97be typed with an alt code in DOS, even if they were not on the user's keyboard.
98E.g., =Alt + 2665= would result in the following character: =♥=.
99
100* Introducing: nfogen
101
102So, why am I writing about this now? Well, I was feeling nostalgic for NFO files
103recently. As part of this, I started using NFO files for my git repos under my
104new org and wanted a tool that could help me accelerate the generation of these
105files.
106
107Introducing [[https://github.com/krazywarez/nfogen][nfogen]], a small Python utility that can generate NFO files for you based on:
108- templates
109- profiles
110- configuration files
111- CLI flags
112- interactive CLI prompts
113
114This enables fast, customizable, and templatized NFO files you can generate on
115the fly.
116
117** Sample Output
118
119There's no better way to introduce a project than to show a demo, so here's a
120demo of how I generated the =README.nfo= for nfogen itself.
121
122First, I defined =nfogen.toml= so that I could use this as a configuration file
123during generation:
124
125#+begin_src toml
126group = "KRZ"
127site = "krz.sh"
128width = 79
129style = "double"
130layout = "rows"
131
132banner = true
133banner_text = "NFOGEN"
134
135footer = true
136footer_text = "nfogen // krazy warez // krz.sh"
137
138title = "nfogen 1.2.2"
139type = "CLI / library"
140publisher = "krazy warez"
141language = "Python 3.11+ (any 3.x with a JSON config)"
142files = "nfogen.py -- single file, zero deps"
143url = "krz.sh"
144
145notes = """
146nfogen builds scene-style ASCII .nfo files from CLI flags, a config
147file, interactive prompts, or any mix of the three.
148
149FEATURES
150 - CP437 or UTF-8 output; single / double / block box styles
151 - two-column release+game info panel, or simple rows
152 - group profiles: reusable logo, members, couriers, boards
153 - mediainfo import auto-fills video / audio / resolution / size
154 - built-in ASCII banner generator for header logos (this one!)
155 - bundled templates: razor, modern, minimal
156
157QUICKSTART
158 nfogen.py --title "Some.App.v1-KRZ" --type APP --banner
159 nfogen.py -c release.toml -p group.toml -o release.nfo
160 nfogen.py -t razor --title "..." --mediainfo dump.json
161 nfogen.py -i (prompt for every field)
162
163RESOLUTION ORDER
164 template < profile < config file < CLI flags < prompts
165
166See examples/ for full release nfos and a group profile, and
167templates/ for the bundled presets. This README.nfo was itself
168generated by nfogen: nfogen.py -c nfogen.toml
169"""
170#+end_src
171
172Next, I ran the following command, which produced the NFO file below:
173
174#+begin_src shell
175nfogen.py -c nfogen.toml -p -o README.nfo
176#+end_src
177
178#+begin_src nfo
179 # # ##### ### #### ##### # #
180 ## # # # # # # ## #
181 # # # ### # # # ## ### # # #
182 # ## # # # # # # # ##
183 # # # ### #### ##### # #
184
185╔═════════════════════════════════════════════════════════════════════════════╗
186║ N F O G E N 1 . 2 . 2 ║
187║ [ KRZ ] krz.sh ║
188╠═════════════════════════════════════════════════════════════════════════════╣
189║ DATE 2026-08-08 ║
190║ TYPE CLI / library ║
191║ PUBLISHER krazy warez ║
192║ LANGUAGE Python 3.11+ (any 3.x with a JSON config) ║
193║ FILES nfogen.py -- single file, zero deps ║
194║ URL krz.sh ║
195╠═════════════════════════════════════════════════════════════════════════════╣
196║ NOTES ║
197║ ║
198║ nfogen builds scene-style ASCII .nfo files from CLI flags, a config ║
199║ file, interactive prompts, or any mix of the three. ║
200║ ║
201║ FEATURES ║
202║ - CP437 or UTF-8 output; single / double / block box styles ║
203║ - two-column release+game info panel, or simple rows ║
204║ - group profiles: reusable logo, members, couriers, boards ║
205║ - mediainfo import auto-fills video / audio / resolution / size ║
206║ - built-in ASCII banner generator for header logos (this one!) ║
207║ - bundled templates: razor, modern, minimal ║
208║ ║
209║ QUICKSTART ║
210║ nfogen.py --title "Some.App.v1-KRZ" --type APP --banner ║
211║ nfogen.py -c release.toml -p group.toml -o release.nfo ║
212║ nfogen.py -t razor --title "..." --mediainfo dump.json ║
213║ nfogen.py -i (prompt for every field) ║
214║ ║
215║ RESOLUTION ORDER ║
216║ template < profile < config file < CLI flags < prompts ║
217║ ║
218║ See examples/ for full release nfos and a group profile, and ║
219║ templates/ for the bundled presets. This README.nfo was itself ║
220║ generated by nfogen: nfogen.py -c nfogen.toml ║
221╠═════════════════════════════════════════════════════════════════════════════╣
222║ ║
223║ nfogen // krazy warez // krz.sh ║
224║ ║
225╚═════════════════════════════════════════════════════════════════════════════╝
226#+end_src
227
228For more examples, browse the [[https://github.com/krazywarez/nfogen/tree/main/examples][examples]] directory within the repository.
229
230* Usage
231** Installation
232
233The fastest installation method is to clone the repo and use the Python file
234directly:
235
236#+begin_src shell
237git clone https://github.com/krazywarez/nfogen.git && cd nfogen
238nfogen.py -i
239#+end_src
240
241** Generating a File
242
243As noted in the README above, there are numerous ways to generate an NFO file:
244
245#+begin_src shell
246# CLI Flags
247nfogen.py --title "Some.App.v1-KRZ" --type APP --banner
248
249# TOML Configuration Files
250nfogen.py -c release.toml -p group.toml -o release.nfo
251
252# CLI Flags & JSON for mediainfo
253nfogen.py -t razor --title "..." --mediainfo dump.json
254
255# Interactive Mode
256nfogen.py -i
257#+end_src
258
259* How It Works
260
261nfogen itself works by parsing the various inputs, determining a style to use
262for the box-drawing/character sets, and rendering the characters individually by
263rows and columns.
264
265* The Future
266
267I'd love to build this tool out to support more character sets, pre-built
268libraries for ASCII art and table layouts, and more customization options.
269
270If you're interested in helping, feel free to reach out!