# PhoenixKit Photos v0.3.0 - Table of Contents > Photo and video library for PhoenixKit in the spirit of Apple Photos and Google Photos, starting with a scrubbable, virtualized timeline. hex_docs_icon_name: photo ## Pages - [PhoenixKit Photos](readme.md) - [Changelog](changelog.md) ## Modules - [PhoenixKitPhotos](PhoenixKitPhotos.md): A photo and video library for PhoenixKit, in the spirit of Apple Photos and Google Photos. - [PhoenixKitPhotos.API](PhoenixKitPhotos.API.md): The photo library for agents: find files by what a person would say ("the videos from last July"), then act on them. The write tools are `PhoenixKitPhotos.Bulk` with an API around it, the same two steps a person's selection takes, so every one of them answers a dry run with what would happen and to which files, and nothing here deletes for good. - [PhoenixKitPhotos.Bulk](PhoenixKitPhotos.Bulk.md): What can be done to many files at once. A person gets here through the timeline's selection and an agent through the API tools (`PhoenixKitPhotos.API`); both take the same two steps, so an agent cannot do what a person's screen would refuse. - [PhoenixKitPhotos.Components.PhotoTimeline](PhoenixKitPhotos.Components.PhotoTimeline.md): The timeline LiveComponent: index and current window on the server, geometry and recycling in the `PhotoTimeline` JS hook. - [PhoenixKitPhotos.Components.PhotoUploader](PhoenixKitPhotos.Components.PhotoUploader.md): Adds photos and videos to one library: a floating **+** button, a panel with the queue, and the whole page as a place to drop files or folders. - [PhoenixKitPhotos.Components.PhotoViewer](PhoenixKitPhotos.Components.PhotoViewer.md): Hosts PhoenixKit's canvas viewer and dialog hook for one authorized photo. Pass only the file data returned by `Timeline.viewer_file/3`. Stage 1 is read-only; editing and annotations remain in PhoenixKit's media screens. - [PhoenixKitPhotos.Components.ViewerPicker](PhoenixKitPhotos.Components.ViewerPicker.md): A select for the viewer of one library (`PhoenixKitPhotos.Viewer`): "Default", "Swipe viewer", "Classic viewer". It shows nothing to someone who may not choose (`Viewer.can_set?/2`), and checks again when it saves. - [PhoenixKitPhotos.Gettext](PhoenixKitPhotos.Gettext.md): Gettext backend for labels this package hands to the browser. - [PhoenixKitPhotos.LiveUpdates](PhoenixKitPhotos.LiveUpdates.md): Forwards storage lifecycle messages from the host LiveView to its timelines. - [PhoenixKitPhotos.Timeline](PhoenixKitPhotos.Timeline.md): The server side of the timeline: a monthly index and per-day windows over one storage library. - [PhoenixKitPhotos.Uploads](PhoenixKitPhotos.Uploads.md): What the photo uploader asks of the server: who may add to a library, which files it takes, and storing one finished upload. No LiveView in here; the `PhoenixKitPhotos.Components.PhotoUploader` component calls it, and so can anything else that has a file on disk (an importer, a script). - [PhoenixKitPhotos.Viewer](PhoenixKitPhotos.Viewer.md): Which viewer a library's photos open in. - [PhoenixKitPhotos.Web.Download](PhoenixKitPhotos.Web.Download.md): The timeline's Download: a form post of file ids, answered with a ZIP of the originals as they are read. A host mounts it in a pipeline with the session, CSRF protection and the current scope, and tells the timeline where (`download_path`) - [PhoenixKitPhotos.Web.TimelineLive](PhoenixKitPhotos.Web.TimelineLive.md): The package's default timeline page. - [PhoenixKitPhotos.Zip](PhoenixKitPhotos.Zip.md): A ZIP archive written front to back, for answering a download while the files are still being read: nothing is ever seeked back to, so it goes straight into a chunked response.