omni-viewer-core 0.12.1 → 0.14.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.
Files changed (59) hide show
  1. package/README.md +58 -1
  2. package/THIRD_PARTY_NOTICES.md +8 -0
  3. package/dist/assets/audio-engine/audio_engine_worker.mjs +84 -0
  4. package/dist/i18n/catalog.de.js +9 -0
  5. package/dist/i18n/catalog.en.js +102 -0
  6. package/dist/i18n/catalog.fr.js +9 -0
  7. package/dist/i18n/catalog.it.js +9 -0
  8. package/dist/i18n/catalog.ja.js +102 -0
  9. package/dist/i18n/catalog.ko.js +102 -0
  10. package/dist/i18n/catalog.th.js +9 -0
  11. package/dist/i18n/catalog.zh-cn.js +100 -0
  12. package/dist/parsers/gguf/index.d.ts +116 -0
  13. package/dist/parsers/gguf/index.js +1186 -0
  14. package/dist/parsers/gguf/node.d.ts +5 -0
  15. package/dist/parsers/gguf/node.js +55 -0
  16. package/dist/parsers/onnx/index.d.ts +176 -0
  17. package/dist/parsers/onnx/index.js +1081 -0
  18. package/dist/parsers/tflite/index.d.ts +148 -0
  19. package/dist/parsers/tflite/index.js +953 -0
  20. package/dist/registry/index.d.ts +6 -0
  21. package/dist/registry/index.js +14 -3
  22. package/dist/styles/audio.css +41 -0
  23. package/dist/styles/gguf.css +3 -0
  24. package/dist/styles/onnx.css +4 -0
  25. package/dist/styles/tflite.css +3 -0
  26. package/dist/viewers/audio/controller.d.ts +75 -1
  27. package/dist/viewers/audio/controller.js +124 -2
  28. package/dist/viewers/audio/engine.d.ts +23 -0
  29. package/dist/viewers/audio/engine.js +26 -0
  30. package/dist/viewers/audio/index.d.ts +57 -10
  31. package/dist/viewers/audio/index.js +450 -48
  32. package/dist/viewers/audio/mp3-demux.d.ts +41 -0
  33. package/dist/viewers/audio/mp3-demux.js +143 -0
  34. package/dist/viewers/audio/pyramid.d.ts +59 -0
  35. package/dist/viewers/audio/pyramid.js +205 -0
  36. package/dist/viewers/audio/self-loading.d.ts +23 -2
  37. package/dist/viewers/audio/self-loading.js +75 -5
  38. package/dist/viewers/audio/styles.js +41 -0
  39. package/dist/viewers/audio/wav-analyzer.d.ts +35 -0
  40. package/dist/viewers/audio/wav-analyzer.js +76 -0
  41. package/dist/viewers/audio/wav-stream.d.ts +29 -0
  42. package/dist/viewers/audio/wav-stream.js +144 -0
  43. package/dist/viewers/audio/webcodecs-decoder.d.ts +70 -0
  44. package/dist/viewers/audio/webcodecs-decoder.js +115 -0
  45. package/dist/viewers/audio/worker-engine.d.ts +37 -0
  46. package/dist/viewers/audio/worker-engine.js +150 -0
  47. package/dist/viewers/gguf/index.d.ts +27 -0
  48. package/dist/viewers/gguf/index.js +211 -0
  49. package/dist/viewers/gguf/styles.d.ts +1 -0
  50. package/dist/viewers/gguf/styles.js +4 -0
  51. package/dist/viewers/onnx/index.d.ts +18 -0
  52. package/dist/viewers/onnx/index.js +610 -0
  53. package/dist/viewers/onnx/styles.d.ts +1 -0
  54. package/dist/viewers/onnx/styles.js +5 -0
  55. package/dist/viewers/tflite/index.d.ts +18 -0
  56. package/dist/viewers/tflite/index.js +619 -0
  57. package/dist/viewers/tflite/styles.d.ts +1 -0
  58. package/dist/viewers/tflite/styles.js +4 -0
  59. package/package.json +167 -36
package/README.md CHANGED
@@ -15,7 +15,8 @@ models, viewers mount into a DOM element, and everything host-specific
15
15
  - **Documents** — PDF, Word (DOCX and legacy DOC), HWP, PowerPoint (PPTX and
16
16
  legacy PPT), Markdown, LaTeX (structure and math preview, not typesetting)
17
17
  - **Data & spreadsheets** — Excel, CSV/TSV, JSON, JSONL/NDJSON, YAML, TOML,
18
- Parquet, Avro, HDF5, MATLAB MAT, Safetensors, Protocol Buffers, ReqIF, SQLite
18
+ Parquet, Avro, HDF5, MATLAB MAT, Safetensors, GGUF, ONNX, TFLite/LiteRT,
19
+ Protocol Buffers, ReqIF, SQLite
19
20
  - **Media & graphics** — audio (waveform/spectrogram), video, images,
20
21
  Photoshop PSD
21
22
  - **Engineering & automotive** — CAN DBC, AUTOSAR ARXML, ASAM A2L, Vector
@@ -83,6 +84,62 @@ Node hosts can use `parseSafetensorsFile` from
83
84
  with `mountSafetensorsDocument`. The legacy `Uint8Array` input remains
84
85
  available, but it requires the host to load the complete file first.
85
86
 
87
+ ### GGUF metadata and tensor index
88
+
89
+ GGUF parsing delegates to `@huggingface/gguf`, then normalizes its bigint and
90
+ large-array values into an Omni Viewer JSON-safe document. Node hosts can parse
91
+ a local model without loading tensor payloads and mount the result separately:
92
+
93
+ ```ts
94
+ import { parseGgufFile } from 'omni-viewer-core/parsers/gguf/node';
95
+ import { mountGgufDocument } from 'omni-viewer-core/viewers/gguf';
96
+
97
+ const document = await parseGgufFile('/models/model.gguf');
98
+ mountGgufDocument(document, 'model.gguf', container, ctx);
99
+ ```
100
+
101
+ Remote hosts can use `parseGgufUri` from `omni-viewer-core/parsers/gguf`.
102
+ Browser and file-picker hosts can pass the common `{ fileName, data }`
103
+ `ViewerInput` directly to `mountGgufViewer`; the byte input is exposed to the
104
+ same upstream parser through an in-memory range source.
105
+ Tokenizer arrays are represented by bounded previews in the normalized model;
106
+ the viewer provides searchable tensor/metadata tables, structure preview, and
107
+ JSON copy. Node.js 20 or later is required.
108
+
109
+ ### ONNX computation graphs
110
+
111
+ The ONNX parser reads the protobuf `ModelProto` directly without a runtime
112
+ dependency. Tensor payload bytes are skipped while graph topology, operators,
113
+ attributes, shapes, opsets, metadata, and external-data locations are retained:
114
+
115
+ ```ts
116
+ import { mountOnnxViewer } from 'omni-viewer-core/viewers/onnx';
117
+
118
+ await mountOnnxViewer({ fileName: file.name, data: bytes }, container, ctx);
119
+ ```
120
+
121
+ The viewer provides a connected computation graph with node inspection plus
122
+ searchable node, initializer, input/output, and model-information panels.
123
+
124
+ ### TFLite / LiteRT models
125
+
126
+ The TFLite parser reads the `TFL3` FlatBuffer directly — no schema compiler and
127
+ no runtime dependency. Buffer payloads stay unread while subgraph topology,
128
+ operator codes, decoded builtin options, tensor types, shapes, quantization,
129
+ sparsity, signature definitions, and metadata are retained:
130
+
131
+ ```ts
132
+ import { mountTfliteViewer } from 'omni-viewer-core/viewers/tflite';
133
+
134
+ await mountTfliteViewer({ fileName: file.name, data: bytes }, container, ctx);
135
+ ```
136
+
137
+ The viewer provides a per-subgraph computation graph with operator and tensor
138
+ inspection, navigation into the subgraphs a control-flow operator references,
139
+ and searchable operator, tensor, input/output, buffer, and model-information
140
+ panels. Custom operators, Select TensorFlow fallbacks, and buffers stored
141
+ outside the FlatBuffer are surfaced as warnings.
142
+
86
143
  ### Archive host integration
87
144
 
88
145
  Archive decompression remains adapter-owned: pass an `ArchiveDecoder` to
@@ -2,6 +2,14 @@
2
2
 
3
3
  This distribution includes the following third-party software.
4
4
 
5
+ ## Hugging Face GGUF parser
6
+
7
+ - Project: `@huggingface/gguf` and `@huggingface/tasks`
8
+ - Copyright: Hugging Face and contributors
9
+ - License: MIT
10
+ - Use: GGUF metadata and tensor-index parsing
11
+ - Source: https://github.com/huggingface/huggingface.js
12
+
5
13
  ## PDF.js
6
14
 
7
15
  - Project: PDF.js (`pdfjs-dist`)
@@ -0,0 +1,84 @@
1
+ // Worker shell for the WASM audio engine. Deliberately dumb: it owns no
2
+ // decode logic, only the message plumbing, because everything here is outside
3
+ // the TypeScript build and therefore untypechecked and untested. The engine
4
+ // entry points it calls are the same ones viewers/audio/engine.ts calls
5
+ // directly on the main thread.
6
+ //
7
+ // Shipped as an asset (see scripts/build-styles.mjs) and resolved through
8
+ // AssetService, matching how pdf.js's worker is delivered.
9
+ //
10
+ // The module and wasm URLs arrive in the `init` message rather than being
11
+ // resolved relative to this file: adapters that serve the core from blob URLs
12
+ // (obsidian) have no usable sibling paths.
13
+
14
+ let modulePromise;
15
+
16
+ function loadModule(moduleUrl, wasmUrl) {
17
+ modulePromise ??= import(moduleUrl).then((mod) => mod.default({ locateFile: () => wasmUrl }));
18
+ return modulePromise;
19
+ }
20
+
21
+ function openAudio(module, bytes) {
22
+ const pointer = module._malloc(bytes.byteLength);
23
+ module.HEAPU8.set(bytes, pointer);
24
+ const handle = module._decode_audio(pointer, bytes.byteLength);
25
+ module._free(pointer);
26
+ if (!handle) throw new Error('audio engine: unsupported or corrupted stream');
27
+ return {
28
+ handle,
29
+ channels: module._audio_get_channels(handle),
30
+ sampleRate: module._audio_get_sample_rate(handle),
31
+ frames: (module._audio_get_total_frames(handle) >>> 0)
32
+ + module._audio_get_total_frames_high(handle) * 2 ** 32
33
+ };
34
+ }
35
+
36
+ function analyze(module, bytes, width) {
37
+ const audio = openAudio(module, bytes);
38
+ try {
39
+ const columns = Math.max(1, Math.floor(width));
40
+ const peaksPointer = module._generate_peaks(audio.handle, columns) >>> 0;
41
+ if (!peaksPointer) throw new Error('audio engine: peaks generation failed');
42
+ const peaks = [...new Float32Array(module.HEAPF32.buffer, peaksPointer, columns)];
43
+ module._free_buffer(peaksPointer);
44
+ return {
45
+ sampleRate: audio.sampleRate,
46
+ channels: audio.channels,
47
+ duration: audio.sampleRate > 0 ? audio.frames / audio.sampleRate : 0,
48
+ peaks
49
+ };
50
+ } finally {
51
+ module._free_audio(audio.handle);
52
+ }
53
+ }
54
+
55
+ function decode(module, bytes) {
56
+ const audio = openAudio(module, bytes);
57
+ try {
58
+ const samplesPointer = module.getValue(audio.handle, 'i32') >>> 0;
59
+ const length = audio.frames * audio.channels;
60
+ const pcm = new Float32Array(module.HEAPF32.buffer, samplesPointer, length).slice();
61
+ return { sampleRate: audio.sampleRate, channels: audio.channels, frames: audio.frames, pcm };
62
+ } finally {
63
+ module._free_audio(audio.handle);
64
+ }
65
+ }
66
+
67
+ self.onmessage = async (event) => {
68
+ const { id, op, moduleUrl, wasmUrl, bytes, width } = event.data;
69
+ try {
70
+ const module = await loadModule(moduleUrl, wasmUrl);
71
+ if (op === 'analyze') {
72
+ self.postMessage({ id, ok: true, result: analyze(module, bytes, width) });
73
+ } else if (op === 'decode') {
74
+ const result = decode(module, bytes);
75
+ // The PCM is freshly copied here and never touched again, so it can
76
+ // be transferred instead of structured-cloned.
77
+ self.postMessage({ id, ok: true, result }, [result.pcm.buffer]);
78
+ } else {
79
+ throw new Error(`audio engine worker: unknown op ${String(op)}`);
80
+ }
81
+ } catch (error) {
82
+ self.postMessage({ id, ok: false, error: error instanceof Error ? error.message : String(error) });
83
+ }
84
+ };
@@ -4,15 +4,24 @@ export const CATALOG_DE = {
4
4
  'audio.title': 'Audio', 'video.title': 'Video', 'dbc.title': 'CAN-Datenbank',
5
5
  'audio.play': 'Wiedergabe', 'audio.pause': 'Pause', 'audio.stop': 'Stopp',
6
6
  'audio.loop': 'Schleife', 'audio.clearRegions': 'Bereiche löschen', 'audio.volume': 'Lautstärke',
7
+ 'audio.region.start': 'Bereichsstart (s)', 'audio.region.end': 'Bereichsende (s)', 'audio.region.duration': 'Bereichslänge (s)',
7
8
  'audio.zoom': 'Zoom', 'audio.zoomIn': 'Vergrößern', 'audio.zoomOut': 'Verkleinern', 'audio.zoomFit': 'Anpassen',
8
9
  'audio.visualization': 'Ansicht', 'audio.vis.waveform': 'Wellenform', 'audio.vis.spectrogram': 'Spektrogramm',
10
+ 'audio.vis.both': 'Beide', 'audio.download': 'Herunterladen',
11
+ 'audio.spectrogramScale': 'Skala',
12
+ 'audio.scale.linear': 'Linear', 'audio.scale.mel': 'Mel', 'audio.scale.bark': 'Bark', 'audio.scale.erb': 'ERB',
13
+ 'audio.error.save': 'Die Audiodatei konnte nicht gespeichert werden.',
9
14
  'audio.info.duration': 'Dauer', 'audio.info.sampleRate': 'Abtastrate', 'audio.info.channels': 'Kanäle',
15
+ 'audio.info.channelLevels': 'L Spitze {leftPeak}, RMS {leftRms} | R Spitze {rightPeak}, RMS {rightRms}',
10
16
  'audio.info.bitDepth': 'Bittiefe', 'audio.info.format': 'Format', 'audio.info.fileSize': 'Dateigröße',
11
17
  'audio.loading': 'Audio wird dekodiert…',
12
18
  'audio.status.region': 'Bereich {start} – {end} ({duration} s)',
13
19
  'audio.status.looping': 'Bereich wird wiederholt', 'audio.status.loopTrack': 'Titel wird wiederholt',
14
20
  'audio.fallback': 'Wellenform-Engine nicht verfügbar – der einfache Player wird verwendet.',
15
21
  'audio.error.decode': 'Der Browser konnte diesen Audio-Codec nicht dekodieren. Verwenden Sie einen Host mit dem erforderlichen Codec oder transkodieren Sie die Datei.',
22
+ 'audio.warning.analysisFailed': 'Die Wellenform-Voranalyse ist fehlgeschlagen — es wird auf die vollständige Browser-Dekodierung zurückgegriffen, die bei einer Datei dieser Größe langsam sein kann.',
23
+ 'audio.warning.analysisSkipped': 'Die Wellenform-Voranalyse ist für dieses Format nicht verfügbar — es wird auf die vollständige Browser-Dekodierung zurückgegriffen, die bei einer Datei dieser Größe langsam sein kann.',
24
+ 'audio.vis.unavailableLarge': 'Das Spektrogramm ist für große Dateien, die aus vorberechneten Spitzenwerten gerendert werden, nicht verfügbar.',
16
25
  'video.play': 'Wiedergabe', 'video.pause': 'Pause', 'video.stop': 'Stopp',
17
26
  'video.skipBack': '⏪ -{seconds} s', 'video.skipForward': '⏩ +{seconds} s',
18
27
  'video.speed': 'Geschwindigkeit', 'video.zoom': 'Zoom', 'video.zoomIn': 'Vergrößern',
@@ -7,15 +7,24 @@ export const CATALOG_EN = {
7
7
  'audio.title': 'Audio', 'video.title': 'Video', 'dbc.title': 'CAN database',
8
8
  'audio.play': 'Play', 'audio.pause': 'Pause', 'audio.stop': 'Stop',
9
9
  'audio.loop': 'Loop', 'audio.clearRegions': 'Clear regions', 'audio.volume': 'Volume',
10
+ 'audio.region.start': 'Region start (s)', 'audio.region.end': 'Region end (s)', 'audio.region.duration': 'Region length (s)',
10
11
  'audio.zoom': 'Zoom', 'audio.zoomIn': 'Zoom in', 'audio.zoomOut': 'Zoom out', 'audio.zoomFit': 'Fit',
11
12
  'audio.visualization': 'View', 'audio.vis.waveform': 'Waveform', 'audio.vis.spectrogram': 'Spectrogram',
13
+ 'audio.vis.both': 'Both', 'audio.download': 'Download',
14
+ 'audio.spectrogramScale': 'Scale',
15
+ 'audio.scale.linear': 'Linear', 'audio.scale.mel': 'Mel', 'audio.scale.bark': 'Bark', 'audio.scale.erb': 'ERB',
16
+ 'audio.error.save': 'Saving the audio file failed.',
12
17
  'audio.info.duration': 'Duration', 'audio.info.sampleRate': 'Sample rate', 'audio.info.channels': 'Channels',
18
+ 'audio.info.channelLevels': 'L peak {leftPeak}, RMS {leftRms} | R peak {rightPeak}, RMS {rightRms}',
13
19
  'audio.info.bitDepth': 'Bit depth', 'audio.info.format': 'Format', 'audio.info.fileSize': 'File size',
14
20
  'audio.loading': 'Decoding audio…',
15
21
  'audio.status.region': 'Region {start} – {end} ({duration}s)',
16
22
  'audio.status.looping': 'looping region', 'audio.status.loopTrack': 'Looping track',
17
23
  'audio.fallback': 'Waveform engine unavailable — using the basic player.',
18
24
  'audio.error.decode': 'The browser could not decode this audio codec. Try a host with the required codec or transcode the file.',
25
+ 'audio.warning.analysisFailed': 'Waveform pre-analysis failed — falling back to a full browser decode, which may be slow for a file this large.',
26
+ 'audio.warning.analysisSkipped': 'Waveform pre-analysis is unavailable for this format — falling back to a full browser decode, which may be slow for a file this large.',
27
+ 'audio.vis.unavailableLarge': 'Spectrogram is unavailable for large files rendered from precomputed peaks.',
19
28
  'video.play': 'Play', 'video.pause': 'Pause', 'video.stop': 'Stop',
20
29
  'video.skipBack': '⏪ -{seconds}s', 'video.skipForward': '⏩ +{seconds}s',
21
30
  'video.speed': 'Speed', 'video.zoom': 'Zoom', 'video.zoomIn': 'Zoom in',
@@ -59,6 +68,99 @@ export const CATALOG_EN = {
59
68
  'safetensors.structure': 'Structure', 'safetensors.noData': 'No data available.',
60
69
  'safetensors.matchingRows': '{count} matching rows',
61
70
  'safetensors.matchingRowsLimited': '{visible} / {total} matching rows shown',
71
+ 'gguf.title': 'GGUF', 'gguf.search': 'Search metadata and tensors…', 'gguf.copyJson': 'Copy JSON',
72
+ 'gguf.structure': 'Structure', 'gguf.noData': 'No data available.',
73
+ 'gguf.matchingRows': '{count} matching rows',
74
+ 'gguf.matchingRowsLimited': '{visible} / {total} matching rows shown',
75
+ 'gguf.summary.version': 'Version', 'gguf.summary.architecture': 'Architecture', 'gguf.summary.type': 'Type',
76
+ 'gguf.summary.tensors': 'Tensors', 'gguf.summary.parameters': 'Parameters',
77
+ 'gguf.summary.quantization': 'Quantization', 'gguf.summary.metadataKeys': 'Metadata keys', 'gguf.summary.status': 'Status',
78
+ 'gguf.table.tensors': 'Tensors ({count})', 'gguf.table.metadata': 'Metadata ({count})',
79
+ 'gguf.column.name': 'Name', 'gguf.column.dtype': 'Dtype', 'gguf.column.shape': 'Shape',
80
+ 'gguf.column.parameters': 'Parameters', 'gguf.column.offset': 'Offset', 'gguf.column.key': 'Key',
81
+ 'gguf.column.type': 'Type', 'gguf.column.value': 'Value',
82
+ 'gguf.warning.invalid': 'This GGUF file is invalid or unsupported.',
83
+ 'gguf.warning.unverifiedDtype': 'Some tensors use an unrecognized storage dtype; their payload ends could not be verified.',
84
+ 'gguf.warning.metadataCountMismatch': 'The declared metadata count does not match the parsed metadata entries.',
85
+ 'gguf.warning.tensorsLimited': 'Showing the first {shown} of {total} tensors to limit memory use.',
86
+ 'gguf.warning.metadataLimited': 'Showing the first {shown} of {total} metadata entries to limit memory use.',
87
+ 'gguf.warning.textTruncated': 'Some text was truncated by per-field limits or the normalized GGUF character budget.',
88
+ 'gguf.warning.metadataTooLarge': 'This file’s metadata is too large to parse in full, so only key previews are shown and the tensor list is unavailable.',
89
+ 'onnx.title': 'ONNX model', 'onnx.search': 'Search graph, nodes, and tensors…', 'onnx.copyJson': 'Copy JSON',
90
+ 'onnx.graph': 'Graph', 'onnx.nodes': 'Nodes', 'onnx.tensors': 'Tensors', 'onnx.io': 'Inputs & Outputs',
91
+ 'onnx.modelInfo': 'Model Info', 'onnx.rows': '{shown} / {total} rows shown', 'onnx.noMatches': 'No rows match the current search.',
92
+ 'onnx.selectNode': 'Select a graph node to inspect it.', 'onnx.graphLimited': 'Graph preview shows {shown} of {total} items.',
93
+ 'onnx.summary.nodes': 'Nodes', 'onnx.summary.initializers': 'Initializers', 'onnx.summary.inputs': 'Inputs',
94
+ 'onnx.summary.outputs': 'Outputs', 'onnx.summary.functions': 'Functions', 'onnx.summary.irVersion': 'IR version',
95
+ 'onnx.warning.noOpset': 'The model does not declare an operator-set import.',
96
+ 'onnx.warning.emptyGraph': 'The model graph contains no computation nodes.',
97
+ 'onnx.warning.externalData': '{count} tensor(s) reference external data that is not loaded by this viewer.',
98
+ 'onnx.column.index': '#', 'onnx.column.name': 'Name', 'onnx.column.operator': 'Operator', 'onnx.column.domain': 'Domain',
99
+ 'onnx.column.overload': 'Overload', 'onnx.column.inputs': 'Inputs', 'onnx.column.outputs': 'Outputs',
100
+ 'onnx.column.attributes': 'Attributes', 'onnx.column.type': 'Type', 'onnx.column.shape': 'Shape',
101
+ 'onnx.column.elements': 'Elements', 'onnx.column.dataSize': 'Data size', 'onnx.column.storage': 'Storage',
102
+ 'onnx.column.kind': 'Kind', 'onnx.column.typeShape': 'Type / Shape', 'onnx.column.description': 'Description',
103
+ 'onnx.column.metadata': 'Metadata',
104
+ 'onnx.storage.dense.embedded': 'Dense · embedded', 'onnx.storage.dense.external': 'Dense · external',
105
+ 'onnx.storage.sparse.embedded': 'Sparse · embedded', 'onnx.storage.sparse.external': 'Sparse · external',
106
+ 'onnx.kind.input': 'Input', 'onnx.kind.output': 'Output', 'onnx.kind.value': 'Value',
107
+ 'onnx.scalar': 'scalar', 'onnx.optional': 'optional',
108
+ 'onnx.info.graph': 'Graph', 'onnx.info.irVersion': 'IR version', 'onnx.info.modelVersion': 'Model version',
109
+ 'onnx.info.producer': 'Producer', 'onnx.info.domain': 'Domain', 'onnx.info.opsets': 'Operator sets',
110
+ 'onnx.info.description': 'Description', 'onnx.info.functions': 'Local functions', 'onnx.info.graphMetadata': 'Graph',
111
+ 'onnx.inspector.inputs': 'Inputs', 'onnx.inspector.outputs': 'Outputs', 'onnx.inspector.attributes': 'Attributes',
112
+ 'onnx.inspector.description': 'Description',
113
+ 'onnx.graphEdgesLimited': 'Only the first {count} connections are shown.', 'onnx.moreItems': '{count} more…',
114
+ 'onnx.unknown': 'Unknown', 'onnx.graphSummary': '{name} · {count} nodes',
115
+ 'onnx.sparseSummary': '{type}[{shape}] · {count} non-zero',
116
+ 'onnx.info.training': 'Training graphs', 'onnx.info.configurations': 'Device configurations',
117
+ 'onnx.info.quantization': 'Quantization annotations', 'onnx.info.deviceConfiguration': 'Device configuration',
118
+ 'onnx.info.pipelineStage': 'pipeline stage',
119
+ 'tflite.title': 'TFLite model', 'tflite.search': 'Search operators, tensors, and buffers…',
120
+ 'tflite.copyJson': 'Copy JSON', 'tflite.subgraph': 'Subgraph', 'tflite.unnamed': 'unnamed',
121
+ 'tflite.graph': 'Graph', 'tflite.operators': 'Operators', 'tflite.tensors': 'Tensors',
122
+ 'tflite.io': 'Inputs & Outputs', 'tflite.buffers': 'Buffers', 'tflite.modelInfo': 'Model Info',
123
+ 'tflite.rows': '{shown} / {total} rows shown', 'tflite.noMatches': 'No rows match the current search.',
124
+ 'tflite.selectNode': 'Select an operator or tensor to inspect it.',
125
+ 'tflite.graphLimited': 'Graph preview shows {shown} of {total} items.',
126
+ 'tflite.graphEdgesLimited': 'Only the first {count} connections are shown.',
127
+ 'tflite.moreItems': '{count} more…', 'tflite.runtime': 'runtime {version}', 'tflite.schema': 'schema v{version}',
128
+ 'tflite.scalar': 'scalar', 'tflite.unknownRank': 'unknown rank', 'tflite.optional': 'optional', 'tflite.variable': 'Variable',
129
+ 'tflite.opDetail': '#{index} · v{version}', 'tflite.customBytes': '{bytes} bytes of custom options',
130
+ 'tflite.binaryBuffer': 'binary, {bytes} in buffer {buffer}',
131
+ 'tflite.summary.operators': 'Operators', 'tflite.summary.tensors': 'Tensors',
132
+ 'tflite.summary.subgraphs': 'Subgraphs', 'tflite.summary.operatorCodes': 'Operator codes',
133
+ 'tflite.summary.weights': 'Weights', 'tflite.summary.version': 'Schema version',
134
+ 'tflite.warning.identifier': 'The file identifier is {identifier} rather than the expected TFL3.',
135
+ 'tflite.warning.version': 'The model declares schema version {version}; this viewer targets version 3.',
136
+ 'tflite.warning.noSubgraphs': 'The model contains no subgraphs.',
137
+ 'tflite.warning.emptyGraph': 'The model subgraphs contain no operators.',
138
+ 'tflite.warning.customOps': '{count} custom operator(s) require a matching runtime registration: {names}',
139
+ 'tflite.warning.flexOps': '{count} operator(s) fall back to Select TensorFlow ops.',
140
+ 'tflite.warning.appendedBuffers': '{count} buffer(s) store their payload outside the FlatBuffer.',
141
+ 'tflite.column.index': '#', 'tflite.column.name': 'Name', 'tflite.column.operator': 'Operator',
142
+ 'tflite.column.kind': 'Kind', 'tflite.column.version': 'Version', 'tflite.column.inputs': 'Inputs',
143
+ 'tflite.column.outputs': 'Outputs', 'tflite.column.optionsType': 'Options type', 'tflite.column.options': 'Options',
144
+ 'tflite.column.type': 'Type', 'tflite.column.shape': 'Shape', 'tflite.column.elements': 'Elements',
145
+ 'tflite.column.dataSize': 'Data size', 'tflite.column.storage': 'Storage',
146
+ 'tflite.column.quantization': 'Quantization', 'tflite.column.variable': 'Variable',
147
+ 'tflite.column.signature': 'Signature', 'tflite.column.typeShape': 'Type / Shape',
148
+ 'tflite.column.tensorIndex': 'Tensor', 'tflite.column.fileOffset': 'File offset',
149
+ 'tflite.column.usedBy': 'Used by', 'tflite.column.buffer': 'Buffer',
150
+ 'tflite.storage.empty': 'Runtime', 'tflite.storage.inline': 'Inline', 'tflite.storage.appended': 'Appended',
151
+ 'tflite.kind.builtin': 'Builtin', 'tflite.kind.custom': 'Custom', 'tflite.kind.input': 'Input',
152
+ 'tflite.kind.output': 'Output', 'tflite.kind.signatureInput': 'Signature input',
153
+ 'tflite.kind.signatureOutput': 'Signature output',
154
+ 'tflite.info.description': 'Description', 'tflite.info.schemaVersion': 'Schema version',
155
+ 'tflite.info.identifier': 'File identifier', 'tflite.info.minRuntime': 'Minimum runtime',
156
+ 'tflite.info.fileSize': 'File size', 'tflite.info.weights': 'Weight bytes',
157
+ 'tflite.info.subgraphs': 'Subgraphs', 'tflite.info.signatures': 'Signatures',
158
+ 'tflite.info.operatorCode': 'Operator code', 'tflite.info.metadata': 'Metadata',
159
+ 'tflite.info.expectedSize': 'Expected size', 'tflite.info.shapeSignature': 'Shape signature',
160
+ 'tflite.info.sparsity': 'Sparsity', 'tflite.info.traversalOrder': 'Traversal order',
161
+ 'tflite.inspector.inputs': 'Inputs', 'tflite.inspector.outputs': 'Outputs',
162
+ 'tflite.inspector.intermediates': 'Intermediates', 'tflite.inspector.options': 'Options',
163
+ 'tflite.inspector.customOptions': 'Custom options', 'tflite.inspector.subgraphs': 'Referenced subgraphs',
62
164
  'proto.title': 'Protocol Buffer', 'proto.summary': '{syntax} · {package} · {messages} messages · {services} services',
63
165
  'proto.noPackage': 'no package', 'proto.search': 'Search message, field, enum, RPC', 'proto.copyPanel': 'Copy panel',
64
166
  'proto.panel.tree': 'Message Tree', 'proto.panel.types': 'Types', 'proto.panel.relationships': 'Relationships',
@@ -4,15 +4,24 @@ export const CATALOG_FR = {
4
4
  'audio.title': 'Audio', 'video.title': 'Vidéo', 'dbc.title': 'Base de données CAN',
5
5
  'audio.play': 'Lecture', 'audio.pause': 'Pause', 'audio.stop': 'Arrêt',
6
6
  'audio.loop': 'Boucle', 'audio.clearRegions': 'Effacer les régions', 'audio.volume': 'Volume',
7
+ 'audio.region.start': 'Début de la région (s)', 'audio.region.end': 'Fin de la région (s)', 'audio.region.duration': 'Durée de la région (s)',
7
8
  'audio.zoom': 'Zoom', 'audio.zoomIn': 'Zoom avant', 'audio.zoomOut': 'Zoom arrière', 'audio.zoomFit': 'Ajuster',
8
9
  'audio.visualization': 'Affichage', 'audio.vis.waveform': 'Forme d’onde', 'audio.vis.spectrogram': 'Spectrogramme',
10
+ 'audio.vis.both': 'Les deux', 'audio.download': 'Télécharger',
11
+ 'audio.spectrogramScale': 'Échelle',
12
+ 'audio.scale.linear': 'Linéaire', 'audio.scale.mel': 'Mel', 'audio.scale.bark': 'Bark', 'audio.scale.erb': 'ERB',
13
+ 'audio.error.save': 'L’enregistrement du fichier audio a échoué.',
9
14
  'audio.info.duration': 'Durée', 'audio.info.sampleRate': 'Fréquence d’échantillonnage', 'audio.info.channels': 'Canaux',
15
+ 'audio.info.channelLevels': 'L crête {leftPeak}, RMS {leftRms} | R crête {rightPeak}, RMS {rightRms}',
10
16
  'audio.info.bitDepth': 'Profondeur de bits', 'audio.info.format': 'Format', 'audio.info.fileSize': 'Taille du fichier',
11
17
  'audio.loading': 'Décodage de l’audio…',
12
18
  'audio.status.region': 'Région {start} – {end} ({duration} s)',
13
19
  'audio.status.looping': 'lecture en boucle de la région', 'audio.status.loopTrack': 'Lecture en boucle de la piste',
14
20
  'audio.fallback': 'Moteur de forme d’onde indisponible — utilisation du lecteur de base.',
15
21
  'audio.error.decode': 'Le navigateur n’a pas pu décoder ce codec audio. Essayez un hôte disposant du codec requis ou transcodez le fichier.',
22
+ 'audio.warning.analysisFailed': 'L’analyse préalable de la forme d’onde a échoué — retour au décodage complet par le navigateur, qui peut être lent pour un fichier de cette taille.',
23
+ 'audio.warning.analysisSkipped': 'L’analyse préalable de la forme d’onde n’est pas disponible pour ce format — retour au décodage complet par le navigateur, qui peut être lent pour un fichier de cette taille.',
24
+ 'audio.vis.unavailableLarge': 'Le spectrogramme n’est pas disponible pour les fichiers volumineux rendus à partir de pics précalculés.',
16
25
  'video.play': 'Lecture', 'video.pause': 'Pause', 'video.stop': 'Arrêt',
17
26
  'video.skipBack': '⏪ -{seconds} s', 'video.skipForward': '⏩ +{seconds} s',
18
27
  'video.speed': 'Vitesse', 'video.zoom': 'Zoom', 'video.zoomIn': 'Zoom avant',
@@ -4,15 +4,24 @@ export const CATALOG_IT = {
4
4
  'audio.title': 'Audio', 'video.title': 'Video', 'dbc.title': 'Database CAN',
5
5
  'audio.play': 'Riproduci', 'audio.pause': 'Pausa', 'audio.stop': 'Arresta',
6
6
  'audio.loop': 'Ripeti', 'audio.clearRegions': 'Cancella regioni', 'audio.volume': 'Volume',
7
+ 'audio.region.start': 'Inizio regione (s)', 'audio.region.end': 'Fine regione (s)', 'audio.region.duration': 'Durata regione (s)',
7
8
  'audio.zoom': 'Zoom', 'audio.zoomIn': 'Ingrandisci', 'audio.zoomOut': 'Riduci', 'audio.zoomFit': 'Adatta',
8
9
  'audio.visualization': 'Vista', 'audio.vis.waveform': 'Forma d’onda', 'audio.vis.spectrogram': 'Spettrogramma',
10
+ 'audio.vis.both': 'Entrambi', 'audio.download': 'Scarica',
11
+ 'audio.spectrogramScale': 'Scala',
12
+ 'audio.scale.linear': 'Lineare', 'audio.scale.mel': 'Mel', 'audio.scale.bark': 'Bark', 'audio.scale.erb': 'ERB',
13
+ 'audio.error.save': 'Salvataggio del file audio non riuscito.',
9
14
  'audio.info.duration': 'Durata', 'audio.info.sampleRate': 'Frequenza di campionamento', 'audio.info.channels': 'Canali',
15
+ 'audio.info.channelLevels': 'L picco {leftPeak}, RMS {leftRms} | R picco {rightPeak}, RMS {rightRms}',
10
16
  'audio.info.bitDepth': 'Profondità di bit', 'audio.info.format': 'Formato', 'audio.info.fileSize': 'Dimensione file',
11
17
  'audio.loading': 'Decodifica dell’audio…',
12
18
  'audio.status.region': 'Regione {start} – {end} ({duration} s)',
13
19
  'audio.status.looping': 'ripetizione della regione', 'audio.status.loopTrack': 'Ripetizione del brano',
14
20
  'audio.fallback': 'Motore della forma d’onda non disponibile — si utilizza il lettore di base.',
15
21
  'audio.error.decode': 'Il browser non è riuscito a decodificare questo codec audio. Prova un host con il codec richiesto o transcodifica il file.',
22
+ 'audio.warning.analysisFailed': 'L’analisi preliminare della forma d’onda non è riuscita — si torna alla decodifica completa del browser, che può essere lenta per un file di queste dimensioni.',
23
+ 'audio.warning.analysisSkipped': 'L’analisi preliminare della forma d’onda non è disponibile per questo formato — si torna alla decodifica completa del browser, che può essere lenta per un file di queste dimensioni.',
24
+ 'audio.vis.unavailableLarge': 'Lo spettrogramma non è disponibile per i file di grandi dimensioni renderizzati da picchi precalcolati.',
16
25
  'video.play': 'Riproduci', 'video.pause': 'Pausa', 'video.stop': 'Arresta',
17
26
  'video.skipBack': '⏪ -{seconds} s', 'video.skipForward': '⏩ +{seconds} s',
18
27
  'video.speed': 'Velocità', 'video.zoom': 'Zoom', 'video.zoomIn': 'Ingrandisci',
@@ -3,15 +3,24 @@ export const CATALOG_JA = {
3
3
  'audio.title': 'オーディオ', 'video.title': '動画', 'dbc.title': 'CANデータベース',
4
4
  'audio.play': '再生', 'audio.pause': '一時停止', 'audio.stop': '停止',
5
5
  'audio.loop': 'ループ', 'audio.clearRegions': '範囲をクリア', 'audio.volume': '音量',
6
+ 'audio.region.start': '領域の開始 (秒)', 'audio.region.end': '領域の終了 (秒)', 'audio.region.duration': '領域の長さ (秒)',
6
7
  'audio.zoom': 'ズーム', 'audio.zoomIn': '拡大', 'audio.zoomOut': '縮小', 'audio.zoomFit': '全体表示',
7
8
  'audio.visualization': '表示', 'audio.vis.waveform': '波形', 'audio.vis.spectrogram': 'スペクトログラム',
9
+ 'audio.vis.both': '両方', 'audio.download': 'ダウンロード',
10
+ 'audio.spectrogramScale': 'スケール',
11
+ 'audio.scale.linear': 'リニア', 'audio.scale.mel': 'メル', 'audio.scale.bark': 'バーク', 'audio.scale.erb': 'ERB',
12
+ 'audio.error.save': 'オーディオファイルの保存に失敗しました。',
8
13
  'audio.info.duration': '再生時間', 'audio.info.sampleRate': 'サンプルレート', 'audio.info.channels': 'チャンネル',
14
+ 'audio.info.channelLevels': 'L ピーク {leftPeak}, RMS {leftRms} | R ピーク {rightPeak}, RMS {rightRms}',
9
15
  'audio.info.bitDepth': 'ビット深度', 'audio.info.format': '形式', 'audio.info.fileSize': 'ファイルサイズ',
10
16
  'audio.loading': 'オーディオをデコード中…',
11
17
  'audio.status.region': '範囲 {start}~{end}({duration}秒)',
12
18
  'audio.status.looping': '範囲をループ中', 'audio.status.loopTrack': 'トラックをループ中',
13
19
  'audio.fallback': '波形エンジンを使用できないため、基本プレーヤーを使用します。',
14
20
  'audio.error.decode': 'ブラウザーでこのオーディオコーデックをデコードできません。必要なコーデックを備えた環境を使用するか、ファイルを変換してください。',
21
+ 'audio.warning.analysisFailed': '波形の事前解析に失敗しました。ブラウザーによる全体のデコードに切り替えます。このサイズのファイルでは時間がかかる場合があります。',
22
+ 'audio.warning.analysisSkipped': 'この形式では波形の事前解析を利用できません。ブラウザーによる全体のデコードに切り替えます。このサイズのファイルでは時間がかかる場合があります。',
23
+ 'audio.vis.unavailableLarge': '事前計算したピークで描画する大きなファイルではスペクトログラムを利用できません。',
15
24
  'video.play': '再生', 'video.pause': '一時停止', 'video.stop': '停止',
16
25
  'video.skipBack': '⏪ -{seconds}秒', 'video.skipForward': '⏩ +{seconds}秒',
17
26
  'video.speed': '再生速度', 'video.zoom': 'ズーム', 'video.zoomIn': '拡大',
@@ -55,6 +64,99 @@ export const CATALOG_JA = {
55
64
  'safetensors.structure': '構造', 'safetensors.noData': '表示できるデータがありません。',
56
65
  'safetensors.matchingRows': '一致する行: {count}件',
57
66
  'safetensors.matchingRowsLimited': '一致する{total}行中{visible}行を表示',
67
+ 'gguf.title': 'GGUF', 'gguf.search': 'メタデータとテンソルを検索…', 'gguf.copyJson': 'JSONをコピー',
68
+ 'gguf.structure': '構造', 'gguf.noData': '表示できるデータがありません。',
69
+ 'gguf.matchingRows': '一致する行: {count}件',
70
+ 'gguf.matchingRowsLimited': '一致する{total}行中{visible}行を表示',
71
+ 'gguf.summary.version': 'バージョン', 'gguf.summary.architecture': 'アーキテクチャ', 'gguf.summary.type': '種類',
72
+ 'gguf.summary.tensors': 'テンソル', 'gguf.summary.parameters': 'パラメータ',
73
+ 'gguf.summary.quantization': '量子化', 'gguf.summary.metadataKeys': 'メタデータキー', 'gguf.summary.status': '状態',
74
+ 'gguf.table.tensors': 'テンソル({count})', 'gguf.table.metadata': 'メタデータ({count})',
75
+ 'gguf.column.name': '名前', 'gguf.column.dtype': 'データ型', 'gguf.column.shape': '形状',
76
+ 'gguf.column.parameters': 'パラメータ', 'gguf.column.offset': 'オフセット', 'gguf.column.key': 'キー',
77
+ 'gguf.column.type': '種類', 'gguf.column.value': '値',
78
+ 'gguf.warning.invalid': '無効または未対応のGGUFファイルです。',
79
+ 'gguf.warning.unverifiedDtype': '一部のテンソルは未認識の保存データ型を使用しているため、payloadの終端を検証できませんでした。',
80
+ 'gguf.warning.metadataCountMismatch': '宣言されたメタデータ数と解析された項目数が一致しません。',
81
+ 'gguf.warning.tensorsLimited': 'メモリ使用量を抑えるため、{total}個のテンソルのうち先頭{shown}個を表示します。',
82
+ 'gguf.warning.metadataLimited': 'メモリ使用量を抑えるため、{total}個のメタデータのうち先頭{shown}個を表示します。',
83
+ 'gguf.warning.textTruncated': 'フィールド制限またはGGUF文字数予算により、一部のテキストが省略されました。',
84
+ 'gguf.warning.metadataTooLarge': 'このファイルのメタデータは大きすぎて完全には解析できません。キーのプレビューのみを表示し、テンソル一覧は利用できません。',
85
+ 'onnx.title': 'ONNXモデル', 'onnx.search': 'グラフ、ノード、テンソルを検索…', 'onnx.copyJson': 'JSONをコピー',
86
+ 'onnx.graph': 'グラフ', 'onnx.nodes': 'ノード', 'onnx.tensors': 'テンソル', 'onnx.io': '入出力',
87
+ 'onnx.modelInfo': 'モデル情報', 'onnx.rows': '{total}行中{shown}行を表示', 'onnx.noMatches': '検索に一致する行がありません。',
88
+ 'onnx.selectNode': '確認するグラフノードを選択してください。', 'onnx.graphLimited': '{total}項目中{shown}項目を表示しています。',
89
+ 'onnx.summary.nodes': 'ノード', 'onnx.summary.initializers': '初期化テンソル', 'onnx.summary.inputs': '入力',
90
+ 'onnx.summary.outputs': '出力', 'onnx.summary.functions': '関数', 'onnx.summary.irVersion': 'IRバージョン',
91
+ 'onnx.warning.noOpset': 'モデルに演算子セットのインポートが宣言されていません。',
92
+ 'onnx.warning.emptyGraph': 'モデルグラフに演算ノードがありません。',
93
+ 'onnx.warning.externalData': '{count}個のテンソルが、このビューアーで読み込まれていない外部データを参照しています。',
94
+ 'onnx.column.index': '#', 'onnx.column.name': '名前', 'onnx.column.operator': '演算子', 'onnx.column.domain': 'ドメイン',
95
+ 'onnx.column.overload': 'オーバーロード', 'onnx.column.inputs': '入力', 'onnx.column.outputs': '出力',
96
+ 'onnx.column.attributes': '属性', 'onnx.column.type': '型', 'onnx.column.shape': '形状',
97
+ 'onnx.column.elements': '要素数', 'onnx.column.dataSize': 'データサイズ', 'onnx.column.storage': '保存形式',
98
+ 'onnx.column.kind': '種類', 'onnx.column.typeShape': '型 / 形状', 'onnx.column.description': '説明',
99
+ 'onnx.column.metadata': 'メタデータ',
100
+ 'onnx.storage.dense.embedded': '密 · 内蔵', 'onnx.storage.dense.external': '密 · 外部',
101
+ 'onnx.storage.sparse.embedded': '疎 · 内蔵', 'onnx.storage.sparse.external': '疎 · 外部',
102
+ 'onnx.kind.input': '入力', 'onnx.kind.output': '出力', 'onnx.kind.value': '中間値',
103
+ 'onnx.scalar': 'スカラー', 'onnx.optional': '省略可能',
104
+ 'onnx.info.graph': 'グラフ', 'onnx.info.irVersion': 'IRバージョン', 'onnx.info.modelVersion': 'モデルバージョン',
105
+ 'onnx.info.producer': '生成ツール', 'onnx.info.domain': 'ドメイン', 'onnx.info.opsets': '演算子セット',
106
+ 'onnx.info.description': '説明', 'onnx.info.functions': 'ローカル関数', 'onnx.info.graphMetadata': 'グラフ',
107
+ 'onnx.inspector.inputs': '入力', 'onnx.inspector.outputs': '出力', 'onnx.inspector.attributes': '属性',
108
+ 'onnx.inspector.description': '説明',
109
+ 'onnx.graphEdgesLimited': '接続は最初の{count}件のみ表示しています。', 'onnx.moreItems': 'ほか{count}件…',
110
+ 'onnx.unknown': '不明', 'onnx.graphSummary': '{name} · {count}ノード',
111
+ 'onnx.sparseSummary': '{type}[{shape}] · 非ゼロ{count}件',
112
+ 'onnx.info.training': '学習グラフ', 'onnx.info.configurations': 'デバイス構成',
113
+ 'onnx.info.quantization': '量子化注釈', 'onnx.info.deviceConfiguration': 'デバイス構成',
114
+ 'onnx.info.pipelineStage': 'パイプライン段階',
115
+ 'tflite.title': 'TFLiteモデル', 'tflite.search': '演算子・テンソル・バッファを検索…',
116
+ 'tflite.copyJson': 'JSONをコピー', 'tflite.subgraph': 'サブグラフ', 'tflite.unnamed': '名前なし',
117
+ 'tflite.graph': 'グラフ', 'tflite.operators': '演算子', 'tflite.tensors': 'テンソル',
118
+ 'tflite.io': '入力と出力', 'tflite.buffers': 'バッファ', 'tflite.modelInfo': 'モデル情報',
119
+ 'tflite.rows': '{total}行中{shown}行を表示', 'tflite.noMatches': '検索条件に一致する行はありません。',
120
+ 'tflite.selectNode': '演算子またはテンソルを選択すると詳細が表示されます。',
121
+ 'tflite.graphLimited': 'グラフプレビューは全{total}件中{shown}件を表示しています。',
122
+ 'tflite.graphEdgesLimited': '接続線は最初の{count}本のみ表示しています。',
123
+ 'tflite.moreItems': '他{count}件…', 'tflite.runtime': 'ランタイム {version}', 'tflite.schema': 'スキーマ v{version}',
124
+ 'tflite.scalar': 'スカラー', 'tflite.unknownRank': 'ランク不明', 'tflite.optional': '省略可', 'tflite.variable': '変数',
125
+ 'tflite.opDetail': '#{index} · v{version}', 'tflite.customBytes': 'カスタムオプション{bytes}バイト',
126
+ 'tflite.binaryBuffer': 'バイナリ、バッファ{buffer}に{bytes}',
127
+ 'tflite.summary.operators': '演算子', 'tflite.summary.tensors': 'テンソル',
128
+ 'tflite.summary.subgraphs': 'サブグラフ', 'tflite.summary.operatorCodes': '演算子コード',
129
+ 'tflite.summary.weights': '重み', 'tflite.summary.version': 'スキーマバージョン',
130
+ 'tflite.warning.identifier': 'ファイル識別子が想定のTFL3ではなく{identifier}です。',
131
+ 'tflite.warning.version': 'モデルはスキーマバージョン{version}を宣言していますが、このビューアはバージョン3を対象としています。',
132
+ 'tflite.warning.noSubgraphs': 'モデルにサブグラフがありません。',
133
+ 'tflite.warning.emptyGraph': 'モデルのサブグラフに演算子がありません。',
134
+ 'tflite.warning.customOps': 'カスタム演算子{count}件にはランタイムへの登録が必要です: {names}',
135
+ 'tflite.warning.flexOps': '{count}件の演算子がSelect TensorFlow演算にフォールバックします。',
136
+ 'tflite.warning.appendedBuffers': '{count}件のバッファがFlatBufferの外部にデータを保持しています。',
137
+ 'tflite.column.index': '#', 'tflite.column.name': '名前', 'tflite.column.operator': '演算子',
138
+ 'tflite.column.kind': '種類', 'tflite.column.version': 'バージョン', 'tflite.column.inputs': '入力',
139
+ 'tflite.column.outputs': '出力', 'tflite.column.optionsType': 'オプション型', 'tflite.column.options': 'オプション',
140
+ 'tflite.column.type': '型', 'tflite.column.shape': '形状', 'tflite.column.elements': '要素数',
141
+ 'tflite.column.dataSize': 'データサイズ', 'tflite.column.storage': '格納場所',
142
+ 'tflite.column.quantization': '量子化', 'tflite.column.variable': '変数',
143
+ 'tflite.column.signature': 'シグネチャ', 'tflite.column.typeShape': '型 / 形状',
144
+ 'tflite.column.tensorIndex': 'テンソル', 'tflite.column.fileOffset': 'ファイルオフセット',
145
+ 'tflite.column.usedBy': '使用元', 'tflite.column.buffer': 'バッファ',
146
+ 'tflite.storage.empty': 'ランタイム', 'tflite.storage.inline': 'インライン', 'tflite.storage.appended': '外部追加',
147
+ 'tflite.kind.builtin': '組み込み', 'tflite.kind.custom': 'カスタム', 'tflite.kind.input': '入力',
148
+ 'tflite.kind.output': '出力', 'tflite.kind.signatureInput': 'シグネチャ入力',
149
+ 'tflite.kind.signatureOutput': 'シグネチャ出力',
150
+ 'tflite.info.description': '説明', 'tflite.info.schemaVersion': 'スキーマバージョン',
151
+ 'tflite.info.identifier': 'ファイル識別子', 'tflite.info.minRuntime': '最小ランタイム',
152
+ 'tflite.info.fileSize': 'ファイルサイズ', 'tflite.info.weights': '重みバイト数',
153
+ 'tflite.info.subgraphs': 'サブグラフ', 'tflite.info.signatures': 'シグネチャ',
154
+ 'tflite.info.operatorCode': '演算子コード', 'tflite.info.metadata': 'メタデータ',
155
+ 'tflite.info.expectedSize': '想定サイズ', 'tflite.info.shapeSignature': '形状シグネチャ',
156
+ 'tflite.info.sparsity': 'スパース性', 'tflite.info.traversalOrder': '走査順序',
157
+ 'tflite.inspector.inputs': '入力', 'tflite.inspector.outputs': '出力',
158
+ 'tflite.inspector.intermediates': '中間テンソル', 'tflite.inspector.options': 'オプション',
159
+ 'tflite.inspector.customOptions': 'カスタムオプション', 'tflite.inspector.subgraphs': '参照サブグラフ',
58
160
  'proto.title': 'Protocol Buffer', 'proto.summary': '{syntax} · {package} · メッセージ{messages}件 · サービス{services}件',
59
161
  'proto.noPackage': 'パッケージなし', 'proto.search': 'メッセージ、フィールド、列挙型、RPCを検索', 'proto.copyPanel': 'パネルをコピー',
60
162
  'proto.panel.tree': 'メッセージツリー', 'proto.panel.types': '型', 'proto.panel.relationships': '関係',