You are updating data before removing the image so when you trying to remove image the path will be empty so that is causing error.
Check this code:
public function updateConcert(Request $request, Concert $concert)
{
$request->validate([
'name' => 'required|max:30',
'description' => 'required|max:200',
'date' => 'required|date',
'duration' => 'required|date_format:H:i:s',
'id' => 'required|numeric',
]);
$concert = Concert::find($request->id);
if ($request->hasFile('image')) {
Storage::disk('public')->delete($concert->image);
$imgName = microtime(true) . '.' . $request->file('image')->getClientOriginalExtension();
$request->file('image')->storeAs('public/storage/img', $imgName);
$concert->image = '/img/' . $imgName; // Cambiado para que sea idéntico al código de libros
$concert->save();
}
$concert->update($request->input([specify here inputs needs to update]));
$concert->artists()->sync($request->artists);
return redirect('concerts')->with('success', 'Concert updated');
}