scenri 0.15.1 → 0.17.0
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.
- package/CHANGELOG.md +27 -0
- package/README.md +3 -3
- package/dist/{chunk-LMXHCXUC.js → chunk-HI7CG4TK.js} +7 -4
- package/dist/{cli-NXOTZTBT.js → cli-Y5X5XXFA.js} +3 -3
- package/dist/index.js +2 -2
- package/dist/serve.js +925 -100
- package/dist/{src-XRZP3ZB5.js → src-VQCTLFGX.js} +3 -3
- package/package.json +1 -1
- package/studio-dist/assets/{index-CJQMppMU.css → index-BTaMj1F0.css} +1 -1
- package/studio-dist/assets/index-te6uQiVY.js +106 -0
- package/studio-dist/index.html +2 -2
- package/studio-dist/assets/index-D1DGL2hD.js +0 -104
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.17.0](https://github.com/tonygorb/Scenri/compare/v0.16.0...v0.17.0) (2026-09-24)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **studio:** one filter row for every wall and catalog picking ([cfcbd81](https://github.com/tonygorb/Scenri/commit/cfcbd8143f1d20b98d2d796e29127aa545ba7871))
|
|
9
|
+
|
|
10
|
+
## [0.16.0](https://github.com/tonygorb/Scenri/compare/v0.15.1...v0.16.0) (2026-09-23)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* a real code screen for phones, and a six-digit code ([01f2fed](https://github.com/tonygorb/Scenri/commit/01f2fedc14f7cfb4cba205d1ae1ea51e8c213f78))
|
|
16
|
+
* allow Scenri through the firewall with one press ([8ca9b5f](https://github.com/tonygorb/Scenri/commit/8ca9b5f64ce49894c00490439f7d00b26a903e0f))
|
|
17
|
+
* **cli:** open Scenri on a phone on the same Wi-Fi ([5d25779](https://github.com/tonygorb/Scenri/commit/5d25779d60b14751f85df8d88cf1ea993c6b79bd))
|
|
18
|
+
* open Scenri on your phone, and Settings one idea per page ([4a6601d](https://github.com/tonygorb/Scenri/commit/4a6601d0608d97137e34f2973d6c1eb2b6e5e409))
|
|
19
|
+
* **studio:** open on your phone, in Settings, General ([9701956](https://github.com/tonygorb/Scenri/commit/9701956625023141d2d9b7257ddd978b018f0f8e))
|
|
20
|
+
* **studio:** Phone and tablet gets its own page in Settings ([6f0ff64](https://github.com/tonygorb/Scenri/commit/6f0ff64353109e6dc9adf76b6638564cc3e5f459))
|
|
21
|
+
* **studio:** Settings, one idea per page ([34e6937](https://github.com/tonygorb/Scenri/commit/34e69374ef3f7db82cf4466299de471f3bf84c77))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Bug Fixes
|
|
25
|
+
|
|
26
|
+
* **cli:** the code page's privacy note is one centred line ([0f33bbe](https://github.com/tonygorb/Scenri/commit/0f33bbe79d31be5cc8e3978ade9de3eb5bbd3eb7))
|
|
27
|
+
* harden the phone code, and settle the review's findings ([ee6dd1d](https://github.com/tonygorb/Scenri/commit/ee6dd1d3226f890abc1d776de092d9d22952893d))
|
|
28
|
+
* plain English on the code page and the phone settings ([f7355d5](https://github.com/tonygorb/Scenri/commit/f7355d5f37b1e239d64d9ccc6cc71b0eb43a68a3))
|
|
29
|
+
|
|
3
30
|
## [0.15.1](https://github.com/tonygorb/Scenri/compare/v0.15.0...v0.15.1) (2026-09-23)
|
|
4
31
|
|
|
5
32
|
|
package/README.md
CHANGED
|
@@ -35,7 +35,7 @@ Most AI image tools give you a prompt box and a slot machine. Scenri gives you t
|
|
|
35
35
|
|
|
36
36
|
Every shot keeps its lineage. Branch an edit from any shot, put the two side by side, and the drift heatmap shows you exactly where the model changed your product when it should not have.
|
|
37
37
|
|
|
38
|
-
It runs as a local server on
|
|
38
|
+
It runs as a local server on your own computer. Your brands, your images, and your keys stay on your disk. To use it from a phone or tablet on the same Wi-Fi, open Settings, Local access, and scan the QR code.
|
|
39
39
|
|
|
40
40
|
## What a brief produces
|
|
41
41
|
|
|
@@ -126,7 +126,7 @@ Your Codex session is yours: Scenri runs the official `codex` commands on your m
|
|
|
126
126
|
|---|---|---|
|
|
127
127
|
| `SCENRI_HOME` | `~/.scenri` | where brands, images, and keys live |
|
|
128
128
|
| `SCENRI_PORT` | `4747` | port |
|
|
129
|
-
| `SCENRI_HOST` | `127.0.0.1` |
|
|
129
|
+
| `SCENRI_HOST` | `127.0.0.1` | the studio's own listener; `127.0.0.1` given explicitly also turns off phone access, see the note below |
|
|
130
130
|
| `SCENRI_NO_OPEN` | unset | set to `1` to skip opening a browser |
|
|
131
131
|
| `SCENRI_NO_UPDATE_CHECK` | unset | set to `1` to never ask npm for the latest version |
|
|
132
132
|
| `SCENRI_REGISTRY` | npmjs | registry for the update check and downloads (mirrors, forks, airgaps) |
|
|
@@ -135,7 +135,7 @@ Your Codex session is yours: Scenri runs the official `codex` commands on your m
|
|
|
135
135
|
|
|
136
136
|
`OPENROUTER_API_KEY`, `REPLICATE_API_TOKEN` and `FAL_KEY` are read from the environment as an alternative to entering them in Settings.
|
|
137
137
|
|
|
138
|
-
**
|
|
138
|
+
**Phones and tablets.** Scenri also answers on this computer's Wi-Fi or Ethernet address, so a phone on the same network can open it: Settings, Local access shows a QR code. Scenri has no accounts, so every device other than this computer has to bring a six-digit code, which rides inside the QR code and the link; typing the bare address asks for it, wrong guesses are slowed to a crawl, and **New code** signs every device out. The first time, macOS or Windows may ask whether Node may accept incoming connections: allow it, or phones cannot reach Scenri. Setting `SCENRI_HOST=127.0.0.1` keeps Scenri to this computer alone. Over plain http the code travels unencrypted, like everything else, so treat phone access as convenience on a network you trust.
|
|
139
139
|
|
|
140
140
|
## Layout
|
|
141
141
|
|
|
@@ -1010,9 +1010,12 @@ function createStore(db) {
|
|
|
1010
1010
|
db.prepare("UPDATE sets SET updated_at=datetime('now') WHERE id=?").run(setId);
|
|
1011
1011
|
})();
|
|
1012
1012
|
},
|
|
1013
|
-
removeFromSet(setId,
|
|
1013
|
+
removeFromSet(setId, nodeIds) {
|
|
1014
|
+
const ids = nodeIds.filter(Boolean);
|
|
1015
|
+
if (ids.length === 0) return;
|
|
1014
1016
|
db.transaction(() => {
|
|
1015
|
-
db.prepare("DELETE FROM set_nodes WHERE set_id=? AND node_id=?")
|
|
1017
|
+
const del = db.prepare("DELETE FROM set_nodes WHERE set_id=? AND node_id=?");
|
|
1018
|
+
for (const nodeId of ids) del.run(setId, nodeId);
|
|
1016
1019
|
db.prepare("UPDATE sets SET updated_at=datetime('now') WHERE id=?").run(setId);
|
|
1017
1020
|
})();
|
|
1018
1021
|
},
|
|
@@ -2254,5 +2257,5 @@ function createCore(homeDir = defaultHome()) {
|
|
|
2254
2257
|
}
|
|
2255
2258
|
|
|
2256
2259
|
export { ASPECT_TOLERANCE, BUDGET_EXHAUSTED, EDIT_REFERENCE_ROLE_DIRECTIVE, REFERENCE_ROLE_DIRECTIVE, SCHEMA_VERSION, STEM_MIN, SchemaTooNewError, SpendCapError, TRIGRAM_MIN, budgetSize, createCatalogStore, createCore, createStore, defaultHome, fold, ftsMatch, matchesQuery, nameMatches, ratioLabel, searchTerms, shortTermSql, termMatches, uniqueProjectSlug, uniqueSetSlug, uniqueSlug };
|
|
2257
|
-
//# sourceMappingURL=chunk-
|
|
2258
|
-
//# sourceMappingURL=chunk-
|
|
2260
|
+
//# sourceMappingURL=chunk-HI7CG4TK.js.map
|
|
2261
|
+
//# sourceMappingURL=chunk-HI7CG4TK.js.map
|
|
@@ -463,7 +463,7 @@ async function addOrRepair(ownEntry, say, over) {
|
|
|
463
463
|
}
|
|
464
464
|
async function rememberDecline(home) {
|
|
465
465
|
try {
|
|
466
|
-
const { createCore } = await import('./src-
|
|
466
|
+
const { createCore } = await import('./src-VQCTLFGX.js');
|
|
467
467
|
const core = createCore(home);
|
|
468
468
|
try {
|
|
469
469
|
core.store.setSetting("desktop.prompt", "declined");
|
|
@@ -530,5 +530,5 @@ function tail(path, bytes = 4096) {
|
|
|
530
530
|
}
|
|
531
531
|
|
|
532
532
|
export { addToDesktop, assetsDirFor, installDeps, runDesktopCommand, runExecFile, runOpenCommand };
|
|
533
|
-
//# sourceMappingURL=cli-
|
|
534
|
-
//# sourceMappingURL=cli-
|
|
533
|
+
//# sourceMappingURL=cli-Y5X5XXFA.js.map
|
|
534
|
+
//# sourceMappingURL=cli-Y5X5XXFA.js.map
|
package/dist/index.js
CHANGED
|
@@ -86,12 +86,12 @@ try {
|
|
|
86
86
|
break;
|
|
87
87
|
}
|
|
88
88
|
case "desktop": {
|
|
89
|
-
const { runDesktopCommand } = await import('./cli-
|
|
89
|
+
const { runDesktopCommand } = await import('./cli-Y5X5XXFA.js');
|
|
90
90
|
process.exit(await runDesktopCommand(command, fileURLToPath(import.meta.url)));
|
|
91
91
|
break;
|
|
92
92
|
}
|
|
93
93
|
case "open": {
|
|
94
|
-
const { runOpenCommand } = await import('./cli-
|
|
94
|
+
const { runOpenCommand } = await import('./cli-Y5X5XXFA.js');
|
|
95
95
|
process.exit(await runOpenCommand(fileURLToPath(import.meta.url)));
|
|
96
96
|
break;
|
|
97
97
|
}
|