How to key niagara user-created variables via editor utility widget, scalar or vector ones?

I want editor utility widget to key niagara variable called beam_end, like this:

i can do it manually but i cant figure a way out to make this with editor utility widget. My best attempt was this:

but unfortunately unreal crashes when i try to add a section, and there is no function to add keys to track. or maybe there is but i just cant find it, anyways i would grately appreciate if someone helped me out

Hi, I’m also interested in keying Niagara variables. After investigating the source code, it turns out that the C++ functions aren’t exposed to blueprints. If you want to initialize a new section and bind Niagara params, you can refer to FNiagaraSystemTrackEditor.cpp

void FNiagaraSystemTrackEditor::AddNiagaraParameterTrack(TArray<FGuid> ObjectBindings, FNiagaraVariable Parameter, TArray<uint8> DefaultValueData)
{
	FNiagaraEditorModule& NiagaraEditorModule = FModuleManager::GetModuleChecked<FNiagaraEditorModule>("NiagaraEditor");
	if (NiagaraEditorModule.CanCreateParameterTrackForType(*Parameter.GetType().GetScriptStruct()))
	{
		UMovieScene* MovieScene = GetSequencer()->GetFocusedMovieSceneSequence()->GetMovieScene();
		if (MovieScene->IsReadOnly())
		{
			return;
		}

		FScopedTransaction AddTrackTransaction(LOCTEXT("AddNiagaraParameterTrackTransaction", "Add Niagara Parameter Track"));
		MovieScene->Modify();

		for (FGuid ObjectBinding : ObjectBindings)
		{
			UMovieSceneNiagaraParameterTrack* ParameterTrack = NiagaraEditorModule.CreateParameterTrackForType(*Parameter.GetType().GetScriptStruct(), Parameter);
			MovieScene->AddGivenTrack(ParameterTrack, ObjectBinding);

			ParameterTrack->SetParameter(Parameter);
			ParameterTrack->SetDisplayName(FText::FromName(Parameter.GetName()));

			UMovieSceneSection* ParameterSection = ParameterTrack->CreateNewSection();
			ParameterTrack->SetSectionChannelDefaults(ParameterSection, DefaultValueData);
			ParameterSection->SetRange(TRange<FFrameNumber>::All());
			ParameterTrack->AddSection(*ParameterSection);
		}

		GetSequencer()->NotifyMovieSceneDataChanged(EMovieSceneDataChangeType::MovieSceneStructureItemAdded);
	}
}

There’s another way to copy-paste existing sections. It can be done by pure blueprint. Just make a reference sequencer and manually keyframe a niagara parameter. Then copy the section to new places and add keys.(The name of params must be the same, like “Beam_End”)
Hope it works!

And another trick: add keys by MovieSceneScriptingChannels
This is my implementation - forget about the big switch because the parameter type is read from C++.
Your parameter “Beam_End” looks like a 4D vector, which contains 4 float channels