dynimg 0.1.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dynimg-0.1.9/.claude/settings.local.json +37 -0
- dynimg-0.1.9/.github/workflows/build-wheels.yml +94 -0
- dynimg-0.1.9/.github/workflows/ci.yml +74 -0
- dynimg-0.1.9/.github/workflows/release.yml +59 -0
- dynimg-0.1.9/.gitignore +13 -0
- dynimg-0.1.9/.pearls/CLAUDE.md +38 -0
- dynimg-0.1.9/.pearls/issues.jsonl +12 -0
- dynimg-0.1.9/CLAUDE.md +2 -0
- dynimg-0.1.9/Cargo.lock +3707 -0
- dynimg-0.1.9/Cargo.toml +68 -0
- dynimg-0.1.9/LICENSE +21 -0
- dynimg-0.1.9/PKG-INFO +423 -0
- dynimg-0.1.9/README.md +398 -0
- dynimg-0.1.9/codebook.toml +1 -0
- dynimg-0.1.9/examples/assets/PlaywriteINGuides-Regular.ttf +0 -0
- dynimg-0.1.9/examples/assets/RobotoMono-Bold.ttf +0 -0
- dynimg-0.1.9/examples/assets/RobotoMono-Bold.woff2 +0 -0
- dynimg-0.1.9/examples/assets/logo.svg +10 -0
- dynimg-0.1.9/examples/assets/servo.css +7680 -0
- dynimg-0.1.9/examples/assets/style.css +44 -0
- dynimg-0.1.9/examples/google-fonts.html +74 -0
- dynimg-0.1.9/examples/inline-only.html +40 -0
- dynimg-0.1.9/examples/local-assets.html +38 -0
- dynimg-0.1.9/examples/local-font-woff2.html +42 -0
- dynimg-0.1.9/examples/local-font.html +42 -0
- dynimg-0.1.9/examples/mixed-assets.html +55 -0
- dynimg-0.1.9/examples/og-image.html +52 -0
- dynimg-0.1.9/examples/quote.html +62 -0
- dynimg-0.1.9/examples/remote-image.html +47 -0
- dynimg-0.1.9/examples/servo.html +392 -0
- dynimg-0.1.9/examples/social-card.html +81 -0
- dynimg-0.1.9/pyproject.toml +36 -0
- dynimg-0.1.9/python/dynimg/__init__.py +35 -0
- dynimg-0.1.9/python/dynimg/__init__.pyi +111 -0
- dynimg-0.1.9/python/dynimg/py.typed +0 -0
- dynimg-0.1.9/scripts/render-examples.sh +110 -0
- dynimg-0.1.9/src/lib.rs +579 -0
- dynimg-0.1.9/src/main.rs +150 -0
- dynimg-0.1.9/src/python.rs +291 -0
- dynimg-0.1.9/test_wheels/.gitignore +4 -0
- dynimg-0.1.9/test_wheels/README.md +52 -0
- dynimg-0.1.9/test_wheels/debug_parser.py +37 -0
- dynimg-0.1.9/test_wheels/debug_verbose.py +12 -0
- dynimg-0.1.9/test_wheels/test_dynimg.py +183 -0
- dynimg-0.1.9/test_wheels/test_from_ci.sh +66 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(pearl *)",
|
|
5
|
+
"WebFetch(domain:github.com)",
|
|
6
|
+
"mcp__kagi__kagi_summarizer",
|
|
7
|
+
"mcp__kagi__kagi_search_fetch",
|
|
8
|
+
"Bash(cargo build:*)",
|
|
9
|
+
"Bash(cargo tree:*)",
|
|
10
|
+
"Bash(cargo run:*)",
|
|
11
|
+
"Bash(cargo clippy:*)",
|
|
12
|
+
"WebFetch(domain:docs.rs)",
|
|
13
|
+
"Bash(chmod:*)",
|
|
14
|
+
"Bash(./scripts/render-examples.sh:*)",
|
|
15
|
+
"Bash(bash scripts/render-examples.sh:*)",
|
|
16
|
+
"Bash(./target/release/dynimg:*)",
|
|
17
|
+
"Bash(open:*)",
|
|
18
|
+
"Bash(gh search issues:*)",
|
|
19
|
+
"Bash(RUST_LOG=blitz_dom=debug,blitz_net=debug ./target/release/dynimg:*)",
|
|
20
|
+
"Bash(unzip:*)",
|
|
21
|
+
"Bash(md5:*)",
|
|
22
|
+
"Bash(cargo search:*)",
|
|
23
|
+
"Bash(cargo add:*)",
|
|
24
|
+
"Bash(cargo doc:*)",
|
|
25
|
+
"Bash(cargo test:*)",
|
|
26
|
+
"Bash(uv venv:*)",
|
|
27
|
+
"Bash(source:*)",
|
|
28
|
+
"Bash(uv pip install:*)",
|
|
29
|
+
"Bash(maturin init --help:*)",
|
|
30
|
+
"Bash(maturin develop:*)",
|
|
31
|
+
"Bash(python:*)",
|
|
32
|
+
"Bash(maturin build:*)",
|
|
33
|
+
"WebSearch",
|
|
34
|
+
"Bash(.venv/bin/python:*)"
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
name: Build Wheels
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
inputs:
|
|
6
|
+
upload-name-suffix:
|
|
7
|
+
description: "Suffix for artifact names (e.g., 'ci' or 'release')"
|
|
8
|
+
required: false
|
|
9
|
+
default: ""
|
|
10
|
+
type: string
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
# Linux x86_64 (glibc)
|
|
14
|
+
linux-x86_64:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Build wheels
|
|
20
|
+
uses: PyO3/maturin-action@v1
|
|
21
|
+
with:
|
|
22
|
+
target: x86_64
|
|
23
|
+
args: --release --out dist --features python
|
|
24
|
+
sccache: "true"
|
|
25
|
+
manylinux: auto
|
|
26
|
+
before-script-linux: |
|
|
27
|
+
yum install -y fontconfig-devel
|
|
28
|
+
|
|
29
|
+
- name: Upload wheels
|
|
30
|
+
uses: actions/upload-artifact@v4
|
|
31
|
+
with:
|
|
32
|
+
name: wheels-linux-x86_64${{ inputs.upload-name-suffix }}
|
|
33
|
+
path: dist
|
|
34
|
+
|
|
35
|
+
# Linux aarch64 (glibc)
|
|
36
|
+
linux-aarch64:
|
|
37
|
+
runs-on: ubuntu-24.04-arm
|
|
38
|
+
steps:
|
|
39
|
+
- uses: actions/checkout@v4
|
|
40
|
+
|
|
41
|
+
- name: Build wheels
|
|
42
|
+
uses: PyO3/maturin-action@v1
|
|
43
|
+
with:
|
|
44
|
+
args: --release --out dist --features python
|
|
45
|
+
sccache: "true"
|
|
46
|
+
manylinux: auto
|
|
47
|
+
before-script-linux: |
|
|
48
|
+
yum install -y fontconfig-devel
|
|
49
|
+
|
|
50
|
+
- name: Upload wheels
|
|
51
|
+
uses: actions/upload-artifact@v4
|
|
52
|
+
with:
|
|
53
|
+
name: wheels-linux-aarch64${{ inputs.upload-name-suffix }}
|
|
54
|
+
path: dist
|
|
55
|
+
|
|
56
|
+
# macOS (x86_64 and aarch64)
|
|
57
|
+
macos:
|
|
58
|
+
runs-on: macos-latest
|
|
59
|
+
strategy:
|
|
60
|
+
matrix:
|
|
61
|
+
target: [x86_64, aarch64]
|
|
62
|
+
steps:
|
|
63
|
+
- uses: actions/checkout@v4
|
|
64
|
+
|
|
65
|
+
- name: Build wheels
|
|
66
|
+
uses: PyO3/maturin-action@v1
|
|
67
|
+
with:
|
|
68
|
+
target: ${{ matrix.target }}
|
|
69
|
+
args: --release --out dist --features python
|
|
70
|
+
sccache: "true"
|
|
71
|
+
|
|
72
|
+
- name: Upload wheels
|
|
73
|
+
uses: actions/upload-artifact@v4
|
|
74
|
+
with:
|
|
75
|
+
name: wheels-macos-${{ matrix.target }}${{ inputs.upload-name-suffix }}
|
|
76
|
+
path: dist
|
|
77
|
+
|
|
78
|
+
# Source distribution
|
|
79
|
+
sdist:
|
|
80
|
+
runs-on: ubuntu-latest
|
|
81
|
+
steps:
|
|
82
|
+
- uses: actions/checkout@v4
|
|
83
|
+
|
|
84
|
+
- name: Build sdist
|
|
85
|
+
uses: PyO3/maturin-action@v1
|
|
86
|
+
with:
|
|
87
|
+
command: sdist
|
|
88
|
+
args: --out dist
|
|
89
|
+
|
|
90
|
+
- name: Upload sdist
|
|
91
|
+
uses: actions/upload-artifact@v4
|
|
92
|
+
with:
|
|
93
|
+
name: wheels-sdist${{ inputs.upload-name-suffix }}
|
|
94
|
+
path: dist
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
env:
|
|
10
|
+
CARGO_TERM_COLOR: always
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
# Rust tests and lints
|
|
14
|
+
rust:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Install system dependencies
|
|
20
|
+
run: sudo apt-get update && sudo apt-get install -y libfontconfig1-dev
|
|
21
|
+
|
|
22
|
+
- name: Install Rust
|
|
23
|
+
uses: dtolnay/rust-toolchain@stable
|
|
24
|
+
|
|
25
|
+
- name: Cache cargo
|
|
26
|
+
uses: actions/cache@v4
|
|
27
|
+
with:
|
|
28
|
+
path: |
|
|
29
|
+
~/.cargo/bin/
|
|
30
|
+
~/.cargo/registry/index/
|
|
31
|
+
~/.cargo/registry/cache/
|
|
32
|
+
~/.cargo/git/db/
|
|
33
|
+
target/
|
|
34
|
+
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
|
35
|
+
|
|
36
|
+
- name: Run tests
|
|
37
|
+
run: cargo test
|
|
38
|
+
|
|
39
|
+
- name: Run clippy
|
|
40
|
+
run: cargo clippy -- -D warnings
|
|
41
|
+
|
|
42
|
+
- name: Check formatting
|
|
43
|
+
run: cargo fmt -- --check
|
|
44
|
+
|
|
45
|
+
# Build all wheels
|
|
46
|
+
build:
|
|
47
|
+
uses: ./.github/workflows/build-wheels.yml
|
|
48
|
+
|
|
49
|
+
# Test Python wheel
|
|
50
|
+
test-python:
|
|
51
|
+
needs: [build]
|
|
52
|
+
runs-on: ubuntu-latest
|
|
53
|
+
steps:
|
|
54
|
+
- uses: actions/checkout@v4
|
|
55
|
+
|
|
56
|
+
- name: Install system dependencies
|
|
57
|
+
run: sudo apt-get update && sudo apt-get install -y libfontconfig1-dev
|
|
58
|
+
|
|
59
|
+
- name: Set up Python
|
|
60
|
+
uses: actions/setup-python@v5
|
|
61
|
+
with:
|
|
62
|
+
python-version: "3.11"
|
|
63
|
+
|
|
64
|
+
- name: Download wheel
|
|
65
|
+
uses: actions/download-artifact@v4
|
|
66
|
+
with:
|
|
67
|
+
name: wheels-linux-x86_64
|
|
68
|
+
path: dist
|
|
69
|
+
|
|
70
|
+
- name: Install wheel
|
|
71
|
+
run: pip install dist/*.whl
|
|
72
|
+
|
|
73
|
+
- name: Run tests
|
|
74
|
+
run: python test_wheels/test_dynimg.py
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
# Build all wheels using shared workflow
|
|
14
|
+
build:
|
|
15
|
+
uses: ./.github/workflows/build-wheels.yml
|
|
16
|
+
|
|
17
|
+
# Publish to PyPI
|
|
18
|
+
publish:
|
|
19
|
+
name: Publish to PyPI
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
needs: [build]
|
|
22
|
+
if: startsWith(github.ref, 'refs/tags/')
|
|
23
|
+
environment:
|
|
24
|
+
name: pypi
|
|
25
|
+
url: https://pypi.org/p/dynimg
|
|
26
|
+
permissions:
|
|
27
|
+
id-token: write
|
|
28
|
+
steps:
|
|
29
|
+
- name: Download all wheels
|
|
30
|
+
uses: actions/download-artifact@v4
|
|
31
|
+
with:
|
|
32
|
+
pattern: wheels-*
|
|
33
|
+
merge-multiple: true
|
|
34
|
+
path: dist
|
|
35
|
+
|
|
36
|
+
- name: Publish to PyPI
|
|
37
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
38
|
+
|
|
39
|
+
# Create GitHub Release
|
|
40
|
+
github-release:
|
|
41
|
+
name: Create GitHub Release
|
|
42
|
+
runs-on: ubuntu-latest
|
|
43
|
+
needs: [build]
|
|
44
|
+
if: startsWith(github.ref, 'refs/tags/')
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@v4
|
|
47
|
+
|
|
48
|
+
- name: Download all wheels
|
|
49
|
+
uses: actions/download-artifact@v4
|
|
50
|
+
with:
|
|
51
|
+
pattern: wheels-*
|
|
52
|
+
merge-multiple: true
|
|
53
|
+
path: dist
|
|
54
|
+
|
|
55
|
+
- name: Create Release
|
|
56
|
+
uses: softprops/action-gh-release@v1
|
|
57
|
+
with:
|
|
58
|
+
files: dist/*
|
|
59
|
+
generate_release_notes: true
|
dynimg-0.1.9/.gitignore
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Pearl Issue Tracking
|
|
2
|
+
|
|
3
|
+
This project uses `pearl` for issue tracking - a daemon-less, file-based issue tracker.
|
|
4
|
+
|
|
5
|
+
## Before starting work
|
|
6
|
+
```bash
|
|
7
|
+
pearl ready # See what's ready to work on
|
|
8
|
+
pearl list -s open # List all open issues
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## When starting a task
|
|
12
|
+
```bash
|
|
13
|
+
pearl update <ID> -s in_progress
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## When completing a task
|
|
17
|
+
```bash
|
|
18
|
+
pearl close <ID>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Creating new issues for bugs/features discovered
|
|
22
|
+
```bash
|
|
23
|
+
pearl create "Title" -t bug -p 1 # Bug, high priority
|
|
24
|
+
pearl create "Title" -t feature -p 2 # Feature, medium priority
|
|
25
|
+
pearl create "Title" -t task # Task (default)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Checking project status
|
|
29
|
+
```bash
|
|
30
|
+
pearl stats
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Guidelines
|
|
34
|
+
|
|
35
|
+
- Check `pearl ready` at the start of a session to see available work
|
|
36
|
+
- Create issues for any bugs or improvements discovered during development
|
|
37
|
+
- Update issue status when starting/completing work
|
|
38
|
+
- Use appropriate priorities: P0=critical, P1=high, P2=medium, P3=low, P4=backlog
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{"id":"pl-037445","pa":null,"s":"c","p":2,"t":"t","a":null,"ti":"Implement stdin support for piped HTML input","de":null,"la":[],"ca":"2026-01-28T17:57:51.872210Z","ua":"2026-01-28T18:07:34.485830Z","xa":"2026-01-28T18:07:34.485830Z","bb":[],"re":[]}
|
|
2
|
+
{"id":"pl-1c1577","pa":null,"s":"c","p":1,"t":"t","a":null,"ti":"Set up Rust project with Cargo.toml and dependencies","de":null,"la":[],"ca":"2026-01-28T17:57:50.430971Z","ua":"2026-01-28T18:07:34.434575Z","xa":"2026-01-28T18:07:34.434575Z","bb":[],"re":[]}
|
|
3
|
+
{"id":"pl-1d3cb4","pa":null,"s":"c","p":2,"t":"t","a":null,"ti":"Implement HTML meta tag parsing for dynimg options","de":null,"la":[],"ca":"2026-01-28T17:57:50.867033Z","ua":"2026-01-28T18:07:34.491959Z","xa":"2026-01-28T18:07:34.491959Z","bb":[],"re":[]}
|
|
4
|
+
{"id":"pl-5abe7f","pa":null,"s":"c","p":3,"t":"t","a":null,"ti":"Create example HTML templates for testing","de":null,"la":[],"ca":"2026-01-28T17:57:57.490699Z","ua":"2026-01-28T18:12:41.460245Z","xa":"2026-01-28T18:12:41.460244Z","bb":[],"re":[]}
|
|
5
|
+
{"id":"pl-7b7267","pa":null,"s":"c","p":1,"t":"t","a":null,"ti":"Implement CLI argument parsing with clap","de":null,"la":[],"ca":"2026-01-28T17:57:50.669919Z","ua":"2026-01-28T18:07:34.441167Z","xa":"2026-01-28T18:07:34.441167Z","bb":[],"re":[]}
|
|
6
|
+
{"id":"pl-9c65a6","pa":null,"s":"c","p":2,"t":"t","a":null,"ti":"Implement JPEG image output with quality setting","de":null,"la":[],"ca":"2026-01-28T17:57:51.707968Z","ua":"2026-01-28T18:07:34.479168Z","xa":"2026-01-28T18:07:34.479168Z","bb":[],"re":[]}
|
|
7
|
+
{"id":"pl-a324d2","pa":null,"s":"c","p":1,"t":"t","a":null,"ti":"Implement core HTML/CSS rendering using Blitz","de":null,"la":[],"ca":"2026-01-28T17:57:51.082533Z","ua":"2026-01-28T18:07:34.447546Z","xa":"2026-01-28T18:07:34.447546Z","bb":[],"re":[]}
|
|
8
|
+
{"id":"pl-abff8d","pa":null,"s":"c","p":2,"t":"t","a":null,"ti":"Add error handling and user-friendly error messages","de":null,"la":[],"ca":"2026-01-28T17:57:57.318765Z","ua":"2026-01-28T18:11:27.233768Z","xa":"2026-01-28T18:11:27.233768Z","bb":[],"re":[]}
|
|
9
|
+
{"id":"pl-ae61c7","pa":null,"s":"c","p":2,"t":"t","a":null,"ti":"Implement WebP image output","de":null,"la":[],"ca":"2026-01-28T17:57:51.495194Z","ua":"2026-01-28T18:07:34.469017Z","xa":"2026-01-28T18:07:34.469016Z","bb":[],"re":[]}
|
|
10
|
+
{"id":"pl-b98d9b","pa":null,"s":"c","p":1,"t":"t","a":null,"ti":"Implement PNG image output","de":null,"la":[],"ca":"2026-01-28T17:57:51.289060Z","ua":"2026-01-28T18:07:34.459334Z","xa":"2026-01-28T18:07:34.459334Z","bb":[],"re":[]}
|
|
11
|
+
{"id":"pl-bafc0b","pa":null,"s":"c","p":2,"t":"t","a":null,"ti":"Implement --allow-net flag for network resource loading","de":null,"la":[],"ca":"2026-01-28T17:57:52.064506Z","ua":"2026-01-28T18:11:27.221753Z","xa":"2026-01-28T18:11:27.221753Z","bb":[],"re":[]}
|
|
12
|
+
{"id":"pl-bcd7d9","pa":null,"s":"c","p":2,"t":"t","a":null,"ti":"Implement --assets flag for sandboxed filesystem access","de":null,"la":[],"ca":"2026-01-28T17:57:52.234169Z","ua":"2026-01-28T18:11:27.227651Z","xa":"2026-01-28T18:11:27.227650Z","bb":[],"re":[]}
|
dynimg-0.1.9/CLAUDE.md
ADDED