SignWriting
Python utilities for SignWriting.
Installation
pip install git+https://github.com/sign-language-processing/signwriting
Or with Docker:
docker build --platform linux/amd64 --tag signwriting:python .
docker run --platform linux/amd64 --rm -p 9090:8080 -e PORT=8080 signwriting:python
Utilities
signwriting.formats
This module provides utilities for converting between different formats of SignWriting. We include a few examples:
- To parse an FSW string into a
Signobject, representing the sign as a dictionary:
from signwriting.formats.fsw_to_sign import fsw_to_sign
fsw_to_sign("M123x456S1f720487x492")
# {'box': {'symbol': 'M', 'position': (123, 456)}, 'symbols': [{'symbol': 'S1f720', 'position': (487, 492)}]}
- To convert a SignWriting string in SWU format to FSW format:
from signwriting.formats.swu_to_fsw import swu2fsw
swu2fsw('𝠃𝤟𝤩𝣵𝤐𝤇𝣤𝤐𝤆𝣮𝣭')
# M525x535S2e748483x510S10011501x466S2e704510x500S10019476x475
signwriting.tokenizer
This module provides utilities for tokenizing SignWriting strings for use in NLP tasks1. We include a few usage non-exhaustive examples:
- To tokenize a SignWriting string into a list of tokens:
from signwriting.tokenizer import SignWritingTokenizer
tokenizer = SignWritingTokenizer()
fsw = 'M123x456S1f720487x492S1f720487x492'
tokens = list(tokenizer.text_to_tokens(fsw, box_position=True))
# ['M', 'p123', 'p456', 'S1f7', 'c2', 'r0', 'p487', 'p492', 'S1f7', 'c2', 'r0', 'p487', 'p492'])
- To convert a list of tokens back to a SignWriting string:
tokenizer.tokens_to_text(tokens)
# M123x456S1f720487x492S1f720487x492
- For machine learning purposes, we can convert the tokens to a list of integers:
tokenizer.tokenize(fsw, bos=False, eos=False)
# [6, 932, 932, 255, 678, 660, 919, 924, 255, 678, 660, 919, 924]
- Or to remove 'A' information, and separate signs by spaces, we can use:
from signwriting.tokenizer import normalize_signwriting
normalize_signwriting(fsw)
signwriting.visualizer
This module is used to visualize SignWriting strings as images. Unlike sutton-signwriting/font-db which it is based on, this module does not support custom styling. Benchmarks show that this module is ~5000x faster than the original implementation.
from signwriting.visualizer.visualize import signwriting_to_image
fsw = "AS10011S10019S2e704S2e748M525x535S2e748483x510S10011501x466S20544510x500S10019476x475"
signwriting_to_image(fsw)
To use the visualizer with the server, you can hit: https://signwriting-sxie2r74ua-uc.a.run.app/visualizer?fsw=M525x535S2e748483x510S10011501x466S2e704510x500S10019476x475
signwriting.utils
This module includes general utilities that were not covered in the other modules.
join_signsjoins a list of signs into a single sign. This is useful for example for fingerspelling words out of individual character signs.
from signwriting.utils.join_signs import join_signs_vertical
char_a = 'M507x507S1f720487x492'
char_b = 'M507x507S14720493x485'
result_sign = join_signs_vertical(char_a, char_b)
# M510x518S1f720490x481S14720496x496
canonicalizerewrites a sign's symbols in a canonical order (by category, then top-to-bottom, left-to-right), centers the sign, and tightens its box, without changing the rendered image. Seeutils/canonicalize.
from signwriting.utils.canonicalize import canonicalize
canonicalize('M521x547S20310506x500S33100482x443')
# M521x554S33100482x482S20310506x539
signwriting.fingerspelling
This module is used to generate spelling data from a list of characters.
from signwriting.fingerspelling.fingerspelling import spell
word = "Hello" # any string of characters
language = "en-us-ase-asl" # long language code, as defined in the fingerspelling README
spell(word, language)
# M515x563S11502477x437S14a20492x457S1dc20484x477S1dc20484x512S17620492x547
To use the fingerspelling with the server, you can hit: https://signwriting-sxie2r74ua-uc.a.run.app/fingerspelling?text=hello&signed_language=ase
signwriting.mouthing
This module is used to generate SpeechWriting from spoken words.
from signwriting.mouthing.mouthing import mouth
word = "Hello" # any string of characters, preferably valid words
language = "eng-Latn" # supported languages under "Language Support" at https://pypi.org/project/epitran/
mouth(word, language)
# M557x518S34700443x482S35c00469x482S34400495x482S34d00521x482
Note: Installing English support for epitran requires extra steps,
see "Install flite" at mouthing/README.md.
To use the mouthing with the server, you can hit: https://signwriting-sxie2r74ua-uc.a.run.app/mouthing?text=hello&spoken_language=eng-Latn
Cite
@misc{moryossef2024-signwriting,
title={Utilities for SignWriting},
author={Moryossef, Amit},
howpublished={\url{https://github.com/sign-language-processing/signwriting}},
year={2024}
}
References
-
Amit Moryossef, Zifan Jiang. ↩
Metadata
Release files for signwriting 0.1.18
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| signwriting-0.1.18.tar.gz | 6.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| signwriting-0.1.18-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 13.2 MB
Release files / signwriting-0.1.18.tar.gz
| Download URL | signwriting-0.1.18.tar.gz |
|---|---|
| Size | 6.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1dec08b9d7fc383c24169955c57c28af4d9194ecd11dffd0351b63e4160498c9
|
|
BLAKE2b-256 checksum How to use checksums |
3b29f25263571e4b53993ac136d440cfbe1d82e52e5d991784cccda14e2f1fe4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency logRelease files / signwriting-0.1.18-py3-none-any.whl
| Download URL | signwriting-0.1.18-py3-none-any.whl |
|---|---|
| Size | 6.6 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a82116f5848a4b8596957fb9f320789889dfb13913b1fedfee7d09ef3a63a579
|
|
BLAKE2b-256 checksum How to use checksums |
bcdc52da24e503d1a0d08403977ed466b84bb3096609d22b1637fab3290abe01
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency log