A Python library for producing custom scripts in Blood On The Clocktower.
Project description
Scriptmaker
A PDF writer for Blood on the Clocktower scripts.
Scriptmaker includes some special features:
- support for modern and legacy base3+experimental custom scripts
- homebrew character support via the official app's character schema
- as a result, supports translations too!
- nightorder styles: single-sided rotated, or double-sided full-text
- i18n support with fallback rendering modes
Significant credit goes to chizmw for inspiration and assets!
Stack
- Python
poetry
jinja2
Examples
Trouble Brewing
Here's scriptmaker's default output for the official Trouble Brewing script.
You can also choose to generate simple nightorders.
Custom script & homebrew
Homebrewed content and custom logos are also supported.
Usage
Installation
Scriptmaker requires the following non-Python dependencies:
ghostscript
poppler-utils
pango
Install the package with your package manager of choice.
pip install scriptmaker
poetry add scriptmaker
...
Using the CLI
scriptmaker (make-pdf | tokenize)
scriptmaker make-pdf <inputs> [output] [options]
inputs:
(--script path/to/script.json | --url https://script.json | --recurse path/to/folder/) # Sources a script.
[--nights path/to/nights.json] # Supplies a custom night order.
output:
[--output-folder path/to/folder/] # Creates build/ and pdf/ folders under this directory.
options:
[--full] # Creates a full-text two-sided nightorder
[--simple] # Creates a simple, rotatable nightorder for physical printing
[--i18n-fallback] # Tries to resolve issues with non-Latin character rendering
[--postprocess] # Compresses PDFs and generates PNGs for pages
scriptmaker tokenize <inputs> [output] [options]
inputs:
directory # Recurses over it, adds all scripts to a datastore, and prints the result.
output:
[--output-folder path/to/folder/] # Creates build/ and pdf/ folders under this directory.
options:
[--character-size size-in-mm] # Determines the size in millimetres of character tokens; default 45.
[--reminder-size size-in-mm] # Determines the size in millimetres of reminder tokens; default 19.
[--extra-copies path/to/copies.json] # A key-value dict of character IDs and token counts, if you wish to generate extra copies.
[--official-only | --exclude-official] # Either only print base3 + experimental tokens, or don't add them at all (good for homebrews).
[--postprocess] # Compresses PDFs and generates PNGs for pages
Using the package
- Import everything you need.
from scriptmaker import Character, Datastore, Script, PDFTools, Renderer, ScriptmakerError
- Create a data store for your new script.
# Create a datastore (leaving it blank uses a temporary directory)
my_datastore : Datastore = Datastore("my/output/directory/")
# Load the official characters into it, if you want
my_datastore.add_official_characters()
- Load a script.json file.
with open("my/script.json", "r") as json_file:
my_script_json = json.load(json_file)
# Perhaps you have a custom nightorder.
with open("my/nightorder.json", "r") as nightorder_file:
my_nightorder = json.load(nightorder_file)
# Loads the characters into the datastore, then builds a script object too
my_script : Script = my_datastore.load_script(my_script_json, nightorder_json = my_nightorder)
- Set your desired options on the script if not already in the script.json.
# Metas are automatically set if there was a _meta block in the script.json
my_script.meta.author = "rsarvar1a"
my_script.meta.add_logo("https://my/logo/url.png")
# Options have defaults; see ScriptOptions()
my_script.options.i18n_fallback = True
- Render it!
outputs = set()
# Renders to the datastore path, if no output_folder is given
outputs.add(Renderer().render_script(my_script), output_folder = None)
outputs.add(Renderer().render_nightorder(my_script))
- Postprocess your PDFs.
for path in outputs:
PDFTools.compress(path)
PDFTools.pngify(path)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
scriptmaker-2.0.2.tar.gz
(33.7 MB
view details)
Built Distribution
File details
Details for the file scriptmaker-2.0.2.tar.gz
.
File metadata
- Download URL: scriptmaker-2.0.2.tar.gz
- Upload date:
- Size: 33.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/5.15.153.1-microsoft-standard-WSL2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb91f44021a9416eb50fcaf24afb45178f39d66693a2585441a9d861ed7b09a0 |
|
MD5 | bfacfd20f99d102c3f7e4a5dc961bd63 |
|
BLAKE2b-256 | bb092efcecc75e29cbe5699a1b8b27f13b15ff9ab8c2ca5a8dfd50fa810004b0 |
File details
Details for the file scriptmaker-2.0.2-py3-none-any.whl
.
File metadata
- Download URL: scriptmaker-2.0.2-py3-none-any.whl
- Upload date:
- Size: 33.7 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/5.15.153.1-microsoft-standard-WSL2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 426281c13916931014839cfd477956467288904402eaa570d77e261df2fb2585 |
|
MD5 | 8c35eed045c4bafa676a9136a09bf612 |
|
BLAKE2b-256 | 4dcf3775fde931a5462fc7f63f463d41708004a838b0c91e8c16981d48e080f3 |