@ioai/lerobot-studio 1.0.0 → 1.0.1
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 +6 -0
- package/README.md +3 -2
- package/README.zh-CN.md +3 -2
- package/dist-lib/{DockviewLayout-Bf0kd_q_.js → DockviewLayout-0MP_kiQC.js} +31 -56
- package/dist-lib/lerobot-studio.css +58 -39
- package/dist-lib/lerobot.es.js +2 -2
- package/dist-lib/{react-window-tHOzYrJa.js → react-window-CGTfzj0C.js} +7 -17
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.0.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Improve dataset quality report filtering and update published package documentation.
|
|
8
|
+
|
|
3
9
|
> **Language / 语言:** [English](./CHANGELOG.md) | [简体中文](./CHANGELOG.zh-CN.md)
|
|
4
10
|
|
|
5
11
|
All notable changes to this project will be documented in this file.
|
package/README.md
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
[简体中文 — README.zh-CN.md](README.zh-CN.md)
|
|
4
4
|
|
|
5
5
|
[](https://github.com/ioai-tech/lerobot-studio/actions/workflows/ci.yml)
|
|
6
|
+
[](https://www.npmjs.com/package/@ioai/lerobot-studio)
|
|
6
7
|
[](LICENSE)
|
|
7
8
|
[](https://ioai-tech.github.io/lerobot-studio/)
|
|
8
9
|
|
|
9
10
|
> Open [LeRobot](https://github.com/huggingface/lerobot) datasets in your browser. View video, charts, and raw data together, or add the same viewer to a React application.
|
|
10
11
|
|
|
11
|
-
Use it as a standalone site at [lerobot.studio](https://lerobot.studio)
|
|
12
|
+
Use it as a standalone site at [lerobot.studio](https://lerobot.studio), or install the [`@ioai/lerobot-studio`](https://www.npmjs.com/package/@ioai/lerobot-studio) React package from npm. Local folders and archives are processed in your browser and are not uploaded to a cloud service. If you open a remote URL, the browser requests data from that URL's server.
|
|
12
13
|
|
|
13
14
|
<p align="center">
|
|
14
15
|
<img src=".github/assets/lerobot-studio-demo.webp" alt="LeRobot Studio demo — synchronized video, charts, and episode navigation" width="800" />
|
|
@@ -77,7 +78,7 @@ docker run --rm -p 8080:8080 lerobot-studio
|
|
|
77
78
|
|
|
78
79
|
## Embedding in React
|
|
79
80
|
|
|
80
|
-
The React package
|
|
81
|
+
The React package is published on npm as [`@ioai/lerobot-studio`](https://www.npmjs.com/package/@ioai/lerobot-studio). Install it with:
|
|
81
82
|
|
|
82
83
|
```bash
|
|
83
84
|
npm install @ioai/lerobot-studio
|
package/README.zh-CN.md
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
[English — README.md](README.md)
|
|
4
4
|
|
|
5
5
|
[](https://github.com/ioai-tech/lerobot-studio/actions/workflows/ci.yml)
|
|
6
|
+
[](https://www.npmjs.com/package/@ioai/lerobot-studio)
|
|
6
7
|
[](LICENSE)
|
|
7
8
|
[](https://ioai-tech.github.io/lerobot-studio/)
|
|
8
9
|
|
|
9
10
|
> 在浏览器中打开 [LeRobot](https://github.com/huggingface/lerobot) 数据集,同时查看视频、图表和原始数据;也可以将同一套查看器加入 React 应用。
|
|
10
11
|
|
|
11
|
-
你可以直接使用 [lerobot.studio](https://lerobot.studio)
|
|
12
|
+
你可以直接使用 [lerobot.studio](https://lerobot.studio),也可以通过 npm 安装 [`@ioai/lerobot-studio`](https://www.npmjs.com/package/@ioai/lerobot-studio) 并嵌入 React 应用。本地文件夹和压缩包会在浏览器中处理,不会上传到云端。只有打开远程链接时,浏览器才会向该链接所在的服务器请求数据。
|
|
12
13
|
|
|
13
14
|
<p align="center">
|
|
14
15
|
<img src=".github/assets/lerobot-studio-demo.webp" alt="LeRobot Studio 演示 — 同步视频、图表与 Episode 浏览" width="800" />
|
|
@@ -77,7 +78,7 @@ docker run --rm -p 8080:8080 lerobot-studio
|
|
|
77
78
|
|
|
78
79
|
## 嵌入 React
|
|
79
80
|
|
|
80
|
-
React
|
|
81
|
+
React 包已以 [`@ioai/lerobot-studio`](https://www.npmjs.com/package/@ioai/lerobot-studio) 发布到 npm,安装方式:
|
|
81
82
|
|
|
82
83
|
```bash
|
|
83
84
|
npm install @ioai/lerobot-studio
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as e, A as t, B as n, C as r, D as i, E as a, G as o, H as s, I as c, J as l, L as u, M as d, N as f, O as p, P as m, Q as h, R as g, S as _, T as v, V as y, W as b, X as x, Y as S, Z as C, _ as w, at as T, b as E, c as D, ct as O, d as k, dt as A, et as j, f as M, g as N, h as ee, ht as te, it as ne, j as re, k as ie, l as P, mt as F, nt as I, ot as L, pt as R, q as ae, rt as oe, s as se, st as ce, t as le, tt as ue, u as de, ut as fe, w as pe, x as me, y as he, z as ge } from "./react-window-
|
|
1
|
+
import { $ as e, A as t, B as n, C as r, D as i, E as a, G as o, H as s, I as c, J as l, L as u, M as d, N as f, O as p, P as m, Q as h, R as g, S as _, T as v, V as y, W as b, X as x, Y as S, Z as C, _ as w, at as T, b as E, c as D, ct as O, d as k, dt as A, et as j, f as M, g as N, h as ee, ht as te, it as ne, j as re, k as ie, l as P, mt as F, nt as I, ot as L, pt as R, q as ae, rt as oe, s as se, st as ce, t as le, tt as ue, u as de, ut as fe, w as pe, x as me, y as he, z as ge } from "./react-window-CGTfzj0C.js";
|
|
2
2
|
import { n as _e } from "./MediaCache-DZ7bEoOY.js";
|
|
3
3
|
import * as z from "react";
|
|
4
4
|
import B, { Component as ve, createContext as V, memo as H, startTransition as ye, useCallback as U, useDeferredValue as be, useEffect as xe, useMemo as W, useRef as G, useState as Se, useSyncExternalStore as Ce } from "react";
|
|
@@ -12281,67 +12281,54 @@ function Gl(e) {
|
|
|
12281
12281
|
function Kl(e) {
|
|
12282
12282
|
return e.timeline ? `${e.timeline.startSec.toFixed(2)}s - ${e.timeline.endSec.toFixed(2)}s` : null;
|
|
12283
12283
|
}
|
|
12284
|
-
var ql = ({
|
|
12285
|
-
let { t:
|
|
12286
|
-
if (!
|
|
12287
|
-
let
|
|
12288
|
-
{
|
|
12289
|
-
label: i(`${n}.feature`),
|
|
12290
|
-
value: e,
|
|
12291
|
-
breakAll: !0
|
|
12292
|
-
},
|
|
12293
|
-
{
|
|
12294
|
-
label: i(`${n}.dtype`),
|
|
12295
|
-
value: t.dtype
|
|
12296
|
-
},
|
|
12284
|
+
var ql = ({ metadata: e, translationPrefix: t, className: n }) => {
|
|
12285
|
+
let { t: r } = te();
|
|
12286
|
+
if (!e) return null;
|
|
12287
|
+
let i = [
|
|
12297
12288
|
{
|
|
12298
|
-
label:
|
|
12299
|
-
value:
|
|
12289
|
+
label: r(`${t}.fps`),
|
|
12290
|
+
value: e.fps == null ? null : String(e.fps)
|
|
12300
12291
|
},
|
|
12301
12292
|
{
|
|
12302
|
-
label:
|
|
12303
|
-
value: Gl(
|
|
12293
|
+
label: r(`${t}.resolution`),
|
|
12294
|
+
value: Gl(e)
|
|
12304
12295
|
},
|
|
12305
12296
|
{
|
|
12306
|
-
label:
|
|
12307
|
-
value:
|
|
12297
|
+
label: r(`${t}.codec`),
|
|
12298
|
+
value: e.codec
|
|
12308
12299
|
},
|
|
12309
12300
|
{
|
|
12310
|
-
label:
|
|
12311
|
-
value:
|
|
12301
|
+
label: r(`${t}.pixelFormat`),
|
|
12302
|
+
value: e.pixelFormat
|
|
12312
12303
|
},
|
|
12313
12304
|
{
|
|
12314
|
-
label:
|
|
12315
|
-
value:
|
|
12305
|
+
label: r(`${t}.channels`),
|
|
12306
|
+
value: e.channels == null ? null : String(e.channels)
|
|
12316
12307
|
},
|
|
12317
12308
|
{
|
|
12318
|
-
label:
|
|
12319
|
-
value:
|
|
12309
|
+
label: r(`${t}.hasAudio`),
|
|
12310
|
+
value: e.hasAudio == null ? null : e.hasAudio ? r(`${t}.yes`) : r(`${t}.no`)
|
|
12320
12311
|
},
|
|
12321
12312
|
{
|
|
12322
|
-
label:
|
|
12323
|
-
value: Kl(
|
|
12313
|
+
label: r(`${t}.clipRange`),
|
|
12314
|
+
value: Kl(e)
|
|
12324
12315
|
}
|
|
12325
12316
|
].filter((e) => e.value);
|
|
12326
|
-
return /* @__PURE__ */
|
|
12327
|
-
"
|
|
12328
|
-
|
|
12329
|
-
|
|
12330
|
-
|
|
12331
|
-
|
|
12332
|
-
}), /* @__PURE__ */ K("dl", {
|
|
12333
|
-
className: "flex min-w-0 items-center gap-2 overflow-hidden border-l border-white/15 pl-2",
|
|
12334
|
-
children: a.map((e) => /* @__PURE__ */ q("div", {
|
|
12335
|
-
className: F("flex shrink-0 items-baseline gap-1", e.breakAll && "min-w-0 shrink"),
|
|
12317
|
+
return i.length === 0 ? null : /* @__PURE__ */ K("div", {
|
|
12318
|
+
className: F("absolute left-2 top-2 z-10 max-h-[50%] max-w-[min(16rem,calc(100%-1rem))] overflow-y-auto rounded-md border border-white/10 bg-black/70 px-2.5 py-2 text-[11px] text-white opacity-0 shadow-lg backdrop-blur-sm transition-opacity duration-150 group-hover:opacity-100 group-focus-within:opacity-100", n),
|
|
12319
|
+
children: /* @__PURE__ */ K("dl", {
|
|
12320
|
+
className: "flex flex-col gap-1",
|
|
12321
|
+
children: i.map((e) => /* @__PURE__ */ q("div", {
|
|
12322
|
+
className: "grid grid-cols-[auto_1fr] items-baseline gap-x-3 gap-y-0",
|
|
12336
12323
|
children: [/* @__PURE__ */ K("dt", {
|
|
12337
|
-
className: "shrink-0 text-white/
|
|
12324
|
+
className: "shrink-0 text-white/55",
|
|
12338
12325
|
children: e.label
|
|
12339
12326
|
}), /* @__PURE__ */ K("dd", {
|
|
12340
|
-
className:
|
|
12327
|
+
className: "min-w-0 break-all text-right font-mono tabular-nums text-white/95",
|
|
12341
12328
|
children: e.value
|
|
12342
12329
|
})]
|
|
12343
12330
|
}, e.label))
|
|
12344
|
-
})
|
|
12331
|
+
})
|
|
12345
12332
|
});
|
|
12346
12333
|
}, Jl = ({ params: e }) => {
|
|
12347
12334
|
let { t } = te(), { info: n, dataLoader: r, imageService: i, subscribeFrameIndex: a } = se(), { selectedEpisodeIndex: o } = P(), s = W(() => e?.featureKey ? e.featureKey : M(n) || "observation.images.cam_high", [e?.featureKey, n]), [c, l] = Se(!1), [u, d] = Se(null), [f, p] = Se(!1), [m, h] = Se(null), g = G(null), _ = G(!0), v = G(o), y = G(s), b = G(r), x = G(i), S = G(n), C = G(0), w = G(!1), T = G(null), E = G(!1);
|
|
@@ -12437,7 +12424,6 @@ var ql = ({ featureKey: e, metadata: t, translationPrefix: n, className: r }) =>
|
|
|
12437
12424
|
className: "group relative flex h-full w-full items-center justify-center overflow-hidden bg-black",
|
|
12438
12425
|
children: [
|
|
12439
12426
|
/* @__PURE__ */ K(ql, {
|
|
12440
|
-
featureKey: s,
|
|
12441
12427
|
metadata: ee,
|
|
12442
12428
|
translationPrefix: "panels.image.debug"
|
|
12443
12429
|
}),
|
|
@@ -12612,7 +12598,6 @@ var ql = ({ featureKey: e, metadata: t, translationPrefix: n, className: r }) =>
|
|
|
12612
12598
|
className: "group relative flex h-full w-full items-center justify-center overflow-hidden bg-black",
|
|
12613
12599
|
children: [
|
|
12614
12600
|
/* @__PURE__ */ K(ql, {
|
|
12615
|
-
featureKey: E,
|
|
12616
12601
|
metadata: D,
|
|
12617
12602
|
translationPrefix: "panels.video.debug"
|
|
12618
12603
|
}),
|
|
@@ -16087,9 +16072,9 @@ var Ph = ({ params: e }) => {
|
|
|
16087
16072
|
children: t("chart.split.open")
|
|
16088
16073
|
})]
|
|
16089
16074
|
})]
|
|
16090
|
-
}), /* @__PURE__ */
|
|
16075
|
+
}), /* @__PURE__ */ K("div", {
|
|
16091
16076
|
className: "flex gap-2 shrink-0 items-center",
|
|
16092
|
-
children:
|
|
16077
|
+
children: (_e || z) && /* @__PURE__ */ q(we, { children: [_e && /* @__PURE__ */ q("div", {
|
|
16093
16078
|
className: "group relative flex items-center gap-1.5 text-[10px] font-medium text-muted-foreground tracking-tight px-1.5 py-0.5 rounded hover:bg-muted/30 transition-colors cursor-pointer",
|
|
16094
16079
|
onClick: (e) => {
|
|
16095
16080
|
e.stopPropagation(), de(!ue);
|
|
@@ -16162,17 +16147,7 @@ var Ph = ({ params: e }) => {
|
|
|
16162
16147
|
children: t("chart.legend.stateAbbr")
|
|
16163
16148
|
})
|
|
16164
16149
|
]
|
|
16165
|
-
})] })
|
|
16166
|
-
className: "flex items-center ml-2",
|
|
16167
|
-
children: /* @__PURE__ */ K("span", {
|
|
16168
|
-
className: "text-[9px] font-mono text-muted-foreground/60 bg-muted/40 px-1.5 py-0.5 rounded border border-border/50",
|
|
16169
|
-
children: t("chart.sampling.enabled", {
|
|
16170
|
-
originalPoints: Ee.meta.originalPoints,
|
|
16171
|
-
displayedPoints: Ee.meta.displayedPoints,
|
|
16172
|
-
stride: Ee.meta.stride
|
|
16173
|
-
})
|
|
16174
|
-
})
|
|
16175
|
-
})]
|
|
16150
|
+
})] })
|
|
16176
16151
|
})]
|
|
16177
16152
|
}),
|
|
16178
16153
|
/* @__PURE__ */ q("div", {
|
|
@@ -101,8 +101,10 @@
|
|
|
101
101
|
--color-amber-500: oklch(76.9% .188 70.08);
|
|
102
102
|
--color-amber-600: oklch(66.6% .179 58.318);
|
|
103
103
|
--color-amber-700: oklch(55.5% .163 48.998);
|
|
104
|
+
--color-green-400: oklch(79.2% .209 151.711);
|
|
104
105
|
--color-green-500: oklch(72.3% .219 149.579);
|
|
105
106
|
--color-green-600: oklch(62.7% .194 149.214);
|
|
107
|
+
--color-green-700: oklch(52.7% .154 150.069);
|
|
106
108
|
--color-emerald-400: oklch(76.5% .177 163.223);
|
|
107
109
|
--color-emerald-600: oklch(59.6% .145 163.225);
|
|
108
110
|
--color-sky-100: oklch(95.1% .026 236.824);
|
|
@@ -124,7 +126,6 @@
|
|
|
124
126
|
--container-lg: 32rem;
|
|
125
127
|
--container-xl: 36rem;
|
|
126
128
|
--container-2xl: 42rem;
|
|
127
|
-
--container-5xl: 64rem;
|
|
128
129
|
--container-6xl: 72rem;
|
|
129
130
|
--text-xs: .75rem;
|
|
130
131
|
--text-xs--line-height: calc(1 / .75);
|
|
@@ -1001,6 +1002,10 @@
|
|
|
1001
1002
|
max-height: 38vh;
|
|
1002
1003
|
}
|
|
1003
1004
|
|
|
1005
|
+
.lerobot-root .max-h-\[50\%\] {
|
|
1006
|
+
max-height: 50%;
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1004
1009
|
.lerobot-root .max-h-\[60vh\] {
|
|
1005
1010
|
max-height: 60vh;
|
|
1006
1011
|
}
|
|
@@ -1117,6 +1122,10 @@
|
|
|
1117
1122
|
width: calc(var(--spacing) * 80);
|
|
1118
1123
|
}
|
|
1119
1124
|
|
|
1125
|
+
.lerobot-root .w-\[80vw\] {
|
|
1126
|
+
width: 80vw;
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1120
1129
|
.lerobot-root .w-\[640px\] {
|
|
1121
1130
|
width: 640px;
|
|
1122
1131
|
}
|
|
@@ -1133,22 +1142,22 @@
|
|
|
1133
1142
|
max-width: var(--container-2xl);
|
|
1134
1143
|
}
|
|
1135
1144
|
|
|
1136
|
-
.lerobot-root .max-w-5xl {
|
|
1137
|
-
max-width: var(--container-5xl);
|
|
1138
|
-
}
|
|
1139
|
-
|
|
1140
1145
|
.lerobot-root .max-w-6xl {
|
|
1141
1146
|
max-width: var(--container-6xl);
|
|
1142
1147
|
}
|
|
1143
1148
|
|
|
1144
|
-
.lerobot-root .max-w
|
|
1145
|
-
max-width:
|
|
1149
|
+
.lerobot-root .max-w-\[40vw\] {
|
|
1150
|
+
max-width: 40vw;
|
|
1146
1151
|
}
|
|
1147
1152
|
|
|
1148
1153
|
.lerobot-root .max-w-\[55\%\] {
|
|
1149
1154
|
max-width: 55%;
|
|
1150
1155
|
}
|
|
1151
1156
|
|
|
1157
|
+
.lerobot-root .max-w-\[80vw\] {
|
|
1158
|
+
max-width: 80vw;
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1152
1161
|
.lerobot-root .max-w-\[90vw\] {
|
|
1153
1162
|
max-width: 90vw;
|
|
1154
1163
|
}
|
|
@@ -1173,14 +1182,14 @@
|
|
|
1173
1182
|
max-width: 420px;
|
|
1174
1183
|
}
|
|
1175
1184
|
|
|
1176
|
-
.lerobot-root .max-w-\[calc\(100\%-1rem\)\] {
|
|
1177
|
-
max-width: calc(100% - 1rem);
|
|
1178
|
-
}
|
|
1179
|
-
|
|
1180
1185
|
.lerobot-root .max-w-\[calc\(100\%-2rem\)\] {
|
|
1181
1186
|
max-width: calc(100% - 2rem);
|
|
1182
1187
|
}
|
|
1183
1188
|
|
|
1189
|
+
.lerobot-root .max-w-\[min\(16rem\,calc\(100\%-1rem\)\)\] {
|
|
1190
|
+
max-width: min(16rem, 100% - 1rem);
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1184
1193
|
.lerobot-root .max-w-\[min\(100\%\,280px\)\] {
|
|
1185
1194
|
max-width: min(100%, 280px);
|
|
1186
1195
|
}
|
|
@@ -1358,6 +1367,10 @@
|
|
|
1358
1367
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
1359
1368
|
}
|
|
1360
1369
|
|
|
1370
|
+
.lerobot-root .grid-cols-\[auto_1fr\] {
|
|
1371
|
+
grid-template-columns: auto 1fr;
|
|
1372
|
+
}
|
|
1373
|
+
|
|
1361
1374
|
.lerobot-root .grid-rows-\[auto_auto\] {
|
|
1362
1375
|
grid-template-rows: auto auto;
|
|
1363
1376
|
}
|
|
@@ -1497,6 +1510,14 @@
|
|
|
1497
1510
|
margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));
|
|
1498
1511
|
}
|
|
1499
1512
|
|
|
1513
|
+
.lerobot-root .gap-x-3 {
|
|
1514
|
+
column-gap: calc(var(--spacing) * 3);
|
|
1515
|
+
}
|
|
1516
|
+
|
|
1517
|
+
.lerobot-root .gap-y-0 {
|
|
1518
|
+
row-gap: 0;
|
|
1519
|
+
}
|
|
1520
|
+
|
|
1500
1521
|
.lerobot-root .self-center {
|
|
1501
1522
|
align-self: center;
|
|
1502
1523
|
}
|
|
@@ -1733,16 +1754,6 @@
|
|
|
1733
1754
|
}
|
|
1734
1755
|
}
|
|
1735
1756
|
|
|
1736
|
-
.lerobot-root .border-white\/15 {
|
|
1737
|
-
border-color: #ffffff26;
|
|
1738
|
-
}
|
|
1739
|
-
|
|
1740
|
-
@supports (color: color-mix(in lab, red, red)) {
|
|
1741
|
-
.lerobot-root .border-white\/15 {
|
|
1742
|
-
border-color: color-mix(in oklab, var(--color-white) 15%, transparent);
|
|
1743
|
-
}
|
|
1744
|
-
}
|
|
1745
|
-
|
|
1746
1757
|
.lerobot-root .border-t-transparent {
|
|
1747
1758
|
border-top-color: #0000;
|
|
1748
1759
|
}
|
|
@@ -2175,10 +2186,6 @@
|
|
|
2175
2186
|
padding-bottom: calc(var(--spacing) * 4);
|
|
2176
2187
|
}
|
|
2177
2188
|
|
|
2178
|
-
.lerobot-root .pl-2 {
|
|
2179
|
-
padding-left: calc(var(--spacing) * 2);
|
|
2180
|
-
}
|
|
2181
|
-
|
|
2182
2189
|
.lerobot-root .pl-4 {
|
|
2183
2190
|
padding-left: calc(var(--spacing) * 4);
|
|
2184
2191
|
}
|
|
@@ -2320,11 +2327,6 @@
|
|
|
2320
2327
|
font-weight: var(--font-weight-semibold);
|
|
2321
2328
|
}
|
|
2322
2329
|
|
|
2323
|
-
.lerobot-root .tracking-\[0\.12em\] {
|
|
2324
|
-
--tw-tracking: .12em;
|
|
2325
|
-
letter-spacing: .12em;
|
|
2326
|
-
}
|
|
2327
|
-
|
|
2328
2330
|
.lerobot-root .tracking-tight {
|
|
2329
2331
|
--tw-tracking: var(--tracking-tight);
|
|
2330
2332
|
letter-spacing: var(--tracking-tight);
|
|
@@ -2463,6 +2465,10 @@
|
|
|
2463
2465
|
color: var(--color-green-600);
|
|
2464
2466
|
}
|
|
2465
2467
|
|
|
2468
|
+
.lerobot-root .text-green-700 {
|
|
2469
|
+
color: var(--color-green-700);
|
|
2470
|
+
}
|
|
2471
|
+
|
|
2466
2472
|
.lerobot-root .text-muted-foreground, .lerobot-root .text-muted-foreground\/30 {
|
|
2467
2473
|
color: var(--muted-foreground);
|
|
2468
2474
|
}
|
|
@@ -2539,23 +2545,23 @@
|
|
|
2539
2545
|
color: var(--color-white);
|
|
2540
2546
|
}
|
|
2541
2547
|
|
|
2542
|
-
.lerobot-root .text-white\/
|
|
2543
|
-
color: #
|
|
2548
|
+
.lerobot-root .text-white\/55 {
|
|
2549
|
+
color: #ffffff8c;
|
|
2544
2550
|
}
|
|
2545
2551
|
|
|
2546
2552
|
@supports (color: color-mix(in lab, red, red)) {
|
|
2547
|
-
.lerobot-root .text-white\/
|
|
2548
|
-
color: color-mix(in oklab, var(--color-white)
|
|
2553
|
+
.lerobot-root .text-white\/55 {
|
|
2554
|
+
color: color-mix(in oklab, var(--color-white) 55%, transparent);
|
|
2549
2555
|
}
|
|
2550
2556
|
}
|
|
2551
2557
|
|
|
2552
|
-
.lerobot-root .text-white\/
|
|
2553
|
-
color: #
|
|
2558
|
+
.lerobot-root .text-white\/95 {
|
|
2559
|
+
color: #fffffff2;
|
|
2554
2560
|
}
|
|
2555
2561
|
|
|
2556
2562
|
@supports (color: color-mix(in lab, red, red)) {
|
|
2557
|
-
.lerobot-root .text-white\/
|
|
2558
|
-
color: color-mix(in oklab, var(--color-white)
|
|
2563
|
+
.lerobot-root .text-white\/95 {
|
|
2564
|
+
color: color-mix(in oklab, var(--color-white) 95%, transparent);
|
|
2559
2565
|
}
|
|
2560
2566
|
}
|
|
2561
2567
|
|
|
@@ -3218,7 +3224,7 @@
|
|
|
3218
3224
|
}
|
|
3219
3225
|
}
|
|
3220
3226
|
|
|
3221
|
-
.lerobot-root .focus-visible\:ring-ring\/50:focus-visible {
|
|
3227
|
+
.lerobot-root .focus-visible\:ring-ring:focus-visible, .lerobot-root .focus-visible\:ring-ring\/50:focus-visible {
|
|
3222
3228
|
--tw-ring-color: var(--ring);
|
|
3223
3229
|
}
|
|
3224
3230
|
|
|
@@ -3238,6 +3244,11 @@
|
|
|
3238
3244
|
}
|
|
3239
3245
|
}
|
|
3240
3246
|
|
|
3247
|
+
.lerobot-root .focus-visible\:ring-offset-2:focus-visible {
|
|
3248
|
+
--tw-ring-offset-width: 2px;
|
|
3249
|
+
--tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
|
|
3250
|
+
}
|
|
3251
|
+
|
|
3241
3252
|
.lerobot-root .focus-visible\:outline-hidden:focus-visible {
|
|
3242
3253
|
--tw-outline-style: none;
|
|
3243
3254
|
outline-style: none;
|
|
@@ -3562,6 +3573,10 @@
|
|
|
3562
3573
|
display: inline;
|
|
3563
3574
|
}
|
|
3564
3575
|
|
|
3576
|
+
.lerobot-root .sm\:max-w-\[80vw\] {
|
|
3577
|
+
max-width: 80vw;
|
|
3578
|
+
}
|
|
3579
|
+
|
|
3565
3580
|
.lerobot-root .sm\:max-w-\[90vw\] {
|
|
3566
3581
|
max-width: 90vw;
|
|
3567
3582
|
}
|
|
@@ -3704,6 +3719,10 @@
|
|
|
3704
3719
|
color: var(--color-emerald-400);
|
|
3705
3720
|
}
|
|
3706
3721
|
|
|
3722
|
+
.lerobot-root .dark\:text-green-400:is(.dark *) {
|
|
3723
|
+
color: var(--color-green-400);
|
|
3724
|
+
}
|
|
3725
|
+
|
|
3707
3726
|
.lerobot-root .dark\:text-green-500:is(.dark *) {
|
|
3708
3727
|
color: var(--color-green-500);
|
|
3709
3728
|
}
|
package/dist-lib/lerobot.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as e, B as t, C as n, D as r, E as i, F as a, G as o, H as s, K as c, M as l, N as u, O as d, P as f, S as p, T as m, U as h, V as g, W as _, _ as v, a as y, b, c as x, ft as S, g as C, gt as w, h as T, ht as E, i as D, j as O, k as ee, l as te, lt as ne, m as k, mt as A, n as re, o as j, p as ie, pt as M, r as ae, s as N, st as oe, t as se, v as ce, w as P, x as F, y as I } from "./react-window-
|
|
1
|
+
import { A as e, B as t, C as n, D as r, E as i, F as a, G as o, H as s, K as c, M as l, N as u, O as d, P as f, S as p, T as m, U as h, V as g, W as _, _ as v, a as y, b, c as x, ft as S, g as C, gt as w, h as T, ht as E, i as D, j as O, k as ee, l as te, lt as ne, m as k, mt as A, n as re, o as j, p as ie, pt as M, r as ae, s as N, st as oe, t as se, v as ce, w as P, x as F, y as I } from "./react-window-CGTfzj0C.js";
|
|
2
2
|
import { r as L, t as le } from "./workerManager-D6ovn2ln.js";
|
|
3
3
|
import * as ue from "react";
|
|
4
4
|
import R, { Suspense as de, createContext as fe, memo as pe, useCallback as z, useContext as me, useEffect as B, useMemo as V, useRef as H, useState as U } from "react";
|
|
@@ -7026,7 +7026,7 @@ var Kl = () => {
|
|
|
7026
7026
|
})
|
|
7027
7027
|
]
|
|
7028
7028
|
});
|
|
7029
|
-
}, Jl = R.lazy(async () => ({ default: (await import("./DockviewLayout-
|
|
7029
|
+
}, Jl = R.lazy(async () => ({ default: (await import("./DockviewLayout-0MP_kiQC.js")).DockviewLayout }));
|
|
7030
7030
|
function Yl({ showSidebar: e = !0, showPlaybackBar: t = !0, className: n, sidebar: r, emptyState: i, sidebarHeader: a, showToaster: o = !0, onRetry: s }) {
|
|
7031
7031
|
let { t: c } = E(), { episodes: l, info: u, clearError: d, error: f } = N(), { tasks: p } = ol(), m = u !== null && l.length > 0, h = m && e && !!r, g = p.find((e) => e.phase !== "ready" && e.phase !== "idle" && e.phase !== "error"), _ = p.find((e) => e.phase === "error"), v = s ?? (() => {
|
|
7032
7032
|
d();
|
|
@@ -3047,6 +3047,9 @@ var hn = {
|
|
|
3047
3047
|
errorsCount: "{{count}} 个错误",
|
|
3048
3048
|
warningsCount: "{{count}} 个警告",
|
|
3049
3049
|
passedCount: "{{count}} 项通过",
|
|
3050
|
+
filterErrors: "仅显示 {{count}} 个错误",
|
|
3051
|
+
filterWarnings: "仅显示 {{count}} 个警告",
|
|
3052
|
+
filterPassed: "仅显示 {{count}} 项通过检查",
|
|
3050
3053
|
close: "关闭",
|
|
3051
3054
|
retry: "重试",
|
|
3052
3055
|
export: "导出",
|
|
@@ -3399,10 +3402,6 @@ var hn = {
|
|
|
3399
3402
|
title: "视频面板",
|
|
3400
3403
|
placeholder: "等待加载视频文件...",
|
|
3401
3404
|
debug: {
|
|
3402
|
-
title: "媒体调试信息",
|
|
3403
|
-
feature: "Feature",
|
|
3404
|
-
dtype: "类型",
|
|
3405
|
-
shape: "Shape",
|
|
3406
3405
|
fps: "FPS",
|
|
3407
3406
|
resolution: "分辨率",
|
|
3408
3407
|
codec: "编码",
|
|
@@ -3418,10 +3417,6 @@ var hn = {
|
|
|
3418
3417
|
title: "图像面板",
|
|
3419
3418
|
placeholder: "等待加载图像文件...",
|
|
3420
3419
|
debug: {
|
|
3421
|
-
title: "媒体调试信息",
|
|
3422
|
-
feature: "Feature",
|
|
3423
|
-
dtype: "类型",
|
|
3424
|
-
shape: "Shape",
|
|
3425
3420
|
fps: "FPS",
|
|
3426
3421
|
resolution: "分辨率",
|
|
3427
3422
|
codec: "编码",
|
|
@@ -3783,6 +3778,9 @@ var hn = {
|
|
|
3783
3778
|
errorsCount: "{{count}} error(s)",
|
|
3784
3779
|
warningsCount: "{{count}} warning(s)",
|
|
3785
3780
|
passedCount: "{{count}} passed",
|
|
3781
|
+
filterErrors: "Show only {{count}} error(s)",
|
|
3782
|
+
filterWarnings: "Show only {{count}} warning(s)",
|
|
3783
|
+
filterPassed: "Show only {{count}} passed check(s)",
|
|
3786
3784
|
close: "Close",
|
|
3787
3785
|
retry: "Retry",
|
|
3788
3786
|
export: "Export",
|
|
@@ -4135,10 +4133,6 @@ var hn = {
|
|
|
4135
4133
|
title: "Video Panel",
|
|
4136
4134
|
placeholder: "Waiting for video file...",
|
|
4137
4135
|
debug: {
|
|
4138
|
-
title: "Media debug",
|
|
4139
|
-
feature: "Feature",
|
|
4140
|
-
dtype: "DType",
|
|
4141
|
-
shape: "Shape",
|
|
4142
4136
|
fps: "FPS",
|
|
4143
4137
|
resolution: "Resolution",
|
|
4144
4138
|
codec: "Codec",
|
|
@@ -4154,10 +4148,6 @@ var hn = {
|
|
|
4154
4148
|
title: "Image Panel",
|
|
4155
4149
|
placeholder: "Waiting for image file...",
|
|
4156
4150
|
debug: {
|
|
4157
|
-
title: "Media debug",
|
|
4158
|
-
feature: "Feature",
|
|
4159
|
-
dtype: "DType",
|
|
4160
|
-
shape: "Shape",
|
|
4161
4151
|
fps: "FPS",
|
|
4162
4152
|
resolution: "Resolution",
|
|
4163
4153
|
codec: "Codec",
|
|
@@ -4491,7 +4481,7 @@ var hn = {
|
|
|
4491
4481
|
},
|
|
4492
4482
|
speed: "再生速度"
|
|
4493
4483
|
},
|
|
4494
|
-
health: /* @__PURE__ */ JSON.parse("{\"noData\":\"データセットを読み込むとヘルスチェックを表示します\",\"statusErrors\":\"検証でエラーを検出\",\"statusWarnings\":\"検証で警告を検出\",\"statusOk\":\"フォーマットチェック完了\",\"checks\":\"チェック項目\",\"noIssues\":\"問題はありません\",\"fpsInvalid\":\"info.fps が未設定または ≤ 0 です。再生が不正になる可能性があります。\",\"zeroLengthEpisodes\":\"{{count}} 件のエピソードの長さが 0 です\",\"episodeCountMismatch\":\"有効エピソード数({{effective}})が info.total_episodes({{total}})と一致しません。編集/削除を反映しました。\",\"footnote\":\"フォーマット検証は読み込み時に実行されます。データ品質(NaN/外れ値)は今後のバージョンで対応予定です。\",\"healthCheckButton\":\"データセットヘルスチェック\",\"check\":\"チェック\",\"validation\":{\"columns\":{\"field\":\"チェック項目\",\"current\":\"現在\",\"expected\":\"期待値\",\"suggestion\":\"推奨対応\"},\"dialog\":{\"title\":\"データセット品質レポート\",\"summaryErrors\":\"検証でエラーを検出\",\"summaryWarnings\":\"検証で警告を検出\",\"summaryOk\":\"すべてのチェックを通過\",\"errorsCount\":\"エラー {{count}} 件\",\"warningsCount\":\"警告 {{count}} 件\",\"passedCount\":\"{{count}} 件通過\",\"close\":\"閉じる\",\"retry\":\"再試行\",\"export\":\"エクスポート\",\"exportCsv\":\"CSV でエクスポート\",\"exportPdf\":\"PDF でエクスポート\"},\"categories\":{\"file_structure\":\"ファイル構造\",\"meta_info\":\"メタデータ\",\"features\":\"特徴量\",\"episodes\":\"エピソード\"},\"terms\":{\"exists\":\"存在する\",\"missing\":\"欠損\",\"notExists\":\"見つかりません\",\"invalidJson\":\"無効な JSON\",\"validJson\":\"有効な JSON ファイル\",\"positiveInteger\":\"正の整数\",\"nonNegativeInteger\":\"0 以上の整数\",\"positiveNumber\":\"正の数\",\"nonEmptyString\":\"空でない文字列\",\"present\":\"存在\",\"unknown\":\"不明\",\"validDtype\":\"有効な dtype\",\"object\":\"オブジェクト\",\"arrayOrNull\":\"配列または null\",\"nFeatures\":\"{{count}} 特徴量\",\"pathOrFileExists\":\"パスまたはファイルが存在\",\"fieldExists\":\"フィールドが存在\",\"positiveIntArray\":\"[正の整数, ...]\",\"stringArrayMatchShape\":\"string[](長さ = shape の最終次元)\",\"objectWithFeatures\":\"1 つ以上の feature を持つオブジェクト\",\"positiveIntMatchTotalEpisodes\":\"正の整数、total_episodes と一致\",\"episodeLengthPositive\":\"各エピソードの length > 0\",\"nonNegativeIntCount\":\"0 以上の整数(件数)\",\"requiredParquetColumns\":\"frame_index, episode_index, index, timestamp など\",\"objectWithTrainKey\":\"\\\"train\\\" キーを持つオブジェクト\",\"containsTrain\":\"\\\"train\\\" を含む\",\"requiredEpisodesColumns\":\"episode_index, length, dataset_from_index, dataset_to_index\",\"tasksPresent\":\"tasks.jsonl または tasks.parquet が存在\"},\"codes\":{\"INFO_MISSING\":{\"message\":\"meta/info.json が存在しないか読み取れません\",\"suggestion\":\"LeRobot データセットルートに meta/info.json があることを確認してください\"},\"INFO_PARSE_ERROR\":{\"message\":\"meta/info.json の JSON 解析に失敗しました\",\"suggestion\":\"JSON 構文を確認してください(例: https://jsonlint.com)\"},\"VERSION_MISMATCH\":{\"message\":\"codebase_version が v2.x ではありません\",\"suggestion\":\"v3.0 の場合は対応ローダーを使用するか、codebase_version を v2.0 または v2.1 に設定してください\"},\"VERSION_MISMATCH_V3\":{\"message\":\"codebase_version が v3.x ではありません\",\"suggestion\":\"codebase_version を v3.0 に設定してください\"},\"ROBOT_TYPE_MISSING\":{\"message\":\"robot_type が未設定または空です\",\"suggestion\":\"ロボットタイプを設定してください(例: \\\"so100\\\", \\\"lekiwi\\\")\"},\"TOTAL_EPISODES_INVALID\":{\"message\":\"total_episodes は正の整数である必要があります\",\"suggestion\":\"正しいエピソード総数を設定してください\"},\"TOTAL_FRAMES_INVALID\":{\"message\":\"total_frames は正の整数である必要があります\",\"suggestion\":\"正しいフレーム総数を設定してください\"},\"TOTAL_TASKS_INVALID\":{\"message\":\"total_tasks は 0 以上の整数である必要があります\",\"suggestion\":\"正しいタスク総数を設定してください(0 可)\"},\"FPS_INVALID\":{\"message\":\"fps は正の数である必要があります\",\"suggestion\":\"正しい FPS を設定してください(例: 30)\"},\"CHUNKS_SIZE_MISSING\":{\"message\":\"chunks_size が未設定です。デフォルト 1000 を使用します\",\"suggestion\":\"chunks_size フィールドを追加してください(推奨: 1000)\"},\"FEATURES_EMPTY\":{\"message\":\"features が未設定または空です\",\"suggestion\":\"info.json の features にデータセットの全カラムを定義してください\"},\"EPISODES_MISSING\":{\"message\":\"meta/episodes.jsonl が存在しないか読み取れません\",\"suggestion\":\"1 行 1 エピソードの JSON で meta/episodes.jsonl を作成してください\"},\"EPISODES_INVALID_JSONL\":{\"message\":\"episodes.jsonl の行の JSON 解析に失敗しました\",\"suggestion\":\"各行が有効な JSON オブジェクトであることを確認してください\"},\"EPISODES_EMPTY\":{\"message\":\"episodes.jsonl は空です\",\"suggestion\":\"episodes.jsonl にデータがあることを確認してください\"},\"EPISODES_COUNT_MISMATCH\":{\"message\":\"解析したエピソード数({{parsed}})が total_episodes({{expected}})と一致しません\",\"suggestion\":\"episodes.jsonl を再生成するか info.json の total_episodes を修正してください\"},\"ZERO_LENGTH_EPISODES\":{\"message\":\"{{count}} 件のエピソードの長さが 0 です\",\"suggestion\":\"各エピソードが正のフレーム数を持つよう episodes.jsonl を再生成してください\"},\"EPISODES_NO_LENGTH\":{\"message\":\"{{count}} 件のエピソードに length/num_frames がありません\",\"suggestion\":\"episodes.jsonl の各行に \\\"length\\\" を追加してください\"},\"TASKS_MISSING\":{\"message\":\"meta/tasks.jsonl が存在しないか空です\",\"suggestion\":\"1 行 1 JSON で tasks.jsonl を作成: {\\\"task_index\\\": 0, \\\"task\\\": \\\"説明\\\"}\"},\"DATA_FILE_MISSING\":{\"message\":\"データファイルが存在しません\",\"suggestion\":\"v2 形式で data/ に Parquet ファイルを生成してください\"},\"DATA_FILE_CHECK_FAILED\":{\"message\":\"データファイルの存在を確認できませんでした\",\"suggestion\":\"data/chunk-xxx/episode_xxxxxx.parquet が存在することを確認してください\"},\"VIDEO_FILE_MISSING\":{\"message\":\"動画ファイルが存在しません\",\"suggestion\":\"videos/chunk-xxx/<key>/episode_xxxxxx.mp4 を生成してください\"},\"VIDEO_FILE_CHECK_FAILED\":{\"message\":\"動画ファイルの存在を確認できませんでした\",\"suggestion\":\"videos/chunk-xxx/<key>/episode_xxxxxx.mp4 が存在することを確認してください\"},\"PARQUET_MISSING_COLS\":{\"message\":\"データ Parquet に必須カラムがありません: {{cols}}\",\"suggestion\":\"システムカラムを含むデータ Parquet を再生成してください\"},\"DEFAULT_FEATURE_MISSING\":{\"message\":\"システムフィールド {{key}} がありません\",\"suggestion\":\"meta/info.json の features に \\\"{{key}}\\\" を追加してください\"},\"FEATURE_INVALID\":{\"message\":\"features.{{key}} は有効なオブジェクトではありません\",\"suggestion\":\"各 feature が dtype と shape を持つオブジェクトであることを確認してください\"},\"DTYPE_MISSING\":{\"message\":\"features.{{key}}.dtype がありません\",\"suggestion\":\"dtype を追加してください(例: float32, int64, video, image, string)\"},\"DTYPE_INVALID\":{\"message\":\"features.{{key}}.dtype が無効です: {{dtype}}\",\"suggestion\":\"標準の dtype を使用してください\"},\"SHAPE_INVALID\":{\"message\":\"features.{{key}}.shape は正の整数の非空配列である必要があります\",\"suggestion\":\"shape を設定してください(例: [7], [3, 480, 640])\"},\"NAMES_INVALID\":{\"message\":\"features.{{key}}.names は配列ではありません\",\"suggestion\":\"names を文字列配列または null に設定してください\"},\"NAMES_LENGTH_MISMATCH\":{\"message\":\"features.{{key}}.names の長さ({{actual}})が shape の最終次元({{expected}})と一致しません\",\"suggestion\":\"names の長さを shape の最終次元と一致させてください\"},\"VIDEO_FPS_MISSING\":{\"message\":\"動画 feature {{key}} の fps が未設定または ≤0 です。info.fps を使用します\",\"suggestion\":\"オプション: この feature に fps を設定。未設定の場合は info.fps を使用\"},\"VIDEO_SHAPE_CHANNELS\":{\"message\":\"動画の shape チャンネル数が一般的ではありません\",\"suggestion\":\"通常は 3(RGB)です。[C,H,W] と [H,W,C] の両方に対応\"},\"VIDEO_SHAPE_NDIM\":{\"message\":\"動画 shape は 3D (C, H, W) である必要があります。現在 {{n}}D です\",\"suggestion\":\"shape を [C, H, W] に設定してください\"},\"IMAGE_SHAPE_NDIM\":{\"message\":\"画像 shape は 3D (C, H, W) である必要があります。現在 {{n}}D です\",\"suggestion\":\"shape を [C, H, W] に設定してください\"},\"EPISODES_PARQUET_MISSING\":{\"message\":\"meta/episodes の最初のファイルが存在しません\",\"suggestion\":\"v3 形式で meta/episodes/chunk-xxx/file-xxx.parquet を生成してください\"},\"EPISODES_PARQUET_INVALID\":{\"message\":\"meta/episodes の最初のファイルを Parquet として解析できませんでした\",\"suggestion\":\"episodes Parquet ファイルが有効であることを確認してください\"},\"DATA_PATH_TEMPLATE\":{\"message\":\"info.data_path がデフォルトテンプレートと一致しません\",\"suggestion\":\"デフォルトの data パステンプレートを使用するか、カスタムパスを一貫させてください\"},\"VIDEO_PATH_TEMPLATE\":{\"message\":\"info.video_path がデフォルトテンプレートと一致しません\",\"suggestion\":\"デフォルトの動画パステンプレートを使用してください\"},\"TASKS_PRESENT\":{\"message\":\"タスクメタデータを検出しました\",\"suggestion\":\"\"},\"EPISODE_COUNT\":{\"message\":\"{{count}} 件のエピソードを解析しました\",\"suggestion\":\"\"},\"TASK_COUNT\":{\"message\":\"{{count}} 件のタスクを解析しました\",\"suggestion\":\"\"},\"SPLITS_MISSING_TRAIN\":{\"message\":\"splits に \\\"train\\\" が必要です\",\"suggestion\":\"splits に少なくとも \\\"train\\\" キーを追加してください\"}}}}"),
|
|
4484
|
+
health: /* @__PURE__ */ JSON.parse("{\"noData\":\"データセットを読み込むとヘルスチェックを表示します\",\"statusErrors\":\"検証でエラーを検出\",\"statusWarnings\":\"検証で警告を検出\",\"statusOk\":\"フォーマットチェック完了\",\"checks\":\"チェック項目\",\"noIssues\":\"問題はありません\",\"fpsInvalid\":\"info.fps が未設定または ≤ 0 です。再生が不正になる可能性があります。\",\"zeroLengthEpisodes\":\"{{count}} 件のエピソードの長さが 0 です\",\"episodeCountMismatch\":\"有効エピソード数({{effective}})が info.total_episodes({{total}})と一致しません。編集/削除を反映しました。\",\"footnote\":\"フォーマット検証は読み込み時に実行されます。データ品質(NaN/外れ値)は今後のバージョンで対応予定です。\",\"healthCheckButton\":\"データセットヘルスチェック\",\"check\":\"チェック\",\"validation\":{\"columns\":{\"field\":\"チェック項目\",\"current\":\"現在\",\"expected\":\"期待値\",\"suggestion\":\"推奨対応\"},\"dialog\":{\"title\":\"データセット品質レポート\",\"summaryErrors\":\"検証でエラーを検出\",\"summaryWarnings\":\"検証で警告を検出\",\"summaryOk\":\"すべてのチェックを通過\",\"errorsCount\":\"エラー {{count}} 件\",\"warningsCount\":\"警告 {{count}} 件\",\"passedCount\":\"{{count}} 件通過\",\"filterErrors\":\"エラー {{count}} 件のみを表示\",\"filterWarnings\":\"警告 {{count}} 件のみを表示\",\"filterPassed\":\"通過した {{count}} 件のみを表示\",\"close\":\"閉じる\",\"retry\":\"再試行\",\"export\":\"エクスポート\",\"exportCsv\":\"CSV でエクスポート\",\"exportPdf\":\"PDF でエクスポート\"},\"categories\":{\"file_structure\":\"ファイル構造\",\"meta_info\":\"メタデータ\",\"features\":\"特徴量\",\"episodes\":\"エピソード\"},\"terms\":{\"exists\":\"存在する\",\"missing\":\"欠損\",\"notExists\":\"見つかりません\",\"invalidJson\":\"無効な JSON\",\"validJson\":\"有効な JSON ファイル\",\"positiveInteger\":\"正の整数\",\"nonNegativeInteger\":\"0 以上の整数\",\"positiveNumber\":\"正の数\",\"nonEmptyString\":\"空でない文字列\",\"present\":\"存在\",\"unknown\":\"不明\",\"validDtype\":\"有効な dtype\",\"object\":\"オブジェクト\",\"arrayOrNull\":\"配列または null\",\"nFeatures\":\"{{count}} 特徴量\",\"pathOrFileExists\":\"パスまたはファイルが存在\",\"fieldExists\":\"フィールドが存在\",\"positiveIntArray\":\"[正の整数, ...]\",\"stringArrayMatchShape\":\"string[](長さ = shape の最終次元)\",\"objectWithFeatures\":\"1 つ以上の feature を持つオブジェクト\",\"positiveIntMatchTotalEpisodes\":\"正の整数、total_episodes と一致\",\"episodeLengthPositive\":\"各エピソードの length > 0\",\"nonNegativeIntCount\":\"0 以上の整数(件数)\",\"requiredParquetColumns\":\"frame_index, episode_index, index, timestamp など\",\"objectWithTrainKey\":\"\\\"train\\\" キーを持つオブジェクト\",\"containsTrain\":\"\\\"train\\\" を含む\",\"requiredEpisodesColumns\":\"episode_index, length, dataset_from_index, dataset_to_index\",\"tasksPresent\":\"tasks.jsonl または tasks.parquet が存在\"},\"codes\":{\"INFO_MISSING\":{\"message\":\"meta/info.json が存在しないか読み取れません\",\"suggestion\":\"LeRobot データセットルートに meta/info.json があることを確認してください\"},\"INFO_PARSE_ERROR\":{\"message\":\"meta/info.json の JSON 解析に失敗しました\",\"suggestion\":\"JSON 構文を確認してください(例: https://jsonlint.com)\"},\"VERSION_MISMATCH\":{\"message\":\"codebase_version が v2.x ではありません\",\"suggestion\":\"v3.0 の場合は対応ローダーを使用するか、codebase_version を v2.0 または v2.1 に設定してください\"},\"VERSION_MISMATCH_V3\":{\"message\":\"codebase_version が v3.x ではありません\",\"suggestion\":\"codebase_version を v3.0 に設定してください\"},\"ROBOT_TYPE_MISSING\":{\"message\":\"robot_type が未設定または空です\",\"suggestion\":\"ロボットタイプを設定してください(例: \\\"so100\\\", \\\"lekiwi\\\")\"},\"TOTAL_EPISODES_INVALID\":{\"message\":\"total_episodes は正の整数である必要があります\",\"suggestion\":\"正しいエピソード総数を設定してください\"},\"TOTAL_FRAMES_INVALID\":{\"message\":\"total_frames は正の整数である必要があります\",\"suggestion\":\"正しいフレーム総数を設定してください\"},\"TOTAL_TASKS_INVALID\":{\"message\":\"total_tasks は 0 以上の整数である必要があります\",\"suggestion\":\"正しいタスク総数を設定してください(0 可)\"},\"FPS_INVALID\":{\"message\":\"fps は正の数である必要があります\",\"suggestion\":\"正しい FPS を設定してください(例: 30)\"},\"CHUNKS_SIZE_MISSING\":{\"message\":\"chunks_size が未設定です。デフォルト 1000 を使用します\",\"suggestion\":\"chunks_size フィールドを追加してください(推奨: 1000)\"},\"FEATURES_EMPTY\":{\"message\":\"features が未設定または空です\",\"suggestion\":\"info.json の features にデータセットの全カラムを定義してください\"},\"EPISODES_MISSING\":{\"message\":\"meta/episodes.jsonl が存在しないか読み取れません\",\"suggestion\":\"1 行 1 エピソードの JSON で meta/episodes.jsonl を作成してください\"},\"EPISODES_INVALID_JSONL\":{\"message\":\"episodes.jsonl の行の JSON 解析に失敗しました\",\"suggestion\":\"各行が有効な JSON オブジェクトであることを確認してください\"},\"EPISODES_EMPTY\":{\"message\":\"episodes.jsonl は空です\",\"suggestion\":\"episodes.jsonl にデータがあることを確認してください\"},\"EPISODES_COUNT_MISMATCH\":{\"message\":\"解析したエピソード数({{parsed}})が total_episodes({{expected}})と一致しません\",\"suggestion\":\"episodes.jsonl を再生成するか info.json の total_episodes を修正してください\"},\"ZERO_LENGTH_EPISODES\":{\"message\":\"{{count}} 件のエピソードの長さが 0 です\",\"suggestion\":\"各エピソードが正のフレーム数を持つよう episodes.jsonl を再生成してください\"},\"EPISODES_NO_LENGTH\":{\"message\":\"{{count}} 件のエピソードに length/num_frames がありません\",\"suggestion\":\"episodes.jsonl の各行に \\\"length\\\" を追加してください\"},\"TASKS_MISSING\":{\"message\":\"meta/tasks.jsonl が存在しないか空です\",\"suggestion\":\"1 行 1 JSON で tasks.jsonl を作成: {\\\"task_index\\\": 0, \\\"task\\\": \\\"説明\\\"}\"},\"DATA_FILE_MISSING\":{\"message\":\"データファイルが存在しません\",\"suggestion\":\"v2 形式で data/ に Parquet ファイルを生成してください\"},\"DATA_FILE_CHECK_FAILED\":{\"message\":\"データファイルの存在を確認できませんでした\",\"suggestion\":\"data/chunk-xxx/episode_xxxxxx.parquet が存在することを確認してください\"},\"VIDEO_FILE_MISSING\":{\"message\":\"動画ファイルが存在しません\",\"suggestion\":\"videos/chunk-xxx/<key>/episode_xxxxxx.mp4 を生成してください\"},\"VIDEO_FILE_CHECK_FAILED\":{\"message\":\"動画ファイルの存在を確認できませんでした\",\"suggestion\":\"videos/chunk-xxx/<key>/episode_xxxxxx.mp4 が存在することを確認してください\"},\"PARQUET_MISSING_COLS\":{\"message\":\"データ Parquet に必須カラムがありません: {{cols}}\",\"suggestion\":\"システムカラムを含むデータ Parquet を再生成してください\"},\"DEFAULT_FEATURE_MISSING\":{\"message\":\"システムフィールド {{key}} がありません\",\"suggestion\":\"meta/info.json の features に \\\"{{key}}\\\" を追加してください\"},\"FEATURE_INVALID\":{\"message\":\"features.{{key}} は有効なオブジェクトではありません\",\"suggestion\":\"各 feature が dtype と shape を持つオブジェクトであることを確認してください\"},\"DTYPE_MISSING\":{\"message\":\"features.{{key}}.dtype がありません\",\"suggestion\":\"dtype を追加してください(例: float32, int64, video, image, string)\"},\"DTYPE_INVALID\":{\"message\":\"features.{{key}}.dtype が無効です: {{dtype}}\",\"suggestion\":\"標準の dtype を使用してください\"},\"SHAPE_INVALID\":{\"message\":\"features.{{key}}.shape は正の整数の非空配列である必要があります\",\"suggestion\":\"shape を設定してください(例: [7], [3, 480, 640])\"},\"NAMES_INVALID\":{\"message\":\"features.{{key}}.names は配列ではありません\",\"suggestion\":\"names を文字列配列または null に設定してください\"},\"NAMES_LENGTH_MISMATCH\":{\"message\":\"features.{{key}}.names の長さ({{actual}})が shape の最終次元({{expected}})と一致しません\",\"suggestion\":\"names の長さを shape の最終次元と一致させてください\"},\"VIDEO_FPS_MISSING\":{\"message\":\"動画 feature {{key}} の fps が未設定または ≤0 です。info.fps を使用します\",\"suggestion\":\"オプション: この feature に fps を設定。未設定の場合は info.fps を使用\"},\"VIDEO_SHAPE_CHANNELS\":{\"message\":\"動画の shape チャンネル数が一般的ではありません\",\"suggestion\":\"通常は 3(RGB)です。[C,H,W] と [H,W,C] の両方に対応\"},\"VIDEO_SHAPE_NDIM\":{\"message\":\"動画 shape は 3D (C, H, W) である必要があります。現在 {{n}}D です\",\"suggestion\":\"shape を [C, H, W] に設定してください\"},\"IMAGE_SHAPE_NDIM\":{\"message\":\"画像 shape は 3D (C, H, W) である必要があります。現在 {{n}}D です\",\"suggestion\":\"shape を [C, H, W] に設定してください\"},\"EPISODES_PARQUET_MISSING\":{\"message\":\"meta/episodes の最初のファイルが存在しません\",\"suggestion\":\"v3 形式で meta/episodes/chunk-xxx/file-xxx.parquet を生成してください\"},\"EPISODES_PARQUET_INVALID\":{\"message\":\"meta/episodes の最初のファイルを Parquet として解析できませんでした\",\"suggestion\":\"episodes Parquet ファイルが有効であることを確認してください\"},\"DATA_PATH_TEMPLATE\":{\"message\":\"info.data_path がデフォルトテンプレートと一致しません\",\"suggestion\":\"デフォルトの data パステンプレートを使用するか、カスタムパスを一貫させてください\"},\"VIDEO_PATH_TEMPLATE\":{\"message\":\"info.video_path がデフォルトテンプレートと一致しません\",\"suggestion\":\"デフォルトの動画パステンプレートを使用してください\"},\"TASKS_PRESENT\":{\"message\":\"タスクメタデータを検出しました\",\"suggestion\":\"\"},\"EPISODE_COUNT\":{\"message\":\"{{count}} 件のエピソードを解析しました\",\"suggestion\":\"\"},\"TASK_COUNT\":{\"message\":\"{{count}} 件のタスクを解析しました\",\"suggestion\":\"\"},\"SPLITS_MISSING_TRAIN\":{\"message\":\"splits に \\\"train\\\" が必要です\",\"suggestion\":\"splits に少なくとも \\\"train\\\" キーを追加してください\"}}}}"),
|
|
4495
4485
|
summary: {
|
|
4496
4486
|
noData: "データセットを読み込むと概要を表示します",
|
|
4497
4487
|
overview: "概要",
|