Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fecreator-0.1.0.tar.gz (645.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fecreator-0.1.0-py3-none-any.whl (316.8 kB view details)

Uploaded Python 3

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

Hashes for fecreator-0.1.0.tar.gz
Algorithm Hash digest
SHA256 895658e91dcf7515e73fe8f527653e5bb55de29b2ade106c90326d431cd5fd17
MD5 033d86b1b61965a103a01df66738703b
BLAKE2b-256 a97e36e4acc1bfe1f4fb2182c1832dae1af811de5b17cb6fc4eed681bf34734a

See more details on using hashes here.

Provenance

The following attestation bundles were made for fecreator-0.1.0.tar.gz:

Publisher: publish.yml on laqieer/FECreator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for fecreator-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e321e5a8c0b0df1d86224c696415044f75c4ee2270ba9b3343f845b200bec920
MD5 62fea06f153a5a00fb2a954b22dd4461
BLAKE2b-256 f183a7165ca9651fb7e1b6c6fe34744a4c5ee8a46669dffafdff315a808c639d

See more details on using hashes here.

Provenance

The following attestation bundles were made for fecreator-0.1.0-py3-none-any.whl:

Publisher: publish.yml on laqieer/FECreator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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