Package: bluarchive
Bluarchive, A Bluprint DownloaderBluprint, formerly Craftsy, hasannouncedthat they are closing, without yet announcing a method of downloading purchased
content. This project is intended to allow customers to preserve their
purchases.FeaturesSaves patterns, class materials, and class videos, including muxed subtitles
and chapters. Also preserves original vtt subtitles, since they can't go into
mp4, and metadata for patterns and classes.Abridged output example:Patterns/patterns.json
Patterns/Funktional Threads Christmas Stocking/stocking_aiid894970.pdf
Making Leather Bags (272)/playlist.json
Making Leather Bags (272)/1. Meet Don Morin & Plan Your Bag.mp4
Making Leather Bags (272)/1. Meet Don Morin & Plan Your Bag.vtt
Making Leather Bags (272)/materials/making-leather-bags-instructions.pdfHow to UseCreate a virtualenv:virtualenv -p python3 venvActivate the virtualenv:. venv/bin/activateInstall bluarchive:pip install bluarchiveRun bluarchive to create a template config:bluarchiveCopy your bluprint cookies into bluarchive.iniMake sure everything you want to download is unarchived on the bluprint site!
(Or remove those checks in the code)Run bluarchive again to download the content:bluarchiveDevelopmentBLU_TEST=1in env will download one pattern, one class's materials, and one
video.=2will download one pattern and one entire class.Some Web API EndpointsBase URL:https://api.mybluprint.com/List all enrolled courses. No authentication required.../enrollments?userId={user_id}Playlist contents and metadata, including all episodes and their chapters/m/playlists/{playlist_id}CDN URLs for an episode, HLS and mp4/m/videos/secure/episodes/{episode_id}List pattern entitlements/users/{user_id}/patterns?pageSize=99999&sortBy=RESOURCE_NAMECDN URLs for a pattern/users/{user_id}/patterns/{pattern_id}/patternDownloadLinksApp API Endpoints/analytics/videoConsumptionEvents
/assets/uploadLinks
/configs
/enrollments
/login
/users
/users/{userId}/carts
/users/{userId}/carts/{cardId}
/users/{userId}/checkoutConfirmation
/users/{userId}/courseMaterials/{materialsId}/downloadLogs
/users/{userId}/enrollments
/users/{userId}/enrollments/patterns
/users/{userId}/patterns/{patternId}/detailedDownloadLinks
/users/{userId}/profile
/b/affinities
/b/appExploreScreens/apps-explore-screen
/b/homeScreens/apps-home-screen
/b/libraryScreens/apps-library-screen
/b/playlists/{playlistId}/materials
/b/playlists/{playlistId}/summary
/b/searchResults/apps-search-results
/b/typeaheadSearchResults
/b/userRecommendations/playlistPromotables
/b/users/{userId}/enrollments/courses
/b/users/{userId}/saves
/b/users/{userId}/saves/paginatedPromotables
/b/users/{userId}/saves/sections
/m/episodes/{episodeId}/discussions
/m/episodes/{episodeId}/discussions
/m/episodes/{episodeId}/posts/{postId}/replies
/m/episodes/{episodeId}/posts/{postId}/replies
/m/sneakPreviewAccess/{deviceId}
/m/sneakPreviewStartRequests
/m/trendingSearchTerms
/m/users/{userId}/bookmarks
/m/users/{userId}/bookmarks
/m/users/{userId}/bookmarks/{bookmarkId}
/m/users/{userId}/bookmarks/{bookmarkId}
/m/users/{userId}/episodePosts
/m/users/{userId}/playlistBookmarks
/m/users/{userId}/posts/{postId}
/m/users/{userId}/posts/{postId}
/m/users/{userId}/userPlaylistCursors
/m/users/{userId}/userPlaylistCursors/updateRequests
/m/videos/secure/downloads/episodes/{episodeId}
/m/videos/secure/episodes/{episodeId}
/m/videos/sneakPreview/episodes/{episodeId}
/m/visitors/{visitorId}/visitorPlaylistCursors
/m/visitors/{visitorId}/visitorPlaylistCursors/updateRequests