Track 3 · Your Media-Savvy Startup
Pravaha, for judges
Pravaha turns lecture recordings into knowledge you can ask. Every answer is a clip of the teacher saying it, and the clip, the reel, the share card and the Hindi subtitles are all Cloudinary. This page maps that to the submission requirements.
The requirements, and where they are met
- Cloudinary is an active part of the product
- Media in is raw video; transcripts, chapters, streams, clips, reels, cards and tags all come from Cloudinary. Without it there is no product.
- Upload, manage, transform, optimize, search, deliver
- Signed upload · tags and context · Search API · splice, crop, caption, preview transformations · f_auto/q_auto · HLS delivery.
- A live working demo
- This site. Six real NPTEL sessions, no login for learners.
- Public repo with setup instructions
- github.com/Monolithic-Dev/Pravaha, SETUP.md.
- It is monitored, and a real business
- /status shows live database, AI model and Cloudinary-credit health. The business case is in docs/BUSINESS.md and the README.
- README: track, problem, Cloudinary usage, how to test
- Track 3 (Your Media-Savvy Startup); see the README.
Test it in 90 seconds
- 1Ask · Type: “What is the bias-variance trade-off?” The answer cites clips; open one. Try it in Hindi: “ओवरफिटिंग क्या है?”
- 2Watch the answer · Tap “Watch the answer”: moments from different lecturers as one Cloudinary-edited video.
- 3Compare teachers · Open the Overfitting concept: three lecturers, one video.
- 4Build a course · Ask for “Choosing a learning rate”: a 4-step course, one video.
- 5Share a Moment · On any clip tap “Share as Moment”: vertical, speaker-tracked, captioned.
- 6See the proof · Open “Cloudinary under the hood” at the bottom of a session, answer or concept.
15 Cloudinary capabilities in use
Signed upload preset + Upload Widget
Browser-to-Cloudinary video upload with real progress; the server only signs.
See it: Studio, /try ·
src/app/api/upload-signature/route.tsauto_transcription
Word-timed transcript at upload: the corpus for Find, Ask and subtitles.
See it: Watch → Transcript ·
src/lib/ingest.tsauto_chaptering
AI chapters on the seek bar and as search context.
See it: Watch → Chapters ·
src/lib/chapters.tsTranslated transcripts (hi-IN)
Hindi subtitles generated by Cloudinary, plus asking in Hindi.
See it: Watch → subtitles menu ·
src/lib/subtitles.tsVideo Player + HLS streaming profile
Adaptive 720p/360p/180p ladder that survives slow mobile data.
See it: Any session ·
src/components/Player.tsxe_preview + fl_getinfo + fl_sprite
AI highlights graph, seek-bar thumbnails and 6-second hover previews.
See it: Library cards, Watch ·
src/lib/media.tsso_/eo_ trims + c_fill,ar_9:16,g_auto
Moments: any sentence becomes a vertical clip that tracks the speaker.
See it: Share as Moment ·
src/lib/media.tsTimed l_text layers
Word-accurate burned-in captions and speaker labels, exact on trimmed clips.
See it: Moments, reels ·
src/lib/media.tsl_video + fl_splice
Answer Reels, Study Pack reels, Learning Paths and Compare Reels: moments from many sessions as one video.
See it: Ask, /learn, /concepts ·
src/lib/media.tsg_auto thumbnails + gradient/text share cards
Open Graph images for every moment, answer, course and concept: one URL, no image service.
See it: /m, /a, /p, /concepts ·
src/lib/media.tsf_auto, q_auto
Best format and quality for each device on every derived asset.
See it: Everywhere ·
src/lib/media.tsNotification webhooks (signed)
Upload to ready with no polling; signature and replay window verified.
See it: Studio status ·
src/lib/webhook-signature.tsIncoming transformation eo_60
Public trial uploads keep only 60 seconds, so abuse cannot cost more.
See it: /try ·
src/lib/trial-policy.tsTags + contextual metadata
Each asset carries its concepts, speaker and language inside Cloudinary.
See it: Studio → Cloudinary asset index ·
src/lib/cloudinary-index.tsSearch API
Reads the tagged assets back from Cloudinary itself.
See it: Studio → Cloudinary asset index ·
src/lib/cloudinary-index.ts
Live Cloudinary URLs
Generated from the real library right now. Open any of them.
The URLs behind this library10 Cloudinary URLs make this page. No render servers: each one is generated on request and cached.
Adaptive streaming
The player's HLS stream: Cloudinary encodes a ladder of renditions on demand and the player switches with the connection.
…/video/upload/q_auto/sp_hd_lean/pravaha/1ba747ae-bdb0-43b5-bd11-8a0eda32a02c.m3u8
- q_auto
- AI-chosen quality: smallest file that still looks right
- sp_hd_lean
- adaptive streaming profile "hd_lean": a ladder of renditions the player switches between
Transcript (auto_transcription)
Word-timed transcript written by Cloudinary at upload. Pravaha indexes it for Find and Ask and uses it for subtitles.
…/raw/upload/pravaha/1ba747ae-bdb0-43b5-bd11-8a0eda32a02c.transcript
Seek-bar previews
One sprite of frames for the thumbnails you see while scrubbing.
…/video/upload/q_auto/sp_hd_lean/fl_sprite/pravaha/1ba747ae-bdb0-43b5-bd11-8a0eda32a02c.vtt
- q_auto
- AI-chosen quality: smallest file that still looks right
- sp_hd_lean
- adaptive streaming profile "hd_lean": a ladder of renditions the player switches between
- fl_sprite
- a sprite of frames for seek-bar thumbnails
AI highlights graph
Cloudinary's AI rates which parts are most interesting; the player draws it above the seek bar.
…/video/upload/e_preview,fl_getinfo/pravaha/1ba747ae-bdb0-43b5-bd11-8a0eda32a02c
- e_preview
- AI preview: finds the most interesting parts of the video
- fl_getinfo
- returns data about the video instead of the video
Poster frame
A frame 10% in, cropped to 16:9 around the speaker by AI, in the best format for your device.
…/video/upload/so_15.5,c_fill,ar_16:9,w_640,g_auto/f_auto,q_auto/pravaha/1ba747ae-bdb0-43b5-bd11-8a0eda32a02c.jpg
- so_15.5
- starts at 15.5 s
- c_fill
- crops to fill the frame exactly
- ar_16:9
- aspect ratio 16 : 9
- w_640
- 640 px wide
- g_auto
- AI picks the focus (the speaker or slide), not a blind centre crop
- f_auto
- best format for each device (e.g. AV1, WebM, MP4, WebP)
- q_auto
- AI-chosen quality: smallest file that still looks right
Link preview card
The image WhatsApp, LinkedIn and Slack show for this page: a frame, a fade and text layers, all in one URL.
…/video/upload/so_15.5,c_fill,w_1200,h_630,g_auto/e_gradient_fade:symmetric_pad,y_-0.5,b_black/l_text:arial_30_bold:Pravaha,co_white,b_rgb:0f766e/fl_layer_apply,g_north_west,x_60,y_56/fl_layer_apply,g_south_west,x_60,y_70/f_jpg,q_auto/pravaha/1ba747ae-bdb0-43b5-bd11-8a0eda32a02c.jpg
- so_15.5
- starts at 15.5 s
- c_fill
- crops to fill the frame exactly
- w_1200
- 1200 px wide · and 1 more like it
- h_630
- 630 px tall
- g_auto
- AI picks the focus (the speaker or slide), not a blind centre crop
- e_gradient_fade:symmetric_p…
- fades the image edges so text on top stays readable
- y_-0.5
- -0.5 px from the edge
- b_black
- background black
- l_text:arial_30_bold:Pravaha
- text layer “Pravaha” · and 2 more like it
- co_white
- text colour white · and 1 more like it
- b_rgb:0f766e
- background #0f766e
- fl_layer_apply
- places the layer defined just before · and 2 more like it
- g_north_west
- anchored to the top-left corner
- x_60
- 60 px from the side · and 2 more like it
- y_56
- 56 px from the edge · and 2 more like it
- c_fit
- fits inside the box
- g_south_west
- anchored to the bottom-left corner · and 1 more like it
- co_rgb:99f6e4
- text colour #99f6e4
- f_jpg
- JPG format
- q_auto
- AI-chosen quality: smallest file that still looks right
A Moment (vertical short)
What "Share this moment" makes at 0:30: trimmed, cropped to 9:16 following the speaker, with word-timed captions burned in. The first open can take a few seconds while Cloudinary analyses the video.
…/video/upload/so_29,eo_44/c_fill,ar_9:16,w_720,g_auto/l_text:arial_46_bold:sum%20of%20the%20squares,co_white,b_rg…/fl_layer_apply,g_south,y_220,so_1.5,eo_2.2/fl_layer_apply,g_south,y_220,so_12,eo_13.7/f_auto:video,q_auto/pravaha/1ba747ae-bdb0-43b5-bd11-8a0eda32a02c.mp4
- so_29
- starts at 29 s · and 9 more like it
- eo_44
- ends at 44 s · and 9 more like it
- c_fill
- crops to fill the frame exactly
- ar_9:16
- aspect ratio 9 : 16 (vertical, for Reels and Shorts)
- w_720
- 720 px wide · and 9 more like it
- g_auto
- AI picks the focus (the speaker or slide), not a blind centre crop
- l_text:arial_46_bold:sum%20…
- text layer “sum of the squares” · and 8 more like it
- co_white
- text colour white · and 8 more like it
- b_rgb:000000b3
- background #000000b3 · and 8 more like it
- c_fit
- fits inside the box · and 8 more like it
- fl_layer_apply
- places the layer defined just before · and 8 more like it
- g_south
- anchored to the bottom · and 8 more like it
- y_220
- 220 px from the edge · and 8 more like it
- f_auto:video
- best format for each device (e.g. AV1, WebM, MP4, WebP)
- q_auto
- AI-chosen quality: smallest file that still looks right
Session in 60 seconds
The Study Pack's highlight reel: 5 AI-picked moments stitched into one labelled video with fl_splice.
…/video/upload/so_0,eo_16.6,w_1280,h_720,c_fill/l_video:pravaha:1ba747ae-bdb0-43b5-bd11-8a0eda32a02c,fl_spl…/so_14,eo_31.9,w_1280,h_720,c_fill/fl_layer_apply/fl_layer_apply/f_auto:video,q_auto/pravaha/1ba747ae-bdb0-43b5-bd11-8a0eda32a02c.mp4
- so_0
- starts at 0 s · and 4 more like it
- eo_16.6
- ends at 16.6 s · and 4 more like it
- w_1280
- 1280 px wide · and 4 more like it
- h_720
- 720 px tall · and 4 more like it
- c_fill
- crops to fill the frame exactly · and 4 more like it
- l_video:pravaha:1ba747ae-bd…
- another video (pravaha/1ba747ae-bdb0-43b5-bd11-8a0eda32a02c) as a layer · and 3 more like it
- fl_splice
- joins the next clip onto the end of this one · and 3 more like it
- fl_layer_apply
- places the layer defined just before · and 3 more like it
- f_auto:video
- best format for each device (e.g. AV1, WebM, MP4, WebP)
- q_auto
- AI-chosen quality: smallest file that still looks right
Compare reel
3 explanations of this concept, from different sessions, spliced into one video with fl_splice. Each clip is labelled with its speaker.
…/video/upload/so_0,eo_15.8,w_1280,h_720,c_fill/l_video:pravaha:56db377d-a244-4533-b61d-2be05387727b,fl_spl…/so_147.7,eo_165.6,w_1280,h_720,c_fill/fl_layer_apply/fl_layer_apply,g_north_west,x_40,y_40,so_33.7,eo_46.1/f_auto:video,q_auto/pravaha/e35b9255-3117-4881-98cb-f7b89dc4d1cc.mp4
- so_0
- starts at 0 s · and 5 more like it
- eo_15.8
- ends at 15.8 s · and 5 more like it
- w_1280
- 1280 px wide · and 2 more like it
- h_720
- 720 px tall · and 2 more like it
- c_fill
- crops to fill the frame exactly · and 2 more like it
- l_video:pravaha:56db377d-a2…
- another video (pravaha/56db377d-a244-4533-b61d-2be05387727b) as a layer
- fl_splice
- joins the next clip onto the end of this one · and 1 more like it
- fl_layer_apply
- places the layer defined just before · and 4 more like it
- l_video:pravaha:ff809418-97…
- another video (pravaha/ff809418-9768-43d9-ab11-dd64c8941e4d) as a layer
- l_text:arial_34_bold:1%20%C…
- text layer “1 · Prof. Prabir Kumar Biswas” · and 2 more like it
- co_white
- text colour white · and 2 more like it
- b_rgb:0f766ecc
- background #0f766ecc · and 2 more like it
- g_north_west
- anchored to the top-left corner · and 2 more like it
- x_40
- 40 px from the side · and 2 more like it
- y_40
- 40 px from the edge · and 2 more like it
- f_auto:video
- best format for each device (e.g. AV1, WebM, MP4, WebP)
- q_auto
- AI-chosen quality: smallest file that still looks right
Explanation thumbnail
The frame at that moment, cropped around the speaker by AI.
…/video/upload/so_0.1,c_fill,ar_16:9,w_640,g_auto/f_auto,q_auto/pravaha/e35b9255-3117-4881-98cb-f7b89dc4d1cc.jpg
- so_0.1
- starts at 0.1 s
- c_fill
- crops to fill the frame exactly
- ar_16:9
- aspect ratio 16 : 9
- w_640
- 640 px wide
- g_auto
- AI picks the focus (the speaker or slide), not a blind centre crop
- f_auto
- best format for each device (e.g. AV1, WebM, MP4, WebP)
- q_auto
- AI-chosen quality: smallest file that still looks right