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
- In the Emby dashboard, edit the user's Access settings and enable 'Allow media downloads', then restart/re-init the driver
- Verify the item actually is a Video or Audio item by opening it in the Emby web client
- Re-list the directory so file ids are refreshed, then retry the download
- 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
- Enable download permission on the dedicated API user before mounting
- Only expose Video/Audio libraries through this driver
- Handle this error as a configuration error, not a transient failure
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
- user is not allowed to access via FTP
- user is not allowed to access via SFTP
- not get file info
- oss: chunkNum invalid
- clientID and clientSecret are required in client_credentials
AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15).
Data as JSON: /api/errors/ae29d57a6d5e6333.
Report an issue: GitHub.