Skip to content

Set up your own search

You run Qseek with the qseek command and a JSON configuration file. The configuration describes your stations, waveform data, velocity model and search volume. The quick start shows a complete example.

Create a configuration

Print the default configuration into a new file:

Create a configuration file
qseek config > my-search.json

Open my-search.json and set at least these fields; everything else keeps its default:

The minimal configuration shows these fields together, and the configuration overview explains every module.

Default configuration
{
  "project_dir": ".",
  "stations": {
    "pyrocko_station_yamls": [],
    "station_xmls": [],
    "blacklist": [],
    "stations": [],
    "max_distance": null
  },
  "data_provider": {
    "provider": "SDSArchive",
    "channel_selector": null,
    "archive": "./sds-archive",
    "start_time": null,
    "end_time": null,
    "channel_orientations": "ENZ0123",
    "n_threads": 4,
    "queue_size": 16
  },
  "pre_processing": [
    {
      "process": "resample",
      "stations": [],
      "sampling_frequency": 100.0,
      "n_threads": 8
    },
    {
      "process": "bandpass",
      "stations": [],
      "corners": 4,
      "bandpass": [
        0.5,
        30.0
      ],
      "demean": true,
      "zero_phase": true
    }
  ],
  "octree": {
    "location": {
      "lat": 0.0,
      "lon": 0.0,
      "east_shift": 0.0,
      "north_shift": 0.0,
      "elevation": 0.0,
      "depth": 0.0
    },
    "root_node_size": 1000.0,
    "n_levels": 5,
    "east_bounds": [
      -10000.0,
      10000.0
    ],
    "north_bounds": [
      -10000.0,
      10000.0
    ],
    "depth_bounds": [
      0.0,
      20000.0
    ]
  },
  "image_function": {
    "image": "SeisBench",
    "picker": {
      "threshold_p": 0.1,
      "threshold_s": 0.1,
      "search_window_seconds": 5.0,
      "peak_separation_seconds": 0.1
    },
    "model": "PhaseNet",
    "pretrained": "original",
    "window_overlap_samples": 2000,
    "torch_use_cuda": true,
    "torch_cpu_threads": 4,
    "batch_size": 128,
    "stack_method": "avg",
    "sampling_rate": 100.0,
    "phase_map": {
      "P": "cake:P",
      "S": "cake:S"
    },
    "weights": {
      "P": 1.0,
      "S": 1.0
    }
  },
  "ray_tracers": [
    {
      "tracer": "FastMarching3D",
      "phase": "fm3d:P",
      "interpolation_method": "cubic",
      "nthreads": 0,
      "velocity_model": {
        "model": "Constant3DVelocityModel",
        "grid_spacing": "octree",
        "velocity": 5000.0
      },
      "implementation": "eikonalfm"
    },
    {
      "tracer": "CakeTracer",
      "phases": {
        "cake:P": {
          "definition": "P,p"
        },
        "cake:S": {
          "definition": "S,s"
        }
      },
      "earthmodel": {
        "filename": "~/.cache/qseek/velocity_models/default.nd",
        "format": "nd",
        "crust2_profile": "",
        "raw_file_data": null
      }
    },
    {
      "tracer": "ConstantVelocityTracer",
      "phase": "constant:P",
      "velocity": 5000.0
    },
    {
      "tracer": "FastMarching",
      "velocity_model": {
        "filename": "~/.cache/qseek/velocity_models/default.nd",
        "format": "nd",
        "crust2_profile": "",
        "raw_file_data": null
      },
      "interpolation_method": "linear",
      "nthreads": 0,
      "implementation": "eikonalfm",
      "phases": [
        "fm:P",
        "fm:S"
      ]
    }
  ],
  "distance_weights": {
    "distance_taper": "mean_interstation",
    "required_closest_stations": 4,
    "waterlevel": 0.0
  },
  "station_corrections": null,
  "magnitudes": [],
  "features": [],
  "webserver": {
    "host": "0.0.0.0",
    "port": "auto"
  },
  "callbacks": [],
  "callback_scripts": [],
  "detection_threshold": "MAD",
  "min_stations": 3,
  "ignore_boundary": "without_surface",
  "ignore_boundary_width": "root_node_size",
  "node_interpolation": true,
  "detection_blinding": "PT1S",
  "window_length": "PT5M",
  "n_threads": 28,
  "save_images": false,
  "created": "2026-10-01T21:10:51.073089Z"
}

Start the search in the directory of the configuration file, since Qseek resolves relative paths from the directory where you start it:

Start the search
qseek search my-search.json

Qseek creates the run directory my-search/, named after the configuration file, in the project_dir of the configuration. project_dir defaults to ., the directory where you start the search. Qseek writes the detections into the run directory while the search runs; if the search stops, continue it.

When the search has detections, look at the run directory and explore the results. The command line reference lists all qseek commands.