AlistGo/alist · error

emby user has no download permission and item is not streama

Error message

emby user has no download permission and item is not streamable

What it means

Returned by the Emby driver's link resolution when the authenticated Emby user lacks EnableContentDownloading AND the item is not directly streamable as Video or Audio. The driver builds a direct stream URL only for Video/Audio media types; anything else (e.g. a folder-ish item, book, photo without a stream endpoint, or an empty Items array) falls through to this error when download permission is off.

Source

Thrown at drivers/emby/driver.go:116

	// no download permission: fall back to the direct-play stream of the original file
	var resp ItemsResp
	err := d.request(ctx, "/Users/"+d.userID+"/Items", map[string]string{"Ids": file.GetID()}, &resp)
	if err != nil {
		return nil, err
	}
	if len(resp.Items) > 0 {
		switch resp.Items[0].MediaType {
		case "Video":
			return &model.Link{
				URL: fmt.Sprintf("%s/Videos/%s/stream?static=true&api_key=%s", d.baseURL(), file.GetID(), d.token),
			}, nil
		case "Audio":
			return &model.Link{
				URL: fmt.Sprintf("%s/Audio/%s/stream?static=true&api_key=%s", d.baseURL(), file.GetID(), d.token),
			}, nil
		}
	}
	return nil, fmt.Errorf("emby user has no download permission and item is not streamable")
}

var _ driver.Driver = (*Emby)(nil)
var _ driver.GetRooter = (*Emby)(nil)

View on GitHub (pinned to 843d9dc814)

Solutions

  1. In the Emby dashboard, edit the user's Access settings and enable 'Allow media downloads', then restart/re-init the driver
  2. Verify the item actually is a Video or Audio item by opening it in the Emby web client
  3. Re-list the directory so file ids are refreshed, then retry the download
  4. If the library legitimately holds non-streamable types, exclude them from this mount
Defensive patterns

Strategy: validation

Validate before calling

// before requesting a link, check permission flag exposed by the driver
if !embyUserCanDownload { // derived from user policy EnableContentDownloading
    return errors.New("downloads disabled for this Emby user; enable 'Allow media downloads'")
}
if item.Type != "Video" && item.Type != "Audio" {
    return errors.New("item is not streamable; cannot build a link")
}

Try / catch

link, err := d.link(ctx, obj)
if err != nil && strings.Contains(err.Error(), "no download permission") {
    // instruct user instead of retrying; this only changes server-side
    return nil, fmt.Errorf("enable 'Allow media downloads' for the Emby user %s", d.Username)
}

Prevention

When it happens

Trigger: Calling link() on an item whose playbackInfo query returns no items or a MediaType outside Video/Audio while d.canDownload is false; Emby user policy has downloading disabled in the server dashboard; the file id maps to a non-media item (image, subtitle, collection).

Common situations: Admin created a restricted Emby user with downloads disabled expecting the driver to stream anyway; pointing the mount at a library containing photos/books; item id staleness after Emby library rebuilds returns empty Items.

Related errors


AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15). Data as JSON: /api/errors/ae29d57a6d5e6333. Report an issue: GitHub.