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.
Files changed (45) hide show
  1. dynimg-0.1.9/.claude/settings.local.json +37 -0
  2. dynimg-0.1.9/.github/workflows/build-wheels.yml +94 -0
  3. dynimg-0.1.9/.github/workflows/ci.yml +74 -0
  4. dynimg-0.1.9/.github/workflows/release.yml +59 -0
  5. dynimg-0.1.9/.gitignore +13 -0
  6. dynimg-0.1.9/.pearls/CLAUDE.md +38 -0
  7. dynimg-0.1.9/.pearls/issues.jsonl +12 -0
  8. dynimg-0.1.9/CLAUDE.md +2 -0
  9. dynimg-0.1.9/Cargo.lock +3707 -0
  10. dynimg-0.1.9/Cargo.toml +68 -0
  11. dynimg-0.1.9/LICENSE +21 -0
  12. dynimg-0.1.9/PKG-INFO +423 -0
  13. dynimg-0.1.9/README.md +398 -0
  14. dynimg-0.1.9/codebook.toml +1 -0
  15. dynimg-0.1.9/examples/assets/PlaywriteINGuides-Regular.ttf +0 -0
  16. dynimg-0.1.9/examples/assets/RobotoMono-Bold.ttf +0 -0
  17. dynimg-0.1.9/examples/assets/RobotoMono-Bold.woff2 +0 -0
  18. dynimg-0.1.9/examples/assets/logo.svg +10 -0
  19. dynimg-0.1.9/examples/assets/servo.css +7680 -0
  20. dynimg-0.1.9/examples/assets/style.css +44 -0
  21. dynimg-0.1.9/examples/google-fonts.html +74 -0
  22. dynimg-0.1.9/examples/inline-only.html +40 -0
  23. dynimg-0.1.9/examples/local-assets.html +38 -0
  24. dynimg-0.1.9/examples/local-font-woff2.html +42 -0
  25. dynimg-0.1.9/examples/local-font.html +42 -0
  26. dynimg-0.1.9/examples/mixed-assets.html +55 -0
  27. dynimg-0.1.9/examples/og-image.html +52 -0
  28. dynimg-0.1.9/examples/quote.html +62 -0
  29. dynimg-0.1.9/examples/remote-image.html +47 -0
  30. dynimg-0.1.9/examples/servo.html +392 -0
  31. dynimg-0.1.9/examples/social-card.html +81 -0
  32. dynimg-0.1.9/pyproject.toml +36 -0
  33. dynimg-0.1.9/python/dynimg/__init__.py +35 -0
  34. dynimg-0.1.9/python/dynimg/__init__.pyi +111 -0
  35. dynimg-0.1.9/python/dynimg/py.typed +0 -0
  36. dynimg-0.1.9/scripts/render-examples.sh +110 -0
  37. dynimg-0.1.9/src/lib.rs +579 -0
  38. dynimg-0.1.9/src/main.rs +150 -0
  39. dynimg-0.1.9/src/python.rs +291 -0
  40. dynimg-0.1.9/test_wheels/.gitignore +4 -0
  41. dynimg-0.1.9/test_wheels/README.md +52 -0
  42. dynimg-0.1.9/test_wheels/debug_parser.py +37 -0
  43. dynimg-0.1.9/test_wheels/debug_verbose.py +12 -0
  44. dynimg-0.1.9/test_wheels/test_dynimg.py +183 -0
  45. 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
@@ -0,0 +1,13 @@
1
+ /target
2
+ /output
3
+
4
+ # Python
5
+ .venv/
6
+ __pycache__/
7
+ *.pyc
8
+ *.pyo
9
+ *.egg-info/
10
+ dist/
11
+ *.whl
12
+ .pytest_cache/
13
+ *.so
@@ -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
@@ -0,0 +1,2 @@
1
+
2
+ @.pearls/CLAUDE.md