psfxform(1)

πŸ“¦
version 1.1.3 Β· 2 versions
, in nixpkgs unstable, ubuntu stonking

πŸ’… 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 check psfpages(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 --permute can 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 reading 65,66 and the second reading 66,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 --width option 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 --center is 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 --height option 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 --height or --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 / --last are both specified, the --first / --last apply to the subset of characters extracted by the codepage. Similarly, all character ranges on --bold, --thin etc. 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