> ## Documentation Index
> Fetch the complete documentation index at: https://docs-unity.molca.id/llms.txt
> Use this file to discover all available pages before exploring further.

# CSV Step Importer

> Import step metadata from CSV into a SequenceController hierarchy.

**Menu:** **Molca → Utilities → CSV Step Importer**\
**Script:** `Packages/com.molca.core/Editor/Sequence/CsvStepImporterWindow.cs`

Works with [Sequence Visualizer](/core/sequence-visualizer) (**Open CSV Step Importer** pre-fills the target controller) or standalone.

## Target controller

Assign a **`SequenceController`** in the **Controller** field. The importer creates or updates steps under that controller’s hierarchy according to CSV content and your column mapping.

## CSV file

Use **Browse…** to pick a `.csv` file. Row range controls and column-to-field mapping are configured in the window after load.

## Default column mappings

Mappings are built in **`InitializeColumnMappings`**:

* **Step Number** (required) — hierarchical step id (e.g. `1`, `1.1`, `2.1`).
* **Title** / **Title (`en`, `id`, …)** — one column per language code from **LocalizationModule** on [Global Settings](/setup/global-settings) when configured; otherwise a single **Title** column (required).
* **Description** — optional.
* **Extra columns** — via **`CsvStepImporterExtensibility.ExtraColumnMappings`** (see below).

Column index assignments can be persisted with **`EditorPrefs`** key `Molca.CsvStepImporter.ColumnMappings`.

## Extensibility

**`CsvStepImporterExtensibility`** (`CsvStepImporter.cs`):

* **`RegisterExtraColumnMapping`** — add columns and optional setup callbacks for custom **`StepInfo`** fields.
* **`StepInfoType`** — use a derived **`StepInfo`** type instead of the default.
* **`SetupCallbacks`** — run after base StepInfo setup.
* **`DrawExtraGUICallbacks`** — extra GUI after controller selection.

Use **`[InitializeOnLoad]`** or startup code in an Editor assembly to register extensions.

## Code (editor extension)

```csharp theme={null}
using Molca.Editor;
using UnityEditor;

[InitializeOnLoad]
internal static class MyCsvStepImporterHooks
{
    static MyCsvStepImporterHooks()
    {
        CsvStepImporterExtensibility.RegisterExtraColumnMapping(
            "Difficulty",
            "Optional difficulty label from CSV",
            required: false,
            onSetup: (stepInfo, stepData) =>
            {
                if (stepData.extraColumnValues != null &&
                    stepData.extraColumnValues.TryGetValue("Difficulty", out var value))
                {
                    // Cast stepInfo to your StepInfo-derived type and assign fields
                }
            });
    }
}
```

See **`CsvStepImporterExtensibility`** in `CsvStepImporterWindow.cs` for **`StepInfoType`**, **`SetupCallbacks`**, and **`DrawExtraGUICallbacks`**.

## Related

* [Sequence Visualizer](/core/sequence-visualizer) — quick open with controller context
* VR-specific CSV extensions may live under `_MolcaSDK/_VR` (search for `CsvStepImporter` in the SDK)

## Unity Editor

<Frame caption="CSV Step Importer window">
  <img src="https://mintcdn.com/ptmolcateknologinusantara/jWDWJqZnZidoWqQK/images/features/core/csv-step-importer-window.png?fit=max&auto=format&n=jWDWJqZnZidoWqQK&q=85&s=d0db0b67537a56bb98d6c4bb4e8786de" alt="Csv Step Importer Window" width="998" height="468" data-path="images/features/core/csv-step-importer-window.png" />
</Frame>
