Skip to content

Commit 07df21c

Browse files
authored
frontend: Add capture button to node-red preview (#955)
1 parent 08d7629 commit 07df21c

5 files changed

Lines changed: 48 additions & 41 deletions

File tree

frontend/src/pages/bookmarks.jsx

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,6 @@ export default function Bookmarks() {
7878
Node-RED flow editor
7979
</a>
8080
</li>
81-
<li>
82-
<a
83-
href={makeUrl("/ps/processing/segmenter/streams/object.mjpg")}
84-
target="_blank"
85-
>
86-
Last segmented object
87-
</a>
88-
</li>
8981
<li>
9082
<a href={makeLocalUrl("/factory")} target="_blank">
9183
Factory

frontend/src/pages/preview/Stream.jsx

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import styles from "./Stream.module.css"
77
import "./reader.js"
88

99
import fullscreenIcon from "./fullscreen.svg"
10+
import cameraIcon from "./camera.svg"
11+
12+
import { makeUrl } from "../../helpers.js"
1013

1114
export default function Stream(props) {
1215
let zoomist_container
@@ -84,15 +87,33 @@ export default function Stream(props) {
8487
<div class="zoomist-image">{video}</div>
8588
</div>
8689
<button
87-
tooltip="Take capture"
90+
tooltip="Fullscreen"
8891
class={styles.button_fullscreen}
8992
onClick={fullscreen}
9093
>
9194
{fullscreenIcon}
9295
</button>
93-
{props.controls}
96+
<button
97+
tooltip="Take capture"
98+
class={styles.button_capture}
99+
onClick={takeImage}
100+
>
101+
{cameraIcon}
102+
</button>
94103
</div>
95104
</div>
96105
</>
97106
)
98107
}
108+
109+
async function takeImage() {
110+
try {
111+
const res = await fetch(makeUrl("/api/capture"), {
112+
method: "POST",
113+
})
114+
const body = await res.json()
115+
triggerDownload(body.url_jpeg)
116+
} catch (err) {
117+
console.error(err)
118+
}
119+
}

frontend/src/pages/preview/Stream.module.css

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,23 @@
8989
.button_capture svg {
9090
fill: var(--zoomist-zoomer-icon-color);
9191
}
92+
93+
.button_capture {
94+
position: absolute;
95+
bottom: 0;
96+
z-index: 9;
97+
right: 0;
98+
width: var(--zoomist-zoomer-button-size);
99+
height: var(--zoomist-zoomer-button-size);
100+
border: none;
101+
background-color: var(--zoomist-zoomer-button-color);
102+
cursor: pointer;
103+
}
104+
105+
.button_capture:hover {
106+
background-color: var(--zoomist-zoomer-button-color-hover);
107+
}
108+
109+
.button_capture svg {
110+
fill: var(--zoomist-zoomer-icon-color);
111+
}

frontend/src/pages/preview/index.jsx

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@ import {
88
watch,
99
stopBubbler,
1010
} from "../../../../lib/scope.js"
11-
import { triggerDownload } from "../../helpers.js"
12-
13-
import cameraIcon from "./camera.svg"
11+
import { triggerDownload, makeUrl } from "../../helpers.js"
1412

1513
import NumberInput from "./NumberInput.jsx"
1614
import { createSignal } from "solid-js"
@@ -56,36 +54,12 @@ export default function Preview() {
5654
</div>
5755
</div>
5856
<div class={styles.preview}>
59-
<Stream
60-
controls={
61-
<button
62-
tooltip="Take capture"
63-
class={styles.button_capture}
64-
onClick={takeImage}
65-
>
66-
{cameraIcon}
67-
</button>
68-
}
69-
/>
57+
<Stream />
7058
</div>
7159
</>
7260
)
7361
}
7462

75-
async function takeImage() {
76-
const url = new URL("/api/capture", document.URL)
77-
url.port = 80
78-
try {
79-
const res = await fetch(url, {
80-
method: "POST",
81-
})
82-
const body = await res.json()
83-
triggerDownload(body.url_jpeg)
84-
} catch (err) {
85-
console.error(err)
86-
}
87-
}
88-
8963
function onLightChange(value) {
9064
startLight({
9165
value,

os/mediamtx/justfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
setup:
22
sudo ./setup_h264_sysctl.sh
3-
wget https://github.com/bluenviron/mediamtx/releases/download/v1.16.2/mediamtx_v1.16.2_linux_arm64.tar.gz -P /tmp
4-
wget https://raw.githubusercontent.com/bluenviron/mediamtx/refs/tags/v1.16.2/internal/servers/webrtc/reader.js -O /opt/PlanktoScope/frontend/src/pages/preview/reader.js
5-
cd /tmp && tar -xf /tmp/mediamtx_v1.16.2_linux_arm64.tar.gz
3+
wget https://github.com/bluenviron/mediamtx/releases/download/v1.18.1/mediamtx_v1.18.1_linux_arm64.tar.gz -P /tmp
4+
wget https://raw.githubusercontent.com/bluenviron/mediamtx/refs/tags/v1.18.1/internal/servers/webrtc/reader.js -O /opt/PlanktoScope/frontend/src/pages/preview/reader.js
5+
cd /tmp && tar -xf /tmp/mediamtx_v1.18.1_linux_arm64.tar.gz
66
-sudo systemctl stop mediamtx
77
sudo cp /tmp/mediamtx /usr/local/bin/mediamtx
88
sudo cp mediamtx.service /etc/systemd/system/

0 commit comments

Comments
 (0)