A simple browser-based tool for placing and managing labeled points on an image.
It is useful for tagging diagrams/maps and exporting the result as JSON.
- Loads a background image and lets you click to create position markers.
- Supports optional label prefix auto-numbering (for example
Pos,Pos1,Pos2, ...). - Supports optional name assignment per marker from a names list.
- Prevents duplicate assigned names across markers (unless unchanged on the same marker).
- Lets you drag markers to adjust coordinates.
- Lets you delete markers.
- Shows a live JSON output log with:
imageNamenamesListpositions
- Can copy JSON to clipboard.
- Can clear all positions.
- Can download the output JSON as
_positions.json. - Can load an existing positions JSON and render all markers.
index.html— Main UI.src/scripts.js— Core logic (loading files, marker interactions, export/import).images/— Image files.names_list/default_list— Optional default names file.positions/_positions.json— Optional default saved positions.
Open index.html in your browser.
Note: when opened with
file://, browsers block auto-loading local files for security reasons. You can still use Load Image, Load Names, and Load Positions buttons manually.
Serve the project folder with any local server, then open it in your browser. This enables automatic loading of:
names_list/default_listpositions/_positions.json
- Open the app.
- (Optional) Click Load Image to choose an image.
- (Optional) Click Load Names to import names (JSON array, comma-separated, or line-separated text).
- (Optional) Click Load Positions to load existing position data from JSON.
- Click on the image to add a marker.
- Edit marker name in the input near the marker.
- Drag marker using the move button.
- Delete marker using the trash button.
- Use the right-side output area to:
- Copy JSON,
- Clear all markers,
- Download JSON.
- You can also paste/edit JSON in output-log and apply it:
- by leaving the field (change event), or
- with
Ctrl+Enter/Cmd+Enter.
The output uses this shape:
{
"imageName": "your-image.png",
"namesList": "names_file_name",
"positions": {
"1": { "label": "Pos", "x": 0.123, "y": 0.456, "name": "Example" }
}
}Notes:
- Coordinates are normalized in range
[0, 1]. - Values are rounded to 3 decimals.
nameis optional.positionscan be loaded either as the full wrapper object above or as a direct positions object.
- Keep marker labels short for readability.
- Keep names list unique for best assignment behavior.
- Use download regularly as a backup while tagging.