rmink 2.0.2__tar.gz → 2.0.4__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 (64) hide show
  1. rmink-2.0.4/.github/FUNDING.yml +1 -0
  2. {rmink-2.0.2 → rmink-2.0.4}/CHANGELOG.md +8 -0
  3. {rmink-2.0.2 → rmink-2.0.4}/PKG-INFO +6 -4
  4. {rmink-2.0.2 → rmink-2.0.4}/README.md +5 -3
  5. {rmink-2.0.2 → rmink-2.0.4}/deploy/vercel/requirements.txt +1 -1
  6. {rmink-2.0.2 → rmink-2.0.4}/docs/hosting.md +5 -0
  7. {rmink-2.0.2 → rmink-2.0.4}/pyproject.toml +1 -1
  8. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/support.py +1 -2
  9. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/web/static/index.html +16 -5
  10. rmink-2.0.2/.github/FUNDING.yml +0 -3
  11. {rmink-2.0.2 → rmink-2.0.4}/.dockerignore +0 -0
  12. {rmink-2.0.2 → rmink-2.0.4}/.github/workflows/ci.yml +0 -0
  13. {rmink-2.0.2 → rmink-2.0.4}/.github/workflows/release.yml +0 -0
  14. {rmink-2.0.2 → rmink-2.0.4}/.gitignore +0 -0
  15. {rmink-2.0.2 → rmink-2.0.4}/Dockerfile +0 -0
  16. {rmink-2.0.2 → rmink-2.0.4}/LICENSE +0 -0
  17. {rmink-2.0.2 → rmink-2.0.4}/deploy/vercel/.python-version +0 -0
  18. {rmink-2.0.2 → rmink-2.0.4}/deploy/vercel/app.py +0 -0
  19. {rmink-2.0.2 → rmink-2.0.4}/deploy/vercel/vercel.json +0 -0
  20. {rmink-2.0.2 → rmink-2.0.4}/docs/device-acceptance.md +0 -0
  21. {rmink-2.0.2 → rmink-2.0.4}/docs/releasing.md +0 -0
  22. {rmink-2.0.2 → rmink-2.0.4}/examples/document.pdf +0 -0
  23. {rmink-2.0.2 → rmink-2.0.4}/examples/handwriting.jpg +0 -0
  24. {rmink-2.0.2 → rmink-2.0.4}/examples/logo.svg +0 -0
  25. {rmink-2.0.2 → rmink-2.0.4}/examples/make_examples.py +0 -0
  26. {rmink-2.0.2 → rmink-2.0.4}/skills/rmink/SKILL.md +0 -0
  27. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/__init__.py +0 -0
  28. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/api.py +0 -0
  29. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/cli.py +0 -0
  30. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/color/__init__.py +0 -0
  31. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/color/palette.py +0 -0
  32. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/devices.py +0 -0
  33. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/extract/__init__.py +0 -0
  34. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/extract/centerline.py +0 -0
  35. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/extract/raster.py +0 -0
  36. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/extract/vector.py +0 -0
  37. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/geometry/__init__.py +0 -0
  38. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/geometry/hatch.py +0 -0
  39. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/geometry/order.py +0 -0
  40. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/geometry/simplify.py +0 -0
  41. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/geometry/transform.py +0 -0
  42. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/ingest/__init__.py +0 -0
  43. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/ingest/image.py +0 -0
  44. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/ingest/pdf.py +0 -0
  45. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/ingest/svg.py +0 -0
  46. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/mcp_server.py +0 -0
  47. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/model.py +0 -0
  48. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/options.py +0 -0
  49. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/package/__init__.py +0 -0
  50. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/package/rmdoc.py +0 -0
  51. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/render/__init__.py +0 -0
  52. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/render/preview.py +0 -0
  53. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/web/__init__.py +0 -0
  54. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/web/app.py +0 -0
  55. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/web/static/thanks.html +0 -0
  56. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/writer/__init__.py +0 -0
  57. {rmink-2.0.2 → rmink-2.0.4}/src/rmink/writer/rm_v6.py +0 -0
  58. {rmink-2.0.2 → rmink-2.0.4}/tests/conftest.py +0 -0
  59. {rmink-2.0.2 → rmink-2.0.4}/tests/test_centerline.py +0 -0
  60. {rmink-2.0.2 → rmink-2.0.4}/tests/test_fidelity.py +0 -0
  61. {rmink-2.0.2 → rmink-2.0.4}/tests/test_geometry.py +0 -0
  62. {rmink-2.0.2 → rmink-2.0.4}/tests/test_interfaces.py +0 -0
  63. {rmink-2.0.2 → rmink-2.0.4}/tests/test_web.py +0 -0
  64. {rmink-2.0.2 → rmink-2.0.4}/tests/test_writer.py +0 -0
@@ -0,0 +1 @@
1
+ custom: ["https://buy.stripe.com/7sY4gy4b1aQo0iI0SB1sQ00"]
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.4 — 2026-10-10
4
+
5
+ - Web UI on phones: the preview comes right after the file list instead of below all the options, with a smaller empty state and two previews per row.
6
+
7
+ ## 2.0.3 — 2026-10-10
8
+
9
+ - Support rmink with 100 kr: a Stripe link in the web UI (button, a dismissible note after downloads, footer), in `rmink web` and in the README. Set `RMINK_SUPPORT_URL=""` to hide it, for example in a fork.
10
+
3
11
  ## 2.0.2 — 2026-10-10
4
12
 
5
13
  - Fix: downloads from the web UI are served as `application/octet-stream` instead of `application/zip`. Safari on macOS unpacked the notebook into a folder, and once that folder was zipped again the tablet could not import it.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rmink
3
- Version: 2.0.2
3
+ Version: 2.0.4
4
4
  Summary: Convert images, photos, SVGs and PDFs into native, editable reMarkable ink (.rm v6 / .rmdoc)
5
5
  Project-URL: Homepage, https://github.com/thagvall/rmink
6
6
  Project-URL: Source, https://github.com/thagvall/rmink
@@ -179,9 +179,11 @@ writer as well as the tracing.
179
179
 
180
180
  ## Support
181
181
 
182
- rmink is free, and that is not going to change. If it saves you time,
183
- starring the repo and reporting how it works on your tablet in an
184
- [issue](https://github.com/thagvall/rmink/issues) helps a lot.
182
+ rmink is free, and that is not going to change. If it saves you time and you
183
+ want to say thanks, you can [support it with 100 kr](https://buy.stripe.com/7sY4gy4b1aQo0iI0SB1sQ00) via Stripe.
184
+ The money pays for the hosted web service and further development. Starring
185
+ the repo and reporting how it works on your tablet in an
186
+ [issue](https://github.com/thagvall/rmink/issues) helps a lot too.
185
187
 
186
188
  ## License
187
189
 
@@ -137,9 +137,11 @@ writer as well as the tracing.
137
137
 
138
138
  ## Support
139
139
 
140
- rmink is free, and that is not going to change. If it saves you time,
141
- starring the repo and reporting how it works on your tablet in an
142
- [issue](https://github.com/thagvall/rmink/issues) helps a lot.
140
+ rmink is free, and that is not going to change. If it saves you time and you
141
+ want to say thanks, you can [support it with 100 kr](https://buy.stripe.com/7sY4gy4b1aQo0iI0SB1sQ00) via Stripe.
142
+ The money pays for the hosted web service and further development. Starring
143
+ the repo and reporting how it works on your tablet in an
144
+ [issue](https://github.com/thagvall/rmink/issues) helps a lot too.
143
145
 
144
146
  ## License
145
147
 
@@ -1,4 +1,4 @@
1
1
  # The hosted site runs a released rmink version from PyPI.
2
2
  # Bump this after each release to update the site.
3
- rmink[web]==2.0.1
3
+ rmink[web]==2.0.3
4
4
  fastapi
@@ -20,6 +20,11 @@ on Hobby; selling is not.
20
20
 
21
21
  **Updating the site:** release a new version to PyPI, bump the version in
22
22
  `deploy/vercel/requirements.txt` and push. Vercel redeploys automatically.
23
+ The project sets `VERCEL_FORCE_NO_BUILD_CACHE=1`. Without it, Vercel restores
24
+ uv's cached copy of the PyPI index from the previous build, and a newly
25
+ released version is reported as missing ("no version of rmink[web]==X"). If
26
+ a build ever fails that way, check that the variable is still set and
27
+ redeploy.
23
28
 
24
29
  **Limits on the hosted version:**
25
30
  - Vercel caps each request and response at 4.5 MB. The browser shrinks
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "rmink"
7
- version = "2.0.2"
7
+ version = "2.0.4"
8
8
  description = "Convert images, photos, SVGs and PDFs into native, editable reMarkable ink (.rm v6 / .rmdoc)"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -9,8 +9,7 @@ from __future__ import annotations
9
9
 
10
10
  import os
11
11
 
12
- # Filled in once the Stripe Payment Link and public repository exist.
13
- DEFAULT_SUPPORT_URL = ""
12
+ DEFAULT_SUPPORT_URL = "https://buy.stripe.com/7sY4gy4b1aQo0iI0SB1sQ00"
14
13
  DEFAULT_SOURCE_URL = "https://github.com/thagvall/rmink"
15
14
 
16
15
 
@@ -73,7 +73,6 @@ main {
73
73
  display: grid; gap: 20px; grid-template-columns: 380px 1fr;
74
74
  max-width: 1280px; margin: 0 auto; padding: 12px 20px 40px;
75
75
  }
76
- @media (max-width: 880px) { main { grid-template-columns: 1fr; } }
77
76
  .panel {
78
77
  background: var(--surface); border: 1px solid var(--line);
79
78
  border-radius: var(--radius); box-shadow: var(--shadow); padding: 16px;
@@ -177,6 +176,18 @@ dialog img { display: block; max-width: 96vw; max-height: 92vh; background: #fff
177
176
  .help .repair p { margin: 6px 0 8px; }
178
177
  .help code { background: var(--paper); padding: 1px 5px; border-radius: 4px; border: 1px solid var(--line); }
179
178
  .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
179
+ @media (max-width: 880px) {
180
+ main { grid-template-columns: 1fr; gap: 16px; }
181
+ /* Phones: show the preview right after the file list, before the options. */
182
+ aside { display: contents; }
183
+ .p-files { order: 1; }
184
+ #preview { order: 2; }
185
+ .p-options { order: 3; }
186
+ .p-download { order: 4; }
187
+ .empty { min-height: 0; padding: 16px; }
188
+ .empty svg { width: 64px; }
189
+ #gallery { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px; }
190
+ }
180
191
  </style>
181
192
  </head>
182
193
  <body>
@@ -190,7 +201,7 @@ dialog img { display: block; max-width: 96vw; max-height: 92vh; background: #fff
190
201
 
191
202
  <main>
192
203
  <aside>
193
- <section class="panel">
204
+ <section class="panel p-files">
194
205
  <div id="drop" tabindex="0" role="button" aria-describedby="drop-hint">
195
206
  <strong>Drop files here</strong>
196
207
  <span id="drop-hint">or click to choose — JPG, PNG, HEIC, SVG, PDF</span>
@@ -199,7 +210,7 @@ dialog img { display: block; max-width: 96vw; max-height: 92vh; background: #fff
199
210
  <ul id="files" aria-label="Selected files"></ul>
200
211
  </section>
201
212
 
202
- <section class="panel">
213
+ <section class="panel p-options">
203
214
  <fieldset>
204
215
  <legend>Device</legend>
205
216
  <div class="seg" id="devices" role="group" aria-label="Device"></div>
@@ -270,7 +281,7 @@ dialog img { display: block; max-width: 96vw; max-height: 92vh; background: #fff
270
281
  </fieldset>
271
282
  </section>
272
283
 
273
- <section class="panel">
284
+ <section class="panel p-download">
274
285
  <fieldset>
275
286
  <label class="field"><span>Notebook name</span>
276
287
  <input type="text" name="name" placeholder="From the first file">
@@ -295,7 +306,7 @@ dialog img { display: block; max-width: 96vw; max-height: 92vh; background: #fff
295
306
  </section>
296
307
  </aside>
297
308
 
298
- <section aria-live="polite">
309
+ <section id="preview" aria-live="polite">
299
310
  <div id="status"><span class="spinner"></span><span id="status-text">Add files to see a preview.</span></div>
300
311
  <div id="notices"></div>
301
312
  <p id="nudge" hidden>
@@ -1,3 +0,0 @@
1
- # Shows a "Sponsor" button on GitHub. Replace with the Stripe Payment Link,
2
- # e.g. custom: ["https://buy.stripe.com/xxxxxxxx"], then uncomment.
3
- # custom: []
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes