Local-first Fire Emblem portrait creation workbench
Project description
FECreator
Local-first, agent-neutral, provider-neutral Fire Emblem portrait creation
workbench with deterministic imaging, immutable jobs/lineage, human review, and a
fe-gba-portrait-standard export compatible with FEBuilderGBA (file-based, ROM-free).
See docs/product-statement.md for scope and docs/architecture.md for the module map.
The frozen v1 public surface — contracts, HTTP routes, CLI commands, MCP tools,
capability semantics, and the compatibility policy — is in
docs/v1-contract.md.
FEBuilderGBA compatibility evidence levels (mandatory deterministic proof, optional
CLI validation, opt-in local ROM checks) are documented in
docs/febuilder-interop.md.
Getting started
Supported runtimes are Python 3.11-3.13 and Node.js 20.19-24. Run everything from the repository root.
python -m pip install -e ".[dev]"
npm ci
pre-commit install
Build the web bundle before packaging or serving; the generated
src/fecreator/_web directory is ignored and must never be committed.
# Local app: root-relative assets, written into src/fecreator/_web
npm run -w @laqieer/fecreator-web build
python -m build
# GitHub Pages demo: assets use the /FECreator/ base path
npm run -w @laqieer/fecreator-web build:demo
Run the local workbench (loopback only, FECREATOR_DATA_ROOT required):
$env:FECREATOR_DATA_ROOT = "$PWD\data"
fecreator serve
Checks
# Python
ruff check .
ruff format --check .
mypy src
pytest -q
# Web
npm run -w @laqieer/fecreator-web typecheck
npm run -w @laqieer/fecreator-web lint
npm run -w @laqieer/fecreator-web test
# Browser end-to-end flows (builds the local and demo bundles first)
npx playwright install chromium
npm run -w @laqieer/fecreator-web test:e2e
Set FECREATOR_PYTHON when the interpreter that has FECreator installed is not
python; a path containing spaces is quoted automatically, and an already quoted
value is accepted as-is.
CI runs python, web, browser, package, febuilder-interop, and
secret-scan on every push and pull request. The GitHub Pages deployment is
limited to successful main pushes and depends on all six. The optional external
FEBuilder-compatible check runs only when the FEBUILDER_CLI repository variable
is set; no gate ever requires a ROM.
Releasing
Releases go to PyPI through Trusted Publishing (OIDC); no PyPI API token exists
in this repository. Pushing a v*.*.* tag builds the distributions in an
unprivileged job that checks out refs/tags/<tag>, then publishes them from a
separate pypi environment job that a required reviewer must approve and that
only v*.*.* tags may deploy to. A manual re-run is dispatched on the tag
itself (gh workflow run publish.yml --ref v0.1.0).
See docs/pypi-publishing.md for the trust boundary,
the exact pending-publisher fields, and the required environment protection.
Live demo
A static, sample-data demo is published to GitHub Pages:
https://laqieer.github.io/FECreator/
The demo runs entirely in the browser with built-in synthetic data. It cannot
generate, validate, upload, or save real assets, makes no HTTP or WebSocket calls,
and resets whenever the page is reloaded. See
docs/github-pages-demo.md for build modes and
limitations.
Security
Secrets are guarded by layered scanning: a local
ggshield pre-commit hook, a
secret-scan CI job on pushes and internal PRs, and the GitGuardian GitHub App
for fork PRs and full history. Test fixtures that need credential shapes are
assembled at runtime (never stored as literals), and a regression test blocks
any literal JWT/AWS-key from re-entering the tree.
See docs/security.md for the incident classification, the
required dashboard action, fork-PR limitations, and setup commands
(gh secret set GITGUARDIAN_API_KEY --repo laqieer/FECreator, pre-commit install).
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fecreator-0.1.0.tar.gz.
File metadata
- Download URL: fecreator-0.1.0.tar.gz
- Upload date:
- Size: 645.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
895658e91dcf7515e73fe8f527653e5bb55de29b2ade106c90326d431cd5fd17
|
|
| MD5 |
033d86b1b61965a103a01df66738703b
|
|
| BLAKE2b-256 |
a97e36e4acc1bfe1f4fb2182c1832dae1af811de5b17cb6fc4eed681bf34734a
|
Provenance
The following attestation bundles were made for fecreator-0.1.0.tar.gz:
Publisher:
publish.yml on laqieer/FECreator
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fecreator-0.1.0.tar.gz -
Subject digest:
895658e91dcf7515e73fe8f527653e5bb55de29b2ade106c90326d431cd5fd17 - Sigstore transparency entry: 2265802488
- Sigstore integration time:
-
Permalink:
laqieer/FECreator@bac569425ffb1ca4250ac48f0d6b010f19a0eba1 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/laqieer
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bac569425ffb1ca4250ac48f0d6b010f19a0eba1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file fecreator-0.1.0-py3-none-any.whl.
File metadata
- Download URL: fecreator-0.1.0-py3-none-any.whl
- Upload date:
- Size: 316.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e321e5a8c0b0df1d86224c696415044f75c4ee2270ba9b3343f845b200bec920
|
|
| MD5 |
62fea06f153a5a00fb2a954b22dd4461
|
|
| BLAKE2b-256 |
f183a7165ca9651fb7e1b6c6fe34744a4c5ee8a46669dffafdff315a808c639d
|
Provenance
The following attestation bundles were made for fecreator-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on laqieer/FECreator
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fecreator-0.1.0-py3-none-any.whl -
Subject digest:
e321e5a8c0b0df1d86224c696415044f75c4ee2270ba9b3343f845b200bec920 - Sigstore transparency entry: 2265802654
- Sigstore integration time:
-
Permalink:
laqieer/FECreator@bac569425ffb1ca4250ac48f0d6b010f19a0eba1 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/laqieer
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bac569425ffb1ca4250ac48f0d6b010f19a0eba1 -
Trigger Event:
push
-
Statement type: