##################
pjimg Requirements
##################
The purpose of this document is to detail the requirements for
:mod:'pjimg', a Python image and animation generator. This is an
initial take for the purposes of planning. There may be additional
requirements or non-required features added in the future.


Purpose
=======
The purposes of :mod:`pjimg` are:

*   Generate images and animations that involve simple patterns interacting,
*   Be a more accurate name than :mod:`pjinoise` was,
*   Consolidate the separate "img*" modules.


Functional Requirements
=======================
The following are the functional requirements for :mod:`pjimg`:

*   Generate images and animations of a given size.


Technical Requirements
======================
The following are the technical requirements for :mod:`pjimg`:

*   Provide a common namespace for the "img*" modules.
*   Consolidate common utilities used across the "img*" modules.


Design Discussion
=================
The following is a deeper discussion of certain aspects of the
:mod:`pjimg` design. This primarily exists as a place to talk
through design challenges in order do find solutions. It is not
intended to be comprehensive nor even completely accurate to the
final design.


Why?
----
Good question. I split up :mod:`pjinoise`. Why am I bringing it back
with a different name?

The main reason is that the individual "img*" modules aren't very
useful on their own. I suppose they could be used in someone else's
image generation code, but is that really going to happen? Who
needs :mod:`imgwriter` who isn't implementing it on their own? It
just a wrapper around open-cv for file I/O.

Also, I just feel bad about using up the namespace of five different
modules if I ever put this on PYPI. I'm not sure I'll ever want to
do that. But, if I do, I'd rather it all be one name.


How Do I Make Images with It?
-----------------------------
:mod:`pjinoise` had a configuration syntax that could be used to
generate images. The "img*" scraped that in favor of making every
image a Python script. So, what now?

I'm probably going to stick with Python scripts. The configuration
syntax was too much of a pain to manage. That said :mod:`pjimg` can
still have some features that make writing those scripts easier.
And, who knows. Maybe a GUI can be set up for it eventually.


So, What Is :mod:`pjimg`?
-------------------------
It is:

*   A namespace for the "img*" modules.
*   A common module to handle code shared between those modules.
*   Possibly some workflow and UI tools to make working with
    the modules easier.