decryptune 1.0.0__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.
@@ -0,0 +1,6 @@
1
+ # normalize line endings — repo stores LF, working copy stays LF on every OS
2
+ * text=auto eol=lf
3
+
4
+ # binaries
5
+ *.jpg binary
6
+ *.png binary
@@ -0,0 +1,215 @@
1
+ name: release
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths: ['Cargo.toml']
7
+ workflow_dispatch:
8
+ inputs:
9
+ dry_run:
10
+ description: "build everything, do not touch the release"
11
+ type: boolean
12
+ default: false
13
+
14
+ permissions:
15
+ contents: write
16
+
17
+ concurrency:
18
+ group: ${{ github.workflow }}-${{ github.ref }}
19
+ cancel-in-progress: true
20
+
21
+ jobs:
22
+ verify:
23
+ runs-on: ubuntu-latest
24
+ outputs:
25
+ release: ${{ steps.decide.outputs.release }}
26
+ version: ${{ steps.decide.outputs.version }}
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+ with:
30
+ fetch-depth: 0 # tags needed for the release check
31
+ - id: decide
32
+ name: release when Cargo.toml version has no tag yet
33
+ run: |
34
+ V=$(grep -m1 '^version' Cargo.toml | cut -d '"' -f2)
35
+ echo "version=$V" >> "$GITHUB_OUTPUT"
36
+ if [ "$GITHUB_EVENT_NAME" = "workflow_dispatch" ]; then
37
+ echo "release=true" >> "$GITHUB_OUTPUT"
38
+ echo "manual dispatch — force release v$V"
39
+ elif git rev-parse -q --verify "refs/tags/v$V" >/dev/null; then
40
+ echo "release=false" >> "$GITHUB_OUTPUT"
41
+ echo "tag v$V already exists — nothing to release"
42
+ else
43
+ echo "release=true" >> "$GITHUB_OUTPUT"
44
+ echo "new version v$V — full build + release"
45
+ fi
46
+
47
+ # standalone zips: the raw cdylib is extracted from the manylinux wheel
48
+ # (guarantees glibc 2.28 compat AND byte-identical binary with the wheel)
49
+ build-linux:
50
+ needs: verify
51
+ if: needs.verify.outputs.release == 'true'
52
+ strategy:
53
+ fail-fast: false
54
+ matrix:
55
+ include:
56
+ - runner: ubuntu-latest
57
+ platform: linux-x86_64
58
+ - runner: ubuntu-24.04-arm
59
+ platform: linux-aarch64
60
+ runs-on: ${{ matrix.runner }}
61
+ steps:
62
+ - uses: actions/checkout@v4
63
+ - uses: PyO3/maturin-action@v1
64
+ with:
65
+ command: build
66
+ args: --release --out wheelhouse
67
+ manylinux: "2_28"
68
+ - name: package binary + wrapper
69
+ run: |
70
+ python3 -m zipfile -e wheelhouse/decryptune-*.whl extracted/
71
+ mkdir -p dist
72
+ cp extracted/decryptune/decryptune.*.so dist/libdecryptune.so
73
+ cp decryptune.py dist/
74
+ cd dist
75
+ python3 -m zipfile -c "decryptune-${{ matrix.platform }}.zip" libdecryptune.so decryptune.py
76
+ - uses: actions/upload-artifact@v4
77
+ with:
78
+ retention-days: 3
79
+ name: bin-${{ matrix.platform }}
80
+ path: dist/*.zip
81
+
82
+ # Windows zips: raw cargo build (the MSVC link has no undefined-symbol issue)
83
+ build-native:
84
+ needs: verify
85
+ if: needs.verify.outputs.release == 'true'
86
+ strategy:
87
+ fail-fast: false
88
+ matrix:
89
+ include:
90
+ - runner: windows-latest
91
+ artifact: decryptune.dll
92
+ rename: decryptune.pyd
93
+ platform: windows-x86_64
94
+ - runner: windows-11-arm
95
+ artifact: decryptune.dll
96
+ rename: decryptune.pyd
97
+ platform: windows-aarch64
98
+ runs-on: ${{ matrix.runner }}
99
+ steps:
100
+ - uses: actions/checkout@v4
101
+ - uses: dtolnay/rust-toolchain@stable
102
+ - run: cargo build --release
103
+ - name: package binary + wrapper
104
+ shell: bash
105
+ run: |
106
+ mkdir -p dist
107
+ cp "target/release/${{ matrix.artifact }}" "dist/${{ matrix.rename || matrix.artifact }}"
108
+ cp decryptune.py dist/
109
+ cd dist
110
+ python -m zipfile -c "decryptune-${{ matrix.platform }}.zip" "${{ matrix.rename || matrix.artifact }}" "decryptune.py"
111
+ - uses: actions/upload-artifact@v4
112
+ with:
113
+ retention-days: 3
114
+ name: bin-${{ matrix.platform }}
115
+ path: dist/*.zip
116
+
117
+ # abi3 wheels: linux + windows (manylinux_2_28 for the widest glibc coverage)
118
+ wheels:
119
+ needs: verify
120
+ if: needs.verify.outputs.release == 'true'
121
+ strategy:
122
+ fail-fast: false
123
+ matrix:
124
+ include:
125
+ - runner: ubuntu-latest
126
+ manylinux: "2_28"
127
+ name: wheels-linux-x86_64
128
+ - runner: ubuntu-24.04-arm
129
+ manylinux: "2_28"
130
+ name: wheels-linux-aarch64
131
+ - runner: windows-latest
132
+ name: wheels-windows-x86_64
133
+ - runner: windows-11-arm
134
+ name: wheels-windows-aarch64
135
+ runs-on: ${{ matrix.runner }}
136
+ steps:
137
+ - uses: actions/checkout@v4
138
+ - uses: PyO3/maturin-action@v1
139
+ with:
140
+ command: build
141
+ args: --release --out dist
142
+ manylinux: ${{ matrix.manylinux }}
143
+ - uses: actions/upload-artifact@v4
144
+ with:
145
+ retention-days: 3
146
+ name: ${{ matrix.name }}
147
+ path: dist/*.whl
148
+
149
+ # source distribution for the release (synapse-style completeness)
150
+ sdist:
151
+ needs: verify
152
+ if: needs.verify.outputs.release == 'true'
153
+ runs-on: ubuntu-latest
154
+ steps:
155
+ - uses: actions/checkout@v4
156
+ - uses: PyO3/maturin-action@v1
157
+ with:
158
+ command: sdist
159
+ args: --out dist
160
+ - uses: actions/upload-artifact@v4
161
+ with:
162
+ retention-days: 3
163
+ name: sdist
164
+ path: dist/*.tar.gz
165
+
166
+ release:
167
+ needs: [verify, build-linux, build-native, wheels, sdist]
168
+ if: ${{ !failure() && !cancelled() && needs.verify.outputs.release == 'true' }}
169
+ runs-on: ubuntu-latest
170
+ steps:
171
+ - uses: actions/download-artifact@v4
172
+ with:
173
+ path: rel
174
+ merge-multiple: true
175
+ - name: create or update GitHub release
176
+ env:
177
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
178
+ VERSION: ${{ needs.verify.outputs.version }}
179
+ DRY_RUN: ${{ inputs.dry_run }}
180
+ run: |
181
+ if [ "$DRY_RUN" = "true" ]; then
182
+ echo "dry run — release v$VERSION NOT touched, would attach:"
183
+ ls -l rel
184
+ exit 0
185
+ fi
186
+ # no checkout in this job — pass the repo explicitly to gh
187
+ if gh release view "v$VERSION" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then
188
+ gh release upload "v$VERSION" --repo "$GITHUB_REPOSITORY" --clobber rel/*
189
+ else
190
+ gh release create "v$VERSION" --repo "$GITHUB_REPOSITORY" --title "decryptune v$VERSION" --notes "decryptune v$VERSION — wheels + standalone binaries" rel/*
191
+ fi
192
+
193
+ # PyPI: needs a Trusted Publisher configured on pypi.org
194
+ # (project decryptune, owner arsham6ix, workflow build.yml, environment pypi)
195
+ publish:
196
+ needs: [verify, release]
197
+ if: ${{ !failure() && !cancelled() && needs.verify.outputs.release == 'true' && inputs.dry_run != true }}
198
+ runs-on: ubuntu-latest
199
+ environment: pypi
200
+ permissions:
201
+ id-token: write # OIDC trusted publishing — no token stored
202
+ steps:
203
+ - uses: actions/download-artifact@v4
204
+ with:
205
+ path: all
206
+ pattern: wheels-*
207
+ merge-multiple: true
208
+ - uses: actions/download-artifact@v4
209
+ with:
210
+ path: all
211
+ pattern: sdist
212
+ merge-multiple: true
213
+ - uses: pypa/gh-action-pypi-publish@release/v1
214
+ with:
215
+ packages-dir: all
@@ -0,0 +1,31 @@
1
+ # build artifacts
2
+ target/
3
+ build/
4
+ dist/
5
+ *.so
6
+ *.dylib
7
+ *.pyd
8
+ *.dll
9
+ *.whl
10
+ *.zip
11
+ *.tmp
12
+
13
+ # outputs (tracks written by tests/examples)
14
+ *.m4a
15
+
16
+ # python
17
+ __pycache__/
18
+ *.pyc
19
+ *.egg-info/
20
+ .pytest_cache/
21
+ .mypy_cache/
22
+ .ruff_cache/
23
+ venv/
24
+ .venv/
25
+
26
+ # editor / os
27
+ .vscode/
28
+ .idea/
29
+ Thumbs.db
30
+ desktop.ini
31
+ .DS_Store
@@ -0,0 +1,329 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "aes"
7
+ version = "0.9.3"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "35f0f96ce78e38c3dc6d8948aa8163d06385be74000f3c7a95bf1eef35d3ea32"
10
+ dependencies = [
11
+ "cipher",
12
+ "cpubits",
13
+ "cpufeatures",
14
+ ]
15
+
16
+ [[package]]
17
+ name = "block-buffer"
18
+ version = "0.12.1"
19
+ source = "registry+https://github.com/rust-lang/crates.io-index"
20
+ checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa"
21
+ dependencies = [
22
+ "hybrid-array",
23
+ ]
24
+
25
+ [[package]]
26
+ name = "cipher"
27
+ version = "0.5.2"
28
+ source = "registry+https://github.com/rust-lang/crates.io-index"
29
+ checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c"
30
+ dependencies = [
31
+ "block-buffer",
32
+ "crypto-common",
33
+ "inout",
34
+ ]
35
+
36
+ [[package]]
37
+ name = "cpubits"
38
+ version = "0.1.1"
39
+ source = "registry+https://github.com/rust-lang/crates.io-index"
40
+ checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae"
41
+
42
+ [[package]]
43
+ name = "cpufeatures"
44
+ version = "0.3.1"
45
+ source = "registry+https://github.com/rust-lang/crates.io-index"
46
+ checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566"
47
+ dependencies = [
48
+ "libc",
49
+ ]
50
+
51
+ [[package]]
52
+ name = "crypto-common"
53
+ version = "0.2.2"
54
+ source = "registry+https://github.com/rust-lang/crates.io-index"
55
+ checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453"
56
+ dependencies = [
57
+ "hybrid-array",
58
+ ]
59
+
60
+ [[package]]
61
+ name = "ctr"
62
+ version = "0.10.1"
63
+ source = "registry+https://github.com/rust-lang/crates.io-index"
64
+ checksum = "baaca1c4b237092596f64d571e9db6ce4109c4ef9742e27590f1709594461f21"
65
+ dependencies = [
66
+ "cipher",
67
+ ]
68
+
69
+ [[package]]
70
+ name = "decryptune"
71
+ version = "1.0.0"
72
+ dependencies = [
73
+ "aes",
74
+ "ctr",
75
+ "jpeg-decoder",
76
+ "jpeg-encoder",
77
+ "pyo3",
78
+ "pyo3-async-runtimes",
79
+ "tokio",
80
+ ]
81
+
82
+ [[package]]
83
+ name = "futures-channel"
84
+ version = "0.3.34"
85
+ source = "registry+https://github.com/rust-lang/crates.io-index"
86
+ checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4"
87
+ dependencies = [
88
+ "futures-core",
89
+ ]
90
+
91
+ [[package]]
92
+ name = "futures-core"
93
+ version = "0.3.34"
94
+ source = "registry+https://github.com/rust-lang/crates.io-index"
95
+ checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e"
96
+
97
+ [[package]]
98
+ name = "futures-macro"
99
+ version = "0.3.34"
100
+ source = "registry+https://github.com/rust-lang/crates.io-index"
101
+ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44"
102
+ dependencies = [
103
+ "proc-macro2",
104
+ "quote",
105
+ "syn 3.0.6",
106
+ ]
107
+
108
+ [[package]]
109
+ name = "futures-task"
110
+ version = "0.3.34"
111
+ source = "registry+https://github.com/rust-lang/crates.io-index"
112
+ checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd"
113
+
114
+ [[package]]
115
+ name = "futures-util"
116
+ version = "0.3.34"
117
+ source = "registry+https://github.com/rust-lang/crates.io-index"
118
+ checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc"
119
+ dependencies = [
120
+ "futures-core",
121
+ "futures-macro",
122
+ "futures-task",
123
+ "pin-project-lite",
124
+ "slab",
125
+ ]
126
+
127
+ [[package]]
128
+ name = "heck"
129
+ version = "0.5.0"
130
+ source = "registry+https://github.com/rust-lang/crates.io-index"
131
+ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
132
+
133
+ [[package]]
134
+ name = "hybrid-array"
135
+ version = "0.4.15"
136
+ source = "registry+https://github.com/rust-lang/crates.io-index"
137
+ checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17"
138
+ dependencies = [
139
+ "typenum",
140
+ ]
141
+
142
+ [[package]]
143
+ name = "inout"
144
+ version = "0.2.2"
145
+ source = "registry+https://github.com/rust-lang/crates.io-index"
146
+ checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7"
147
+ dependencies = [
148
+ "hybrid-array",
149
+ ]
150
+
151
+ [[package]]
152
+ name = "jpeg-decoder"
153
+ version = "0.3.2"
154
+ source = "registry+https://github.com/rust-lang/crates.io-index"
155
+ checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07"
156
+
157
+ [[package]]
158
+ name = "jpeg-encoder"
159
+ version = "0.7.1"
160
+ source = "registry+https://github.com/rust-lang/crates.io-index"
161
+ checksum = "a0370574b86f7eca156b9f298392b5e69a23f8c86f3f865add60bbc2e79467a6"
162
+
163
+ [[package]]
164
+ name = "libc"
165
+ version = "0.2.189"
166
+ source = "registry+https://github.com/rust-lang/crates.io-index"
167
+ checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
168
+
169
+ [[package]]
170
+ name = "once_cell"
171
+ version = "1.21.4"
172
+ source = "registry+https://github.com/rust-lang/crates.io-index"
173
+ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
174
+
175
+ [[package]]
176
+ name = "pin-project-lite"
177
+ version = "0.2.17"
178
+ source = "registry+https://github.com/rust-lang/crates.io-index"
179
+ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
180
+
181
+ [[package]]
182
+ name = "portable-atomic"
183
+ version = "1.15.0"
184
+ source = "registry+https://github.com/rust-lang/crates.io-index"
185
+ checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85"
186
+
187
+ [[package]]
188
+ name = "proc-macro2"
189
+ version = "1.0.107"
190
+ source = "registry+https://github.com/rust-lang/crates.io-index"
191
+ checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
192
+ dependencies = [
193
+ "unicode-ident",
194
+ ]
195
+
196
+ [[package]]
197
+ name = "pyo3"
198
+ version = "0.29.2"
199
+ source = "registry+https://github.com/rust-lang/crates.io-index"
200
+ checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b"
201
+ dependencies = [
202
+ "libc",
203
+ "once_cell",
204
+ "portable-atomic",
205
+ "pyo3-build-config",
206
+ "pyo3-ffi",
207
+ "pyo3-macros",
208
+ ]
209
+
210
+ [[package]]
211
+ name = "pyo3-async-runtimes"
212
+ version = "0.29.0"
213
+ source = "registry+https://github.com/rust-lang/crates.io-index"
214
+ checksum = "b3ef68daa7316a3fac65e5e18b2203f010346de1c1c53456811a2624673ab046"
215
+ dependencies = [
216
+ "futures-channel",
217
+ "futures-util",
218
+ "once_cell",
219
+ "pin-project-lite",
220
+ "pyo3",
221
+ "tokio",
222
+ ]
223
+
224
+ [[package]]
225
+ name = "pyo3-build-config"
226
+ version = "0.29.2"
227
+ source = "registry+https://github.com/rust-lang/crates.io-index"
228
+ checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9"
229
+ dependencies = [
230
+ "target-lexicon",
231
+ ]
232
+
233
+ [[package]]
234
+ name = "pyo3-ffi"
235
+ version = "0.29.2"
236
+ source = "registry+https://github.com/rust-lang/crates.io-index"
237
+ checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327"
238
+ dependencies = [
239
+ "libc",
240
+ "pyo3-build-config",
241
+ ]
242
+
243
+ [[package]]
244
+ name = "pyo3-macros"
245
+ version = "0.29.2"
246
+ source = "registry+https://github.com/rust-lang/crates.io-index"
247
+ checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c"
248
+ dependencies = [
249
+ "proc-macro2",
250
+ "pyo3-macros-backend",
251
+ "quote",
252
+ "syn 2.0.119",
253
+ ]
254
+
255
+ [[package]]
256
+ name = "pyo3-macros-backend"
257
+ version = "0.29.2"
258
+ source = "registry+https://github.com/rust-lang/crates.io-index"
259
+ checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952"
260
+ dependencies = [
261
+ "heck",
262
+ "proc-macro2",
263
+ "quote",
264
+ "syn 2.0.119",
265
+ ]
266
+
267
+ [[package]]
268
+ name = "quote"
269
+ version = "1.0.47"
270
+ source = "registry+https://github.com/rust-lang/crates.io-index"
271
+ checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
272
+ dependencies = [
273
+ "proc-macro2",
274
+ ]
275
+
276
+ [[package]]
277
+ name = "slab"
278
+ version = "0.4.12"
279
+ source = "registry+https://github.com/rust-lang/crates.io-index"
280
+ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
281
+
282
+ [[package]]
283
+ name = "syn"
284
+ version = "2.0.119"
285
+ source = "registry+https://github.com/rust-lang/crates.io-index"
286
+ checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
287
+ dependencies = [
288
+ "proc-macro2",
289
+ "quote",
290
+ "unicode-ident",
291
+ ]
292
+
293
+ [[package]]
294
+ name = "syn"
295
+ version = "3.0.6"
296
+ source = "registry+https://github.com/rust-lang/crates.io-index"
297
+ checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee"
298
+ dependencies = [
299
+ "proc-macro2",
300
+ "quote",
301
+ "unicode-ident",
302
+ ]
303
+
304
+ [[package]]
305
+ name = "target-lexicon"
306
+ version = "0.13.5"
307
+ source = "registry+https://github.com/rust-lang/crates.io-index"
308
+ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
309
+
310
+ [[package]]
311
+ name = "tokio"
312
+ version = "1.53.1"
313
+ source = "registry+https://github.com/rust-lang/crates.io-index"
314
+ checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed"
315
+ dependencies = [
316
+ "pin-project-lite",
317
+ ]
318
+
319
+ [[package]]
320
+ name = "typenum"
321
+ version = "1.20.1"
322
+ source = "registry+https://github.com/rust-lang/crates.io-index"
323
+ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
324
+
325
+ [[package]]
326
+ name = "unicode-ident"
327
+ version = "1.0.26"
328
+ source = "registry+https://github.com/rust-lang/crates.io-index"
329
+ checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954"
@@ -0,0 +1,29 @@
1
+ [package]
2
+ name = "decryptune"
3
+ version = "1.0.0"
4
+ edition = "2021"
5
+ rust-version = "1.85"
6
+ description = "Fast native M4A/fMP4 CENC decryptor, MP4 sanitizer and iTunes tagger, sync & async Python"
7
+ license = "MIT"
8
+ repository = "https://github.com/arsham6ix/decryptune"
9
+ authors = ["Arsham <su@arsham.app>"]
10
+ readme = "README.md"
11
+
12
+ [lib]
13
+ name = "decryptune"
14
+ crate-type = ["cdylib"]
15
+
16
+ [dependencies]
17
+ aes = "0.9" # AES-NI accelerated, RustCrypto
18
+ ctr = "0.10" # CTR mode, pairs with aes
19
+ pyo3 = { version = "0.29", features = ["extension-module", "abi3-py312"] }
20
+ pyo3-async-runtimes = { version = "0.29", features = ["tokio-runtime"] }
21
+ tokio = { version = "1.53", features = ["rt-multi-thread", "fs"] }
22
+ jpeg-decoder = { version = "0.3", default-features = false }
23
+ jpeg-encoder = { version = "0.7", default-features = false, features = ["std"] }
24
+
25
+ [profile.release]
26
+ opt-level = 3
27
+ lto = true
28
+ codegen-units = 1
29
+ strip = true
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Arsham <su@arsham.app>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.