psfxform(1)
π psfxform β like, the glow-up station for your PC Screen Font files β¨
okay bestie, welcome to psfxform(1), part of the PSF Tools fam π«Ά (the (1) just means she's a command you run in your terminal, periodt).
πΈ NAME πΈ
psfxform β apply various transformations to a PC Screen Font file. yes she does makeovers π
β¨ SYNOPSIS β¨
psfxform [--first=FIRST] [--last=LAST] [--256] [--bold=RANGE]
[--centre=RANGE] [--double=RANGE] [--flip=RANGE] [--repeat=RANGE]
[--scale=RANGE] [--thin=RANGE] [--strip] [--width=WIDTH]
[--height=HEIGHT] [--codepage=CODEPAGE] [--setcodepage=CODEPAGE]
[--permute=FILE] [--psf1] [--psf2] [INPUTFILE [OUTPUTFILE]]
like. it's giving "one command, so many flags" and honestly? we love that for her π
π DESCRIPTION π
So what does she actually do? psfxform extracts some or all characters from a font in the .PSF format, applies various transformations, and saves the result as another .PSF font. main character energy fr fr π₯
You can pull subsets out as a range of characters, as a codepage, or both β mix and match, iykyk.
Now, the character ranges you pass to --bold, --double and so on? They're optional. But if you do bring them, they're formed as a comma-separated list β and each element is either nnn for a single character, or nnn-nnn for a contiguous set of characters.
For example, to apply --repeat to characters 8, 10 and 179 to 223, you'd write:
--repeat=8,10,179-223
see? not scary at all π
π¦ OPTIONS π¦
--codepage=xβ extracts only the characters in the given codepage. heads up though: this requires the source PSF file to have a Unicode directory. Any characters in the codepage that aren't present in the source font get replaced by blanks (sorry babes, no glyph for you π). You can specify the codepage by number or by name β go checkpsfpages(1)for the list of acceptable codepage names.--setcodepage=xβ replaces any Unicode information in the extracted font with the Unicode mappings for the specified codepage. Note that this option does not change the character bitmaps in any way β it's purely a Unicode-info glow-up, the actual pixels are untouched.--stripβ forces the output font to be written with no Unicode directory, even if the source font had one. like, take it all off, we're going minimalist π§--first=nβ extracts characters starting at the specified character.--last=nβ extracts characters up to and including the specified character.--256β equivalent to--first=0 --last=255. that's the whole vibe in one flag β--permute=filenameβ rearranges the character bitmaps in the output file. Important: this only affects character bitmaps, not the Unicode directory. The filename you pass to--permutecan be-for standard input. Its format should be a series of lines, each containing two numbers separated by a comma β the first number is the character number to change from, and the second is the number to change to. For example, two lines, the first reading65,66and the second reading66,65, will swap the glyphs for A and B. Anything after a#or;is a comment. And psst β the numbers used relate to the source file, before any subset is extracted π--widthβ alters the character cell width in the target font. It doesn't scale characters; it's Procrustean, so glyphs are either packed with whitespace or cropped. no in-between, she's dramatic like that π--heightβ alters the character cell height in the target font.--bold=RANGEβ makes characters bold by drawing them twice. heads up: if no--widthoption is supplied, this will make the target font one pixel wider than the source font. bold and wide, she's thriving π--centre=RANGEβ if the character cell is being made larger or smaller, this aligns character cells by their centres rather than by their top left-hand corners. Also, the spelling--centeris recognised too (we're not gonna gatekeep your spelling π«Ά).--double=RANGEβ doubles each row in the source character. You really wanna use this with the--heightoption to increase the number of character rows β otherwise only the top half of each character will be used, and that's a tragedy bestie π--flip=RANGEβ mirrors characters left/right. β¨ iconic β¨--repeat=RANGEβ when you're increasing the size with--heightor--width, this repeats the last character row and column into new rows/columns rather than leaving them blank. This may help to keep line graphic characters joined up. And when combined with--centre, characters will be expanded at all four edges if necessary. she's thorough π--scale=RANGEβ if the character cell is being made larger or smaller, this attempts to scale the characters to fit. Straight up: this will probably look awful unless the new size is an exact multiple of the old size, or unless you tidy the characters by hand afterwards. not me warning you in advance π--thin=RANGEβ makes characters thin by reducing vertical lines wider than one pixel. skinny legend behaviour π--psf1β forces output to be in PSF1 format.--psf2β forces output to be in PSF2 format.
π¨ okay this part MATTERS, so pay attention bestie: If a codepage and--first/--lastare both specified, the--first/--lastapply to the subset of characters extracted by the codepage. Similarly, all character ranges on--bold,--thinetc. apply to the extracted subset. order of operations, periodt π
π SEE ALSO π
psfpages(1) β go read it, she's the codepage name plug π¦
π AUTHOR π
John Elliott <seasip.webmaster@gmail.com> β the actual legend behind all this π
and that's the whole page, bestie!! this was Version 1.1.3, dated 28 April, 2026 β psfxform, PSF Tools, out πβ¨ slay responsibly, mwah π
π¦ where this page comes from
- nixpkgs unstable: psftools 1.1.3
- ubuntu stonking: psftools 1.1.3-1
- Copyright (c) 2005, 2007 John Elliott
- Copyright (C) 2005, 2007 John Elliott
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms