northcel — The AI-Drawn Video Programming Language (.ncel)
NorthCel (.ncel) is North Noir's domain-specific programming language for AI-drawn images and frame-by-frame animation.
It combines the best properties of three complementary execution models into a single compact, deterministic format:
- MoonBit-style typed, declarative scene structure — algebraic scene layers (
paper,def/use,layer/wash,stroke,ribbon,bend_swarm), compact relative contour encodings (0.25pxquarter-pixel deltas and1pxBase-63 deltas), and strictline:columndiagnostics that an AI coding agent can read and fix. - Bend-style deterministic parallel evaluation — repetitive organic marks (water droplets, beard bristles, wet hair strands, rain streaks, and line boil) are modeled as stateless agents whose output is a pure function of
(seed, frame_index, agent_id), independent of evaluation order. - GLSL-style per-pixel supersampled rendering — every frame is a pure function of
(time, seed, coordinates)evaluated with even-odd winding parity on anN×Nsubpixel grid (default4×4, i.e.,0.25pxresolution) and box-integrated to 8-bit RGB/greyscale.
The reference implementation in this package (northcel) is a pure-Python + NumPy renderer requiring no GPU or external language compilers at user install time. MoonBit, Bend, and OpenGL/EGL GLSL remain optional documented backends.
Install
pipx install northcel
# or
pip install northcel
Both northcel and the short alias ncel are installed on your PATH.
CLI Commands
northcel check scene.ncel [--json] # Parse and validate with line:column diagnostics
northcel fmt scene.ncel [-w] [--check] # Canonical formatter
northcel info scene.ncel # JSON summary of layers, rings, vertices, and bytes
northcel render scene.ncel -o frame0.png # Render a single frame (--frame N, --seed S)
northcel film film.ncel -o frames/ --mp4 out.mp4 # Render frame sequence + optional MP4 via ffmpeg
Example (lantern_film.ncel)
northcel "0.1.0-draft"
film LanternFilm(width: 512, height: 512, fps: 12, frames: 6, precision: 0.25px, seed: 108) {
paper { color: #101824, antialias_grid: 4, grain: 0.012 }
def SeaWave(dx: 0, dy: 0) {
stroke crest(color: #6CCFF6, taper: (4.5, 1.5), boil: 0.75px) {
(40 + dx, 410 + dy), (180 + dx, 398 + dy), (330 + dx, 412 + dy), (470 + dx, 402 + dy)
}
}
layer sea_base(color: #1B3B5A, rings: 1) { "0,1520 2048,0 0,528 -2048,0" }
layer lantern_halo(color: #F4A261, rings: 1, boil: 0.6px, translate: (sin(t * 6.28318) * 14, 0)) {
"920,640 208,0 40,120 -40,120 -208,0 -40,-120"
}
ribbon post_ink(color: #F8F9FA, boil: 0.4px) {
(256, 480, 12), (256 + sin(t * 6.28318) * 6, 320, 9), (256 + sin(t * 6.28318) * 14, 190, 6)
}
bend_swarm rain_streaks(agents: 4, color: #E0FBFC, boil: 0.35px, translate: (lerp(-18, 18, t), lerp(0, 48, t))) {
"320,240 24,72 -8,4 -24,-72|840,300 24,72 -8,4 -24,-72|1420,220 24,72 -8,4 -24,-72|1760,340 24,72 -8,4 -24,-72"
}
use SeaWave(dx: sin(t * 6.28318) * 10, dy: 0)
use SeaWave(dx: cos(t * 6.28318) * -12, dy: 42)
}
Documentation
Full language specification (0.1.0-draft), AI-agent guide, benchmarks, and tutorials live at:
- Website: https://northnoir.com/northcel
- Repository docs:
docs/northcel/
Metadata
Release files for northcel 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| northcel-0.1.0.tar.gz | 131.1 kB | Without provenance | Details for northcel-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| northcel-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for northcel-0.1.0-py3-none-any.whl |
Total release size: 261.7 kB
Release files / northcel-0.1.0.tar.gz
| Download URL | northcel-0.1.0.tar.gz |
|---|---|
| Size | 131.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fc5fdd8517298f998928405d65bcf0c28a062c48c461d460230364a05c4d2dca
|
|
BLAKE2b-256 checksum How to use checksums |
001e30391adfc064ea4f7682e52fc1c5770349d0f3466db016b65c48c15f3089
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / northcel-0.1.0-py3-none-any.whl
| Download URL | northcel-0.1.0-py3-none-any.whl |
|---|---|
| Size | 130.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4990497a3041b6ab8dbd8494000752c6ef84c521ad7b25ab1c958e9fa738cb29
|
|
BLAKE2b-256 checksum How to use checksums |
0b7d046d867b3ef3e7b5ea1b17121d2facf4a9143bb567fc4e5dd5f4774f27c5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Security for northcel 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.