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
Install the package with your package manager of choice.
pip install scriptmaker
poetry add scriptmaker
...
Using the CLI
scriptmaker <inputs> [outputs] [options]
inputs: (--url | --script)
--url https://url/to/script.json
--script path/to/script.json
--nights path/to/nights.json
outputs:
--compress
--export
--pngify
--save-to path/to/folder/
options:
--i18n-fallback
--simple-nightorder
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 = Renderer().render(my_script)
# my_script.render()
- Postprocess your PDFs.
for _, path in outputs:
PDFTools.compress(path)
PDFTools.pngify(path)
Changelog
1.0.0 - packages are neat
- Character updates:
- adds all experimental characters up to the Ojo
- Features:
- shows a script's author and logo if those properties are in the
_meta
- shows a script's author and logo if those properties are in the
- Breaking changes:
- if you were using the (unpackaged) version of
scriptmaker
, you will need to write your own scripts
- if you were using the (unpackaged) version of
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-1.2.2.tar.gz
(22.6 MB
view hashes)
Built Distribution
Close
Hashes for scriptmaker-1.2.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 277d1a322a8f73c7c84eb874b2eb59ca5d4fd3e19bbe90f1fab127eb49a688a8 |
|
MD5 | b6d0a1b18d42b853df35985b02bd163e |
|
BLAKE2b-256 | 32f5eaebb29ab5127e5a5a25fd5ae4e13eb12c96071389d8eb43cfd276aef1fa |