339 lines
13 KiB
ReStructuredText
339 lines
13 KiB
ReStructuredText
|
LunaGen Guide
|
||
|
=============
|
||
|
|
||
|
..contents::
|
||
|
|
||
|
LunaGen is a static website generator for episodic media created
|
||
|
to support the "Lunatics_!" open animated series project. The site
|
||
|
structure it is designed for has:
|
||
|
|
||
|
* An index page with lists of episodes in (possibly) multiple series.
|
||
|
* A page for each episode, with structure determined by the theme and data.
|
||
|
* Additional special list pages for Characters, Settings, Sponsors, and Affiliates.
|
||
|
* Any additional hand-created pages desired.
|
||
|
|
||
|
The data driving the site is authored directly in YAML_ format.
|
||
|
|
||
|
The templates used for site generation (which can be overridden in themes) are
|
||
|
written in Jinja2_.
|
||
|
|
||
|
In addition, both theme and data also contain site "skeletons", which provide additional
|
||
|
files needed: most notably the CSS style sheets in the theme and the necessary images
|
||
|
and static HTML pages you want to use in your site source data directory.
|
||
|
|
||
|
It is very likely you will want to create a custom theme for your site. Please see
|
||
|
the `Theme Author Guide`_ for how to do that. This `Site Author Guide`_ is targeted
|
||
|
at users who simply want to use the package to generate a website using an existing
|
||
|
theme. Should you want to make changes to the code itself, you'll want to read the
|
||
|
`Developer Guide`.
|
||
|
|
||
|
Alternatives
|
||
|
------------
|
||
|
|
||
|
Is LunaGen for you? LunaGen sacrifices generality in order to provide an extremely
|
||
|
simple authoring environment for publishing episodic multimedia content.
|
||
|
|
||
|
I do not recommend it for publishing textual content simply because
|
||
|
it lacks any sophisticated markup language. It is also not a general purpose
|
||
|
content management system, as it is very specific to episodic data, and only
|
||
|
provides a few hard-coded special pages. Making all these assumptions allows
|
||
|
us to keep the data we have to write to update the site very short and simple,
|
||
|
but it also means we can't stretch the software much to do other tasks.
|
||
|
|
||
|
If you want a more text-intensive site, like a static blog listing, you should
|
||
|
probably check out more robust solutions like Pelican_ or Jekyll_, which are
|
||
|
optimized for that kind of use. Perhaps in the future we'll create some kind
|
||
|
of integration to allow LunaGen to be used along with other tools more easily.
|
||
|
|
||
|
We rejected those and designed our own generator because of the amount of
|
||
|
boilerplate we'd need to add to generate simple listings of the type we wanted
|
||
|
using a blog-oriented generator. Using YAML_ allows us to keep our information
|
||
|
field-oriented, with only a little descriptive text needed, but without the
|
||
|
overhead of a database-driven site.
|
||
|
|
||
|
|
||
|
Site Author Guide
|
||
|
-----------------
|
||
|
LunaGen site data consists primarily of a set of YAML_ files and a site skeleton
|
||
|
containing additional content files your site needs -- mostly images, but also
|
||
|
possibly static HTML pages that will simply be copied without modification to your
|
||
|
site.
|
||
|
|
||
|
In general, you should not include CSS files in your site skeleton. These should be
|
||
|
incorporated into a custom **theme** skeleton instead. However, any files you put in
|
||
|
your site skeleton will be copied to your site after the theme files, potentially
|
||
|
replacing them if there is a name collision. So you *can* override CSS this way, though
|
||
|
it's not recommended.
|
||
|
|
||
|
The YAML files for your site follow a very specific structure and some files are
|
||
|
mandatory. At the top level you will find:
|
||
|
|
||
|
``site.yaml``
|
||
|
This defines global variables needed throughout your site:
|
||
|
|
||
|
``sitename``
|
||
|
This is the name used for your entire site. Probably the name of the show.
|
||
|
It must be a simple identifier, and may be used to construct some filenames
|
||
|
or variables.
|
||
|
|
||
|
``sitetitle``
|
||
|
This is the fully-styled name for your site, which may contain punctuation
|
||
|
and spaces.
|
||
|
|
||
|
``imgdir``
|
||
|
This is the location where your images live in your site skeleton.
|
||
|
Whenever a template looks for an image, this will be prepended to the
|
||
|
URL. The exact location of the image below that will be determined by
|
||
|
the template and is theme-specific. So you can structure your images
|
||
|
anyway you like in a custom theme, but will need to learn the requirements
|
||
|
of a theme if you are using someone else's.
|
||
|
|
||
|
``stylesheets``
|
||
|
A list of stylesheets to be referenced by *every* page on your site.
|
||
|
This will be included first, followed by stylesheets requested in
|
||
|
other documents. TODO: this should really be in the theme.
|
||
|
|
||
|
``characters.yaml``
|
||
|
This is the data for a special page listing your series' characters.
|
||
|
TODO: should be optional.
|
||
|
|
||
|
``affiliates.yaml``
|
||
|
List of affiliate advertisements with ``name``, ``img``, and ``url`` fields
|
||
|
to generate the "affiliates banner". TODO: again, should be optional.
|
||
|
|
||
|
``products.yaml``
|
||
|
List of product ad images to advertise your merchandise storefront.
|
||
|
TODO: again, optional.
|
||
|
|
||
|
``software.yaml``
|
||
|
A list of software banners to call out your favorite production software,
|
||
|
advertising those projects so they get some support.
|
||
|
TODO: again, optional.
|
||
|
|
||
|
|
||
|
There is also an ``episodes`` directory, which contains the series and episode
|
||
|
data. Within it you will find:
|
||
|
|
||
|
``series.yaml``
|
||
|
This defines the available series of episodes, and defines several terms to
|
||
|
be used inside the episode files. It consists of a list of series, each of
|
||
|
which must define:
|
||
|
|
||
|
``name``
|
||
|
Name or title of the series, to be shown to the user.
|
||
|
|
||
|
``order``
|
||
|
This is an integer which is used to control the display order. It is
|
||
|
not directly shown, and does not have to be sequential (for example
|
||
|
we numbered our audiodrama series 100 to make sure it always appears
|
||
|
after the animated series). It also need not be in the same order
|
||
|
as the series are listed in your file.
|
||
|
|
||
|
``directory``
|
||
|
This is a brief identifier for the series, used as the directory name
|
||
|
for storing the episode files, and also as a key field.
|
||
|
|
||
|
``modes``
|
||
|
Defines the possible production modes for each episode. Should at least
|
||
|
contain a ``release`` mode for a finally-released episode, but it may
|
||
|
also have earlier workflow modes, such as ``fundraising`` or ``production``,
|
||
|
to show the state of the episode (and therefore what information will
|
||
|
be available for it). For each mode, there is a ``template`` value telling
|
||
|
what template the theme should use to format the episode.
|
||
|
|
||
|
TODO: this is theme-dependent, but I'm not sure how to separate it.
|
||
|
|
||
|
``credits``
|
||
|
This is a collection of definitions for credits blocks to be used in
|
||
|
your episode credits. It defines named blocks, for which the following
|
||
|
should be defined:
|
||
|
|
||
|
``order``
|
||
|
Controls the order of presentation of the fields.
|
||
|
|
||
|
``heading``
|
||
|
What heading to show in the credits listing on the output
|
||
|
page. For example, in our file, this tells us that ``animation_credits``
|
||
|
should be listed as "3D Models and Animation". Optional. If
|
||
|
no heading is provided, no heading will be shown.
|
||
|
|
||
|
``labels``
|
||
|
Controls how the credits will be listed. If this is a list,
|
||
|
it lists identifier and title pairs to be used in the listing.
|
||
|
The order of this list controls the order of the credits (they
|
||
|
may be identified in any order in the episode file).
|
||
|
|
||
|
The value may instead be one of the following strings:
|
||
|
|
||
|
``ordered``
|
||
|
Credits will simply be listed in the order presented in the
|
||
|
episode file, with labels expressed there.
|
||
|
|
||
|
``alpha``
|
||
|
Credits will be listed in alphabetized order.
|
||
|
|
||
|
The exact behavior of the labels value is controlled by the
|
||
|
credits template used, so may be theme-dependent.
|
||
|
|
||
|
``template``
|
||
|
Determines which template will be used to display this credits
|
||
|
block, determining layout behavior. The following are defined:
|
||
|
|
||
|
``centered_credits``
|
||
|
Credits will be listed in simple order, down the middle.
|
||
|
No columns are used, even on a wide screen. Typically used
|
||
|
for main credits.
|
||
|
|
||
|
``basic_credits``
|
||
|
Used for a variety of credit listings. Will try to save some
|
||
|
space by using columns to fill the screen better.
|
||
|
|
||
|
``cast_credits``
|
||
|
Designed to display paired credits, as in cast listings, with
|
||
|
character/actor pairings.
|
||
|
|
||
|
``music_credits``
|
||
|
This displays credits in blocks with named fields for each
|
||
|
title. This changes the interpretation of labels to refer
|
||
|
to the labels used in the individual blocks.
|
||
|
|
||
|
``sponsortypes``
|
||
|
Definitions for your sponsors. Determines what categories you have
|
||
|
and how they will be listed. Note that defining the sponsors here
|
||
|
means you can have a different system for different series.
|
||
|
|
||
|
For each type listed, the following fields may be defined:
|
||
|
|
||
|
``limit``
|
||
|
An integer expressing a limit on how many of this kind of sponsor
|
||
|
is accepted and will be listed (more than this will not be displayed).
|
||
|
|
||
|
``page``
|
||
|
An integer expressing the number of sponsors to be included in a single
|
||
|
block in the listing (this is used to space the sponsors out through
|
||
|
the credits).
|
||
|
|
||
|
``excludes``
|
||
|
The name of another sponsortype that can't be used on the same episode
|
||
|
as this one. Should suppress display of the other, but this isn't
|
||
|
implemented.
|
||
|
|
||
|
``template``
|
||
|
Template name to use for displaying a list of these sponsors.
|
||
|
|
||
|
``desc``
|
||
|
Description of the sponsor type. Will be used to create an informational
|
||
|
page for viewers and potential sponsors.
|
||
|
|
||
|
|
||
|
In the ``episodes`` directory, you will also find subdirectories for each series
|
||
|
using the directory names defined above. Inside each are files for each episode,
|
||
|
with episode-specific data:
|
||
|
|
||
|
*episode*``.yaml``
|
||
|
|
||
|
The following fields are required:
|
||
|
|
||
|
``series``
|
||
|
Backlink to the series identifier.
|
||
|
|
||
|
``episode``
|
||
|
The episode number -- an integer.
|
||
|
TODO: maybe change this to 'number' so we have episode.number instead
|
||
|
of episode.episode?
|
||
|
|
||
|
``mode``
|
||
|
Status of the episode, such as whether it's released, in-development,
|
||
|
in-production, etc. The value should be one of the values defined in
|
||
|
``modes`` in the ``series.yaml`` file. The value may also control
|
||
|
how other information in this file is handled and presented (and which
|
||
|
values are needed). In fact, this may be one way to handle information
|
||
|
that isn't available yet, such as animation credits for an episode that's
|
||
|
just in development.
|
||
|
|
||
|
``title``
|
||
|
The title presented for the episode. Used in several places.
|
||
|
|
||
|
``poster``
|
||
|
Image filename to be used to represent the episode. Ours are square
|
||
|
600x600 pixel images, but the format you use is theme-dependent.
|
||
|
|
||
|
``status``
|
||
|
A brief status message to be included under the title. Good for release
|
||
|
dates or fundraising messages.
|
||
|
|
||
|
``description``
|
||
|
One-paragraph description of the episode. The "blurb".
|
||
|
|
||
|
``credits``
|
||
|
The fields defined in this category must be the ones defined in the
|
||
|
series ``credits`` field. Here you will list the actual credits to
|
||
|
use, in a format determined by the template you listed.
|
||
|
|
||
|
``sponsors``
|
||
|
The actual sponsors, in formats determined by the templates you defined
|
||
|
in the series' ``sponsortypes`` fields. Typically includes ``name``,
|
||
|
``url``, and ``img`` fields for graphic sponsor types, or just a list of
|
||
|
strings for simple named credits (like Patrons or Backers).
|
||
|
|
||
|
``ordered`` and ``cast_credits`` require pairs to be defined of
|
||
|
credit name and credit, like this::
|
||
|
|
||
|
- - Director
|
||
|
- Terry Hancock
|
||
|
|
||
|
- - Writer
|
||
|
- Rosalyn Hunter
|
||
|
|
||
|
For credit blocks with listed labeled credits, the credits should
|
||
|
be given as mappings, using the identifiers you defined, like this::
|
||
|
|
||
|
mech_models:
|
||
|
- Chris Kuhn
|
||
|
|
||
|
Other fields are dependent on the mode, but may include:
|
||
|
|
||
|
``videos``
|
||
|
Videos to display in the video carousel for the episode page, typically
|
||
|
including at least a preview. Ours also include the full episode, a
|
||
|
brief explainer about our business model, and a thank-you message from
|
||
|
the creators. Each video need to define ``id``, ``name``, ``url``,
|
||
|
and ``btn``, needed by the video template.
|
||
|
|
||
|
``product``
|
||
|
Defines a product to pitch on the page. We use this to direct viewers to
|
||
|
the DVD or download bundle releases of our episode in our Gumroad store.
|
||
|
Values are defined by how they are used in the template. Ours provides:
|
||
|
``img``, ``url``, ``title``, and two message fields, ``msg1`` and ``msg2``
|
||
|
which are displayed under certain circumstances.
|
||
|
|
||
|
``funding``
|
||
|
A block defining fields for a crowdfunding campaign, which may include
|
||
|
multiple campaigns on separate platforms. This provides a combined display
|
||
|
of funds raised, and may include pre-sales, matching funds, sponsorships,
|
||
|
and fixed or flexible goal fundraising from crowdfunding platforms.
|
||
|
|
||
|
TODO:
|
||
|
Currently this is a display-only feature and requires manual updating, but
|
||
|
we might provide some kind of plugin system for updating this when the site
|
||
|
is regenerated.
|
||
|
|
||
|
Theme Author Guide
|
||
|
------------------
|
||
|
|
||
|
To be added: should explain the files, templates, and stylesheets a theme needs to
|
||
|
define and how they will be used.
|
||
|
|
||
|
|
||
|
Developer Guide
|
||
|
---------------
|
||
|
|
||
|
To be added: should explain how LunaGen works and how to contribute to it.
|
||
|
|
||
|
|
||
|
|
||
|
.. _Lunatics: http://lunatics.tv
|
||
|
.. _YAML: https://yaml.org/
|
||
|
.. _Jinja2: https://palletsprojects.com/p/jinja/
|
||
|
.. _Pelican: https://blog.getpelican.com/
|
||
|
.. _Jekyll: https://jekyllrb.com/
|