# get_duplicate_nodes()

Queries only nodes with duplicate names in the given slot. Matches **Duplicate Nodes**.

### Signature
```python
api.get_duplicate_nodes(slot, select=0) -> dict
```

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `slot` | `int` | Yes | Slot number (0–9). bool/str/float → `TypeError` |
| `select` | `int` (0/1) or `bool` | No (default `0`) | `0`=query only, `1`=query then select in scene |

### Return Value
```python
{
    "success": bool,
    "slot": int,
    "category": "duplicate_nodes",
    "count": int,
    "handles": list,               # list[int], valid nodes only
    "names": list,                 # list[str], 1:1 with handles
    "selected": int,               # normalized select (0 or 1)
    "selected_count": int,
    "duplicate_names": list,       # list[str] duplicate name strings
    "message": str,
}
```

### Example
```python
from os_fast_ref.api import FastRefAPI

api = FastRefAPI()

# Query only (pipeline check — no scene selection)
dup = api.get_duplicate_nodes(slot=0)
if dup["duplicate_names"]:
    print("duplicates:", dup["duplicate_names"])
    print("nodes:", dup["names"])
else:
    print("no duplicates")

# Query + scene selection (same as right-click menu)
api.get_duplicate_nodes(slot=0, select=1)
```

### Notes
- An empty result (`count=0`) is not an error.
- Invalid `slot`/`select` raises immediately (`TypeError` / `ValueError`).
- See the Get Nodes overview page for the shared contract and exception table.
- Also returns `duplicate_names` (list of duplicate name strings). Empty list when none.