Skip to main content

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

  1. Import everything you need.
from scriptmaker import Character, Datastore, Script, PDFTools, Renderer, ScriptmakerError
  1. 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()
  1. 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)
  1. 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
  1. Render it!
outputs = Renderer().render(my_script)
        # my_script.render()
  1. 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
  • Breaking changes:
    • if you were using the (unpackaged) version of scriptmaker, you will need to write your own scripts

Project details


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.0.tar.gz (22.6 MB view hashes)

Uploaded Source

Built Distribution

scriptmaker-1.2.0-py3-none-any.whl (22.7 MB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page