public function getChain()
    {
        $data = [];
        // get the chain from the effect, must be an array
        foreach ($this->chain() as $chainRow) {
            // set variables from chain array
            $effectIdentifier = $chainRow[0];
            $effectParams = $chainRow[1];
            // find the effect data for the effect identifier
            $effect = $this->findEffect($effectIdentifier);
            // get all params from the effect chain and verify if they are valid
            foreach ($effectParams as $effectParamVar => $effectParamValue) {
                if (!in_array($effectParamVar, $this->getEffectParamsList(Json::decode($effect['imagine_json_params'])))) {
                    throw new Exception("Effect argument '$effectParamVar' does not exist in the effect definition of '{$effect['name']}'.");
                }
            }
            // create array with parsed effect id
            $data[] = ['effect_id' => $effect['id'], 'effect_json_values' => Json::encode($effectParams)];
        }

        return $data;
    }