vYinn draws the seals that belong on a digitised Chinese classic
中文古籍印章製作工具 Chinese Ancient Seals Design Tool
At a glance
- What is it?
- vYinn is a Perl tool for designing electronic seals for Chinese ancient books, part of the author's project to reproduce historic volumes as ebooks. It works from a configuration file, previews a design in a test render, and produces transparent PNG seals, and its latest rewrite layers the drawing so canvas, frame, text and effects can be adjusted independently.
- Who is it for?
- vYinn suits a person digitising a Chinese classic who needs a seal that looks inked on paper rather than a clean digital stamp, since the distressing and ink effects and the white on black colour logic are the point of the tool, and it suits anyone who wants to compose a seal by editing a configuration file rather than by drawing in a graphics program.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 127 days ago.
- What is it written in?
- Mainly Perl, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A seal designer for a book reproduction project
vYinn is a tool for designing and producing electronic seals for Chinese ancient books, and the name refers to the people of the Shang dynasty, which is the register the tool is aiming at. The English description in the README is short and the context is in the surrounding project notes. The tool is part of the author's Chinese ancient book digital reproduction plan, and it is designed to work alongside vRain, a separate tool for producing electronic books from block printed editions. Read together, that is a two part workflow: vRain rebuilds the book, and vYinn produces the seals that go with it, so the two together are meant to generate an ebook that looks like an old volume rather than a modern typesetting. The interesting consequence is that the target is not a crisp digital stamp. A real seal carved in stone and pressed into paper has uneven edges, ink gaps, wear and a slightly irregular outline, and a vector rectangle stamped on a web page reads as a filter. vYinn exists to produce the former, and the whole feature list is organised around that goal.
The 1.1 rewrite split the drawing into layers
The update notes for version 1.1, dated September 2025, describe a substantial rewrite rather than a feature addition, and the reason given is to allow more design and effect elements. The program was restructured into layers, a canvas layer, a test layer, a seal frame layer, a text layer and a speckle layer, and the configuration parameters were reorganised into groups covering the canvas, export, test, frame, text and effects. The awkward test step was removed: the preview image now has an effect preview added on its right, test renders are written to the test directory, and finished seals are written to the yins directory, which is the change that most directly affects how someone works, since the output is no longer mixed with the drafts. The colour parameters were reworked around a simple idea, white standing for the seal paste and black for the paper background, which makes the code logic easier to follow. The notes also record that the incised and the raised forms are now distinguished in how the frame line width and its spacing from the text area are defined, that the frame and the text can be given separate spread effects, and that the text transformation parameters gained a stroke option where a positive value thickens the characters and minus one thins them slightly.
Frames, scripts and per character placement
The basic functions are a design and layout helper, and the README makes one point explicit: in the draft test image, white represents the seal paste colour. The seal text supports both the incised and the raised forms of seal script, the frame can be a circle, a square or an ellipse, and the paste colour is configurable. Alignment is handled by measuring the font and correcting the spacing above, below, left and right of the characters automatically to get an initial alignment, and then each character can be given its own size, its own coordinates, its own horizontal and vertical scale and its own rotation in degrees. That last set of controls is what separates a seal from a text box, because real seals are hand cut and no two characters sit on a perfect grid. There are also simple effects for ageing the impression, for the ink and for spread. The tool is written in Perl and needs ImageMagick modules installed, and it can output a PNG with a transparent background, which is the format that makes the result usable on a scanned page.
Extracting an existing seal from a scan
One of the most interesting features is not about designing a new seal at all. The y2y directory contains scripts that take a picture of a seal taken from an existing ancient book and produce a new transparent background seal image from it. In a digitisation project this is the shortcut that matters, because the historical seal on a particular edition is part of the artefact you are reproducing, and redrawing it by hand will never be as faithful as lifting it. The tool therefore works in both directions, from a design you compose to a seal image, and from an image that already exists to a usable transparent asset. The README describes the pipeline for the second direction without giving the command line, and the scripts live in their own directory alongside the main program, so the extraction path is a separate step from the design path rather than a mode of the same script.
The workflow is config file, test render, then final output
The usage notes are a short ordered procedure and they explain how the tool is meant to be driven. You start by reading the blank configuration file in the config directory to understand what the canvas, frame, text and effect parameters mean. Then you look at the examples under the yins directory, each of which has a matching configuration file in its own config subdirectory, which is the fastest way to learn by imitation. To begin a new seal, you use the new_config.pl script to generate a new configuration from the blank one, passing the number of rows and columns, for example four by four, and the initial configuration file is generated automatically, with every parameter manageable from the file. Next you run the main script vYinn.pl with the test flag to draw the design side image, open the test suffixed image under the yins directory, adjust the text coordinates and other values in the configuration, and repeat until the preview matches what you want. Only then do you run the same script without the test flag to produce the final effect image and the application image, which is transparent and cropped to the seal.
A small Perl codebase with the samples as its documentation
The repository layout is small and reflects how the tool is used. At the top level sit the main script vYinn.pl and the configuration generator new_config.pl, next to the directories that matter, a config directory holding the parameter files, a yins directory holding the worked examples and their configurations, a test directory for the preview renders, a tmp directory for scratch output, a fonts directory, an images directory, and the y2y directory with the extraction scripts. The examples are the documentation in practice, since a new configuration is best understood by editing an existing one, which is why the notes point you at them before anything else. The project is MIT licensed, which matters for a tool that sits inside a publishing workflow, and the last push was on 2026-06-18 with no GitHub releases published, so the tree on the default branch is the thing to install. There is no package manager entry, no container and no build step, which for a Perl script with ImageMagick dependencies is the ordinary situation rather than a gap.
Editorial conclusion
vYinn suits a person digitising a Chinese classic who needs a seal that looks inked on paper rather than a clean digital stamp, since the distressing and ink effects and the white on black colour logic are the point of the tool, and it suits anyone who wants to compose a seal by editing a configuration file rather than by drawing in a graphics program. It is the wrong choice if you want a general purpose seal or stamp generator, if you need batch output at scale, and if your pipeline cannot run Perl with Image::Magick modules. Verify three things before you commit to a project with it: that the font files in the fonts directory cover the characters in your text, since the layout depends on per character font metrics, that the seal paste colour and the paper background convention in the configuration matches the pages you are reproducing, and that the extraction scripts in the y2y directory produce clean transparent output on the scan resolution you have, since they work from existing images of historical seals. The licence is MIT, the last push was on 2026-06-18, and the repository publishes no GitHub releases.
Frequently asked questions
What is vYinn used for?
It is a tool for designing and producing electronic seals for Chinese ancient books, part of the author's Chinese ancient book digital reproduction project, and it is intended to work alongside the vRain tool for producing block printed edition ebooks.
What does vYinn need to run?
It is written in Perl and requires Image::Magick modules to be installed. The repository holds the main script vYinn.pl, the configuration generator new_config.pl, and the config, fonts, images, test, tmp, yins and y2y directories.
How do I create a new seal configuration in vYinn?
You use the new_config.pl script to initialise a new configuration file from config/blank.cfg, giving the number of rows and columns, for example four by four. Every parameter is then managed from that configuration file.
What are the two output modes of vYinn?
Running the main script with the test flag draws the design preview, whose images are written under the yins directory with a test suffix so you can adjust text coordinates and regenerate. Running it without the flag produces the final effect image and the application image, which has a transparent background and is cropped.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/shanleiguang-vyinn)Was this useful?