[{"data":1,"prerenderedAt":2582},["ShallowReactive",2],{"blog-posts":3,"blog-count":2581},[4,100,163,426,990,1089,1167,1226,1297,1427,1522,1611,1819,2032,2134,2367,2496],{"id":5,"title":6,"body":7,"date":89,"description":90,"extension":91,"meta":92,"navigation":93,"path":94,"published":93,"seo":95,"seoTitle":96,"sitemap":97,"stem":98,"__hash__":99},"blog\u002Fblog\u002Frecording-folders.md","Folders For Your Recordings",{"type":8,"value":9,"toc":81},"minimark",[10,14,17,24,29,32,35,39,42,45,49,52,55,59,62,65,68,71],[11,12,13],"p",{},"Search and tags will find a recording when you can describe it. But sometimes you don't want to search at all. You just want to open a shelf and see what's on it.",[11,15,16],{},"So we've added folders to the library.",[11,18,19],{},[20,21],"img",{"alt":22,"src":23},"The folder tree in the recordings library","searchferret-folders.png",[25,26,28],"h2",{"id":27},"one-tree-shared","One Tree, Shared",[11,30,31],{},"Folders belong to your organisation, not to you. Everyone on the team sees the same tree, so when someone files a video under Onboarding, that's where the rest of the team goes looking for it.",[11,33,34],{},"You can nest them as deep as makes sense (up to 10 levels, which we hope you never need). \"Unfiled\" catches anything that hasn't been put away yet, and every folder carries a true count of what's inside it.",[25,36,38],{"id":37},"drag-and-drop","Drag And Drop",[11,40,41],{},"Moving things is mostly dragging. Pull a recording onto a folder in the sidebar to file it. Drag a folder onto another to nest it, and we'll ask you to confirm before anything moves. Drop something on the empty part of the panel and it goes back to the top level.",[11,43,44],{},"The breadcrumb along the top works the same way... the child folders sitting next to it are both links and drop targets, so you can move a video two folders down without leaving the page.",[25,46,48],{"id":47},"the-big-tidy-up","The Big Tidy-Up",[11,50,51],{},"Select a few recordings and a small bar appears with three options: Move to, Publish, and Delete. This one is really for the first clean-out, when everything you've recorded over the last six months is sitting in one long list.",[11,53,54],{},"Bulk publish queues each video the usual way, so you can carry on elsewhere while the transcodes tick over.",[25,56,58],{"id":57},"deleting-a-folder-doesnt-delete-videos","Deleting A Folder Doesn't Delete Videos",[11,60,61],{},"Worth saying plainly, because it's the thing people worry about. Removing a folder never removes what's in it. Those recordings simply return to the library root, waiting to be filed somewhere else.",[11,63,64],{},"Your expanded and collapsed folders are remembered between visits too, so the tree looks the way you left it.",[11,66,67],{},"If your library has grown past the point where scrolling works, spend 10 minutes making three or four folders. It's a good use of the time.",[11,69,70],{},"Until next time!",[11,72,73,77,80],{},[74,75,76],"strong",{},"Wouter",[78,79],"br",{},"\nFounder",{"title":82,"searchDepth":83,"depth":83,"links":84},"",2,[85,86,87,88],{"id":27,"depth":83,"text":28},{"id":37,"depth":83,"text":38},{"id":47,"depth":83,"text":48},{"id":57,"depth":83,"text":58},"2026-08-21","You can now file recordings into folders. One shared tree for the whole team, drag and drop to move things around, and bulk actions for the big tidy-up.","md",{},true,"\u002Fblog\u002Frecording-folders",{"title":6,"description":90},null,{"loc":94},"blog\u002Frecording-folders","tsiyNaG5UyT6O8xZIz-bY331UEbCmN-2tKtKFnKCMrU",{"id":101,"title":102,"body":103,"date":155,"description":156,"extension":91,"meta":157,"navigation":93,"path":158,"published":93,"seo":159,"seoTitle":96,"sitemap":160,"stem":161,"__hash__":162},"blog\u002Fblog\u002Fcaption-search-and-replace.md","Search and Replace for Captions",{"type":8,"value":104,"toc":151},[105,108,111,115,118,121,127,130,134,137,140,143,145],[11,106,107],{},"If you've spent any time editing captions, you'll know the pattern. The transcription gets a word wrong, and then it gets it wrong the same way, twelve times. A product name, someone's surname, a technical term... the machine mishears it once and commits to it.",[11,109,110],{},"Until now, fixing that meant editing each line by hand. So we've added search and replace to the caption editor.",[25,112,114],{"id":113},"how-it-works","How It Works",[11,116,117],{},"Open the caption editor and you'll see the usual search box. There's now a small arrow next to it. Click it and a replace field unfolds underneath, not too different from what you'd find in a code editor.",[11,119,120],{},"Type what you're searching for and what it should become. Every match is shown right in the caption list: the old text struck through on red, the new text next to it on green. You see exactly what's about to change before anything changes.",[11,122,123],{},[20,124],{"alt":125,"src":126},"Every match shown with the old text struck through in red and the replacement alongside in green","caption-search-replace.png",[11,128,129],{},"From there it's up to you. Replace handles the current match and moves to the next, so you can step through and skip any you're not sure about. Replace All does the whole lot in one go.",[25,131,133],{"id":132},"nothing-is-final-until-you-save","Nothing Is Final Until You Save",[11,135,136],{},"The replacements only live in the editor. Nothing touches your video until you hit \"Save captions\", so if a replace-all goes sideways, close the editor and you're back where you started.",[11,138,139],{},"While we were in there, the search counter got a little sharper too. It now counts every occurrence, not just the lines they appear on, so \"3\u002F14\" means exactly that.",[11,141,142],{},"It's a small thing, but it's the kind of small thing you end up reaching for more often than you'd expect.",[11,144,70],{},[11,146,147,149,80],{},[74,148,76],{},[78,150],{},{"title":82,"searchDepth":83,"depth":83,"links":152},[153,154],{"id":113,"depth":83,"text":114},{"id":132,"depth":83,"text":133},"2026-08-18","The caption editor now does search and replace. See every match before you commit, step through them one at a time, or replace the lot in one go.",{},"\u002Fblog\u002Fcaption-search-and-replace",{"title":102,"description":156},{"loc":158},"blog\u002Fcaption-search-and-replace","0RG_Sjt_yKMNlRaWtGKcZY3C8hCQHTxs8wVz-N6chVE",{"id":164,"title":165,"body":166,"date":155,"description":419,"extension":91,"meta":420,"navigation":93,"path":421,"published":93,"seo":422,"seoTitle":96,"sitemap":423,"stem":424,"__hash__":425},"blog\u002Fblog\u002Fembeddable-recorder.md","Let your users show you, right from your app",{"type":8,"value":167,"toc":411},[168,171,174,178,257,268,272,275,281,284,290,293,297,300,304,307,378,381,385,388,392,395,398,407],[11,169,170],{},"Most feedback arrives as text describing a video that was never made. A customer hits a bug, sees exactly what went wrong, and then... types. \"I clicked the thing and it broke.\" Three replies later you're still asking which thing.",[11,172,173],{},"The person who saw it happen is the best possible narrator of the problem, and the moment to record it is the moment it's on their screen. So we've made our recorder embeddable. You can now put it behind any button on your own site or web app.",[25,175,177],{"id":176},"one-tag","One tag",[179,180,184],"pre",{"className":181,"code":182,"language":183,"meta":82,"style":82},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript src=\"https:\u002F\u002Fsearchferret.com\u002Fembed.js\">\u003C\u002Fscript>\n\u003Cbutton data-searchferret-embed=\"YOUR_API_KEY\">Send feedback\u003C\u002Fbutton>\n","html",[185,186,187,224],"code",{"__ignoreMap":82},[188,189,192,196,200,204,207,210,214,216,219,221],"span",{"class":190,"line":191},"line",1,[188,193,195],{"class":194},"sMK4o","\u003C",[188,197,199],{"class":198},"swJcz","script",[188,201,203],{"class":202},"spNyl"," src",[188,205,206],{"class":194},"=",[188,208,209],{"class":194},"\"",[188,211,213],{"class":212},"sfazB","https:\u002F\u002Fsearchferret.com\u002Fembed.js",[188,215,209],{"class":194},[188,217,218],{"class":194},">\u003C\u002F",[188,220,199],{"class":198},[188,222,223],{"class":194},">\n",[188,225,226,228,231,234,236,238,241,243,246,250,253,255],{"class":190,"line":83},[188,227,195],{"class":194},[188,229,230],{"class":198},"button",[188,232,233],{"class":202}," data-searchferret-embed",[188,235,206],{"class":194},[188,237,209],{"class":194},[188,239,240],{"class":212},"YOUR_API_KEY",[188,242,209],{"class":194},[188,244,245],{"class":194},">",[188,247,249],{"class":248},"sTEyZ","Send feedback",[188,251,252],{"class":194},"\u003C\u002F",[188,254,230],{"class":198},[188,256,223],{"class":194},[11,258,259,260,263,264,267],{},"That's the integration. Any element with the ",[185,261,262],{},"data-searchferret-embed"," attribute becomes a trigger, or you can call ",[185,265,266],{},"searchferret.open()"," from your own code when you want control over the moment.",[25,269,271],{"id":270},"small-on-purpose","Small on purpose",[11,273,274],{},"When your user clicks, there's no takeover, no new tab, no modal filling the screen. A small widget appears in the corner of the page: pick screen, or screen plus camera, and record.",[11,276,277],{},[20,278],{"alt":279,"src":280},"The recorder widget open in the bottom corner of a customer dashboard, offering Screen and Screen + camera","embeddable-recorder.png",[11,282,283],{},"While recording, all they see is a round self-view bubble, a timer, and a stop button... with a faint sound wave moving behind the controls so they know their voice is being picked up. The page underneath keeps working the whole time.",[11,285,286],{},[20,287],{"alt":288,"src":289},"Recording in progress: a circular camera self-view above a small pill with the elapsed time and a stop button, floating over the page","embeddable-recorder-recording.png",[11,291,292],{},"Nothing to install, no account for the person recording. It's the browser's own screen sharing, running from your page.",[25,294,296],{"id":295},"private-by-default","Private by default",[11,298,299],{},"The recording uploads into your searchferret library, unpublished. Your team watches it, searches it, shares it internally... same as any recording you make yourselves. It only gets a public page if the API key carries the publish permission, and that's a box you tick deliberately, not a default. Feedback recorded on your site is usually for your eyes, so that's how it behaves.",[25,301,303],{"id":302},"you-know-who-recorded","You know who recorded",[11,305,306],{},"Pass the user's identity and any context from your app, and it's stored with the recording:",[179,308,310],{"className":181,"code":309,"language":183,"meta":82,"style":82},"\u003Cbutton\n  data-searchferret-embed=\"YOUR_API_KEY\"\n  data-searchferret-user='{\"id\":\"u_123\",\"email\":\"alice@example.com\",\"name\":\"Alice\"}'\n  data-searchferret-metadata='{\"plan\":\"pro\",\"view\":\"\u002Fbilling\"}'\n>Send feedback\u003C\u002Fbutton>\n",[185,311,312,319,333,350,365],{"__ignoreMap":82},[188,313,314,316],{"class":190,"line":191},[188,315,195],{"class":194},[188,317,318],{"class":198},"button\n",[188,320,321,324,326,328,330],{"class":190,"line":83},[188,322,323],{"class":202},"  data-searchferret-embed",[188,325,206],{"class":194},[188,327,209],{"class":194},[188,329,240],{"class":212},[188,331,332],{"class":194},"\"\n",[188,334,336,339,341,344,347],{"class":190,"line":335},3,[188,337,338],{"class":202},"  data-searchferret-user",[188,340,206],{"class":194},[188,342,343],{"class":194},"'",[188,345,346],{"class":212},"{\"id\":\"u_123\",\"email\":\"alice@example.com\",\"name\":\"Alice\"}",[188,348,349],{"class":194},"'\n",[188,351,353,356,358,360,363],{"class":190,"line":352},4,[188,354,355],{"class":202},"  data-searchferret-metadata",[188,357,206],{"class":194},[188,359,343],{"class":194},[188,361,362],{"class":212},"{\"plan\":\"pro\",\"view\":\"\u002Fbilling\"}",[188,364,349],{"class":194},[188,366,368,370,372,374,376],{"class":190,"line":367},5,[188,369,245],{"class":194},[188,371,249],{"class":248},[188,373,252],{"class":194},[188,375,230],{"class":198},[188,377,223],{"class":194},[11,379,380],{},"The page URL comes along automatically. So a recording arrives as \"Alice, on the billing page, on the pro plan, showing you the problem\", not as an anonymous file.",[25,382,384],{"id":383},"same-keys-new-permission","Same keys, new permission",[11,386,387],{},"If you've set up the public search embed, you already know the keys. This uses the same ones, managed in Settings → Integrations. Each key carries permissions... search, recorder, auto-publish... plus the list of domains it's allowed to run on. A key locked to your domain and ticked for recording only can't do anything else, so it's safe to ship in your HTML. Cycle or revoke it any time.",[25,389,391],{"id":390},"what-this-opens-up","What this opens up",[11,393,394],{},"A \"Report a problem\" button inside your app, and bug reports that show the bug. A support portal where customers show you what they're seeing instead of describing it. Client feedback on staging sites. UAT rounds where testers narrate what broke as it breaks. Testimonials collected from a page you control.",[11,396,397],{},"Anywhere \"just show me\" beats \"please describe\", really.",[11,399,400,401,406],{},"There's a full write-up on the ",[402,403,405],"a",{"href":404},"\u002Fembeddable-recorder","embeddable recorder page",", and the snippet is waiting in Settings → Integrations. If you wire it into something interesting, or something doesn't behave the way you'd expect, tell us. First release, rough edges get found by people using it.",[408,409,410],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":82,"searchDepth":83,"depth":83,"links":412},[413,414,415,416,417,418],{"id":176,"depth":83,"text":177},{"id":270,"depth":83,"text":271},{"id":295,"depth":83,"text":296},{"id":302,"depth":83,"text":303},{"id":383,"depth":83,"text":384},{"id":390,"depth":83,"text":391},"A screen recorder you can embed in your own site or web app. One script tag, a small corner widget for your visitors, and recordings that land privately in your library with their name attached.",{},"\u002Fblog\u002Fembeddable-recorder",{"title":165,"description":419},{"loc":421},"blog\u002Fembeddable-recorder","Wjr_JO2yNR-bq_a_OTuMLIIslb0pLgsRc8Zmf9y4WbY",{"id":427,"title":428,"body":429,"date":155,"description":983,"extension":91,"meta":984,"navigation":93,"path":985,"published":93,"seo":986,"seoTitle":96,"sitemap":987,"stem":988,"__hash__":989},"blog\u002Fblog\u002Fsearch-your-videos-from-your-own-website.md","Search your videos from your own website",{"type":8,"value":430,"toc":976},[431,434,437,440,444,447,489,492,498,513,594,597,603,606,610,613,649,652,898,930,934,937,940,947,950,954,957,960,964,967,970,973],[11,432,433],{},"A while back we shipped library-wide search... type a few words, land on the exact ten seconds where someone said them. It quickly became the way our own team finds things.",[11,435,436],{},"But that search lived inside searchferret, behind a sign-in. If you'd published a set of videos for your customers, a product walkthrough series, a help library, a course... your visitors couldn't search them. They could only scroll.",[11,438,439],{},"That's what we've opened up. Your published videos are now searchable from your own website.",[25,441,443],{"id":442},"one-tag-and-it-works","One tag, and it works",[11,445,446],{},"The quickest way in is the embed. One script tag, pasted into your site:",[179,448,450],{"className":181,"code":449,"language":183,"meta":82,"style":82},"\u003Cscript src=\"https:\u002F\u002Fsearchferret.com\u002Fsearch-widget.js\" data-searchferret-key=\"YOUR_API_KEY\" async>\u003C\u002Fscript>\n",[185,451,452],{"__ignoreMap":82},[188,453,454,456,458,460,462,464,467,469,472,474,476,478,480,483,485,487],{"class":190,"line":191},[188,455,195],{"class":194},[188,457,199],{"class":198},[188,459,203],{"class":202},[188,461,206],{"class":194},[188,463,209],{"class":194},[188,465,466],{"class":212},"https:\u002F\u002Fsearchferret.com\u002Fsearch-widget.js",[188,468,209],{"class":194},[188,470,471],{"class":202}," data-searchferret-key",[188,473,206],{"class":194},[188,475,209],{"class":194},[188,477,240],{"class":212},[188,479,209],{"class":194},[188,481,482],{"class":202}," async",[188,484,218],{"class":194},[188,486,199],{"class":198},[188,488,223],{"class":194},[11,490,491],{},"That gives your visitors a floating search button in the corner of the page:",[11,493,494],{},[20,495],{"alt":496,"src":497},"The floating search button, open on a documentation site, with a transcript match","public-search-floating.png",[11,499,500,501,504,505,508,509,512],{},"If you'd rather have a search box sitting inside your layout, drop a ",[185,502,503],{},"\u003Cdiv id=\"searchferret-search\">\u003C\u002Fdiv>"," where you want it and the box renders there instead. There's also a ",[185,506,507],{},"data-searchferret-target"," attribute if you want to point the script at any element by CSS selector, and ",[185,510,511],{},"data-searchferret-placeholder"," to change the prompt text.",[179,514,516],{"className":181,"code":515,"language":183,"meta":82,"style":82},"\u003Cdiv id=\"searchferret-search\">\u003C\u002Fdiv>\n\u003Cscript src=\"https:\u002F\u002Fsearchferret.com\u002Fsearch-widget.js\"\n        data-searchferret-key=\"YOUR_API_KEY\"\n        data-searchferret-placeholder=\"Search video tutorials…\" async>\u003C\u002Fscript>\n",[185,517,518,543,559,572],{"__ignoreMap":82},[188,519,520,522,525,528,530,532,535,537,539,541],{"class":190,"line":191},[188,521,195],{"class":194},[188,523,524],{"class":198},"div",[188,526,527],{"class":202}," id",[188,529,206],{"class":194},[188,531,209],{"class":194},[188,533,534],{"class":212},"searchferret-search",[188,536,209],{"class":194},[188,538,218],{"class":194},[188,540,524],{"class":198},[188,542,223],{"class":194},[188,544,545,547,549,551,553,555,557],{"class":190,"line":83},[188,546,195],{"class":194},[188,548,199],{"class":198},[188,550,203],{"class":202},[188,552,206],{"class":194},[188,554,209],{"class":194},[188,556,466],{"class":212},[188,558,332],{"class":194},[188,560,561,564,566,568,570],{"class":190,"line":335},[188,562,563],{"class":202},"        data-searchferret-key",[188,565,206],{"class":194},[188,567,209],{"class":194},[188,569,240],{"class":212},[188,571,332],{"class":194},[188,573,574,577,579,581,584,586,588,590,592],{"class":190,"line":352},[188,575,576],{"class":202},"        data-searchferret-placeholder",[188,578,206],{"class":194},[188,580,209],{"class":194},[188,582,583],{"class":212},"Search video tutorials…",[188,585,209],{"class":194},[188,587,482],{"class":202},[188,589,218],{"class":194},[188,591,199],{"class":198},[188,593,223],{"class":194},[11,595,596],{},"Visitors type, results appear as they go. Each result shows the video title, the matching line from the transcript with the matched words highlighted, and a timestamp. Clicking takes them to the video's public page.",[11,598,599],{},[20,600],{"alt":601,"src":602},"An inline search box on a help centre page, showing three transcript matches with highlighted terms and timestamps","public-search-inline.png",[11,604,605],{},"It's the same engine as the library search, so the same forgiveness applies... typos are tolerated, and a half-remembered phrase is usually enough.",[25,607,609],{"id":608},"or-build-it-yourself","Or build it yourself",[11,611,612],{},"If you'd rather wire search into your own interface, the widget is optional. There's a plain API underneath:",[179,614,618],{"className":615,"code":616,"language":617,"meta":82,"style":82},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl \"https:\u002F\u002Fsearchferret.com\u002Fapi\u002Fpublic\u002Fsearch\u002Fvideos?q=onboarding\" \\\n  -H \"x-api-key: YOUR_API_KEY\"\n","bash",[185,619,620,637],{"__ignoreMap":82},[188,621,622,626,629,632,634],{"class":190,"line":191},[188,623,625],{"class":624},"sBMFI","curl",[188,627,628],{"class":194}," \"",[188,630,631],{"class":212},"https:\u002F\u002Fsearchferret.com\u002Fapi\u002Fpublic\u002Fsearch\u002Fvideos?q=onboarding",[188,633,209],{"class":194},[188,635,636],{"class":248}," \\\n",[188,638,639,642,644,647],{"class":190,"line":83},[188,640,641],{"class":212},"  -H",[188,643,628],{"class":194},[188,645,646],{"class":212},"x-api-key: YOUR_API_KEY",[188,648,332],{"class":194},[11,650,651],{},"You get back JSON: titles, highlighted transcript snippets, timestamps, thumbnails, and a link to each video's watch page.",[179,653,657],{"className":654,"code":655,"language":656,"meta":82,"style":82},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"data\": [\n    {\n      \"kind\": \"moment\",\n      \"videoId\": \"68f2a41b9c1d2e3f45a6b7c8\",\n      \"title\": \"Onboarding walkthrough\",\n      \"url\": \"https:\u002F\u002Fsearchferret.com\u002Fvideos\u002F68f2a41b9c1d2e3f45a6b7c8\",\n      \"thumbnailUrl\": \"https:\u002F\u002F…\u002Fthumbnail.jpg\",\n      \"snippet\": \"start with the \u003Cmark>onboarding\u003C\u002Fmark> checklist on the left\",\n      \"text\": \"start with the onboarding checklist on the left\",\n      \"start\": 95.1,\n      \"end\": 98.5\n    }\n  ],\n  \"total\": 3\n}\n","json",[185,658,659,664,680,685,707,727,748,769,790,811,832,850,865,871,877,892],{"__ignoreMap":82},[188,660,661],{"class":190,"line":191},[188,662,663],{"class":194},"{\n",[188,665,666,669,672,674,677],{"class":190,"line":83},[188,667,668],{"class":194},"  \"",[188,670,671],{"class":202},"data",[188,673,209],{"class":194},[188,675,676],{"class":194},":",[188,678,679],{"class":194}," [\n",[188,681,682],{"class":190,"line":335},[188,683,684],{"class":194},"    {\n",[188,686,687,690,693,695,697,699,702,704],{"class":190,"line":352},[188,688,689],{"class":194},"      \"",[188,691,692],{"class":624},"kind",[188,694,209],{"class":194},[188,696,676],{"class":194},[188,698,628],{"class":194},[188,700,701],{"class":212},"moment",[188,703,209],{"class":194},[188,705,706],{"class":194},",\n",[188,708,709,711,714,716,718,720,723,725],{"class":190,"line":367},[188,710,689],{"class":194},[188,712,713],{"class":624},"videoId",[188,715,209],{"class":194},[188,717,676],{"class":194},[188,719,628],{"class":194},[188,721,722],{"class":212},"68f2a41b9c1d2e3f45a6b7c8",[188,724,209],{"class":194},[188,726,706],{"class":194},[188,728,730,732,735,737,739,741,744,746],{"class":190,"line":729},6,[188,731,689],{"class":194},[188,733,734],{"class":624},"title",[188,736,209],{"class":194},[188,738,676],{"class":194},[188,740,628],{"class":194},[188,742,743],{"class":212},"Onboarding walkthrough",[188,745,209],{"class":194},[188,747,706],{"class":194},[188,749,751,753,756,758,760,762,765,767],{"class":190,"line":750},7,[188,752,689],{"class":194},[188,754,755],{"class":624},"url",[188,757,209],{"class":194},[188,759,676],{"class":194},[188,761,628],{"class":194},[188,763,764],{"class":212},"https:\u002F\u002Fsearchferret.com\u002Fvideos\u002F68f2a41b9c1d2e3f45a6b7c8",[188,766,209],{"class":194},[188,768,706],{"class":194},[188,770,772,774,777,779,781,783,786,788],{"class":190,"line":771},8,[188,773,689],{"class":194},[188,775,776],{"class":624},"thumbnailUrl",[188,778,209],{"class":194},[188,780,676],{"class":194},[188,782,628],{"class":194},[188,784,785],{"class":212},"https:\u002F\u002F…\u002Fthumbnail.jpg",[188,787,209],{"class":194},[188,789,706],{"class":194},[188,791,793,795,798,800,802,804,807,809],{"class":190,"line":792},9,[188,794,689],{"class":194},[188,796,797],{"class":624},"snippet",[188,799,209],{"class":194},[188,801,676],{"class":194},[188,803,628],{"class":194},[188,805,806],{"class":212},"start with the \u003Cmark>onboarding\u003C\u002Fmark> checklist on the left",[188,808,209],{"class":194},[188,810,706],{"class":194},[188,812,814,816,819,821,823,825,828,830],{"class":190,"line":813},10,[188,815,689],{"class":194},[188,817,818],{"class":624},"text",[188,820,209],{"class":194},[188,822,676],{"class":194},[188,824,628],{"class":194},[188,826,827],{"class":212},"start with the onboarding checklist on the left",[188,829,209],{"class":194},[188,831,706],{"class":194},[188,833,835,837,840,842,844,848],{"class":190,"line":834},11,[188,836,689],{"class":194},[188,838,839],{"class":624},"start",[188,841,209],{"class":194},[188,843,676],{"class":194},[188,845,847],{"class":846},"sbssI"," 95.1",[188,849,706],{"class":194},[188,851,853,855,858,860,862],{"class":190,"line":852},12,[188,854,689],{"class":194},[188,856,857],{"class":624},"end",[188,859,209],{"class":194},[188,861,676],{"class":194},[188,863,864],{"class":846}," 98.5\n",[188,866,868],{"class":190,"line":867},13,[188,869,870],{"class":194},"    }\n",[188,872,874],{"class":190,"line":873},14,[188,875,876],{"class":194},"  ],\n",[188,878,880,882,885,887,889],{"class":190,"line":879},15,[188,881,668],{"class":194},[188,883,884],{"class":202},"total",[188,886,209],{"class":194},[188,888,676],{"class":194},[188,890,891],{"class":846}," 3\n",[188,893,895],{"class":190,"line":894},16,[188,896,897],{"class":194},"}\n",[11,899,900,901,903,904,907,908,910,911,913,914,903,916,919,920,910,923,926,927,929],{},"A ",[185,902,692],{}," of ",[185,905,906],{},"\"moment\""," is a match inside the transcript, with ",[185,909,839],{}," and ",[185,912,857],{}," in seconds. A ",[185,915,692],{},[185,917,918],{},"\"video\""," means the title itself matched. Pass ",[185,921,922],{},"limit",[185,924,925],{},"offset"," for paging, or ",[185,928,713],{}," to search within a single video. Build whatever you like on top of it.",[25,931,933],{"id":932},"keys-and-who-gets-to-search","Keys, and who gets to search",[11,935,936],{},"Access runs on API keys, managed from Settings → Integrations in your organisation.",[11,938,939],{},"Each key carries permissions, ticked when you create it. For search, give it the Search permission. Keys created before permissions existed keep working for search, nothing to redo.",[11,941,942,943,946],{},"Each key also carries a list of allowed domains. A key locked to ",[185,944,945],{},"https:\u002F\u002Fyourcompany.com"," only works from pages on that domain, so shipping it in your public HTML is fine... that's what it's for. A key with no domains works server-to-server instead, for when you're calling the API from your own backend.",[11,948,949],{},"Keys can be renamed, disabled, cycled (a fresh secret, same settings, the old one stops working immediately), or deleted. The secret is shown once, at creation, and never again. Requests are rate limited per key.",[25,951,953],{"id":952},"whats-searchable-and-what-isnt","What's searchable, and what isn't",[11,955,956],{},"Only published videos. That line is worth being clear about.",[11,958,959],{},"Anything unpublished, private, or password-protected stays out of public results entirely... titles, transcripts, all of it. Publishing a video is what makes it searchable from outside, and unpublishing removes it from results again. The search index follows your library the same way it always has.",[25,961,963],{"id":962},"where-this-fits","Where this fits",[11,965,966],{},"If you're using searchferret for internal recordings only, nothing changes for you. No key, no public search.",[11,968,969],{},"But if you've built something meant to be watched... a support library, product tutorials, a course, a video changelog... your visitors can now find the moment they need instead of scrubbing through videos hoping to spot it. That gap between \"the answer exists in a video\" and \"the person found it\" is the same one we closed for teams internally. This closes it for your audience too.",[11,971,972],{},"If you try it and something doesn't behave the way you'd expect, tell us. This is a first release, and the rough edges get found by people using it, not by us staring at it.",[408,974,975],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":82,"searchDepth":83,"depth":83,"links":977},[978,979,980,981,982],{"id":442,"depth":83,"text":443},{"id":608,"depth":83,"text":609},{"id":932,"depth":83,"text":933},{"id":952,"depth":83,"text":953},{"id":962,"depth":83,"text":963},"The same search that powers your searchferret library, now available on your own site. A one-tag embed for visitors, an API for builders, and keys you control. Published videos only.",{},"\u002Fblog\u002Fsearch-your-videos-from-your-own-website",{"title":428,"description":983},{"loc":985},"blog\u002Fsearch-your-videos-from-your-own-website","7Hl-_cBlcOh07aE6m4wYCGY6h7-SP1QySBxNMISN_E4",{"id":991,"title":992,"body":993,"date":1081,"description":1082,"extension":91,"meta":1083,"navigation":93,"path":1084,"published":93,"seo":1085,"seoTitle":96,"sitemap":1086,"stem":1087,"__hash__":1088},"blog\u002Fblog\u002Fmagic-links-for-any-video.md","Magic links, now for any recording",{"type":8,"value":994,"toc":1075},[995,1003,1006,1009,1013,1016,1019,1022,1026,1029,1035,1041,1047,1051,1054,1057,1060,1064,1067,1069],[11,996,997,998,1002],{},"When we shipped ",[402,999,1001],{"href":1000},"\u002Fblog\u002Fprivate-video-sharing","private recordings",", they came with a magic link: a long, unguessable URL you can hand to someone outside your team. Anyone holding the link can watch, no account, no sign-in. The link is the key.",[11,1004,1005],{},"The catch was that magic links only worked on private recordings. If a video was team-visible and one outside person needed to see it, you had two options: publish it, or flip it to private first. Both felt like more ceremony than the job deserved.",[11,1007,1008],{},"So we've untied the two. Any recording in your library can now have a magic link, team-visible or private.",[25,1010,1012],{"id":1011},"publishing-is-more-than-you-sometimes-need","Publishing is more than you sometimes need",[11,1014,1015],{},"Publishing is the full treatment. Your video gets transcoded into streaming formats and quality levels, a public page, your player branding, analytics. When a video is going in front of prospects or customers, or you want it to stream beautifully on any device, that's exactly what you want.",[11,1017,1018],{},"But a lot of sharing isn't that. A contractor needs to see one walkthrough. A client is waiting on a fix and just needs to watch you confirm it. An external examiner needs a single lecture recording. Transcoding a video into multiple formats so one person can watch it once is more than the job needs.",[11,1020,1021],{},"A magic link skips all of it. The recording stays exactly as it is in your library (no transcoding, no public page) and the person on the other end just opens the link and watches.",[25,1023,1025],{"id":1024},"where-youll-find-it","Where you'll find it",[11,1027,1028],{},"Three places, depending on where you are when you need it.",[11,1030,1031,1034],{},[74,1032,1033],{},"In your library."," The menu on any recording you own now has Copy magic link, Copy thumbnail, and Copy magic link & thumbnail. It's the same trio published recordings get, just pointing at the magic link instead. If the recording doesn't have a link yet, we ask before creating one, so a stray click never opens anything up.",[11,1036,1037,1040],{},[74,1038,1039],{},"On the recording's Share tab."," Same as before: create the link, copy it, generate a fresh one, or turn it off. It's just no longer only for private recordings.",[11,1042,1043,1046],{},[74,1044,1045],{},"On the save screen, right after you record."," There's now a \"Create magic link on save\" switch next to the Team and Private options. Flip it on, save to cloud, and the buttons at the bottom become Copy magic link and Copy magic link & thumbnail. Record, save, paste the link into the conversation you were already having. That's the whole workflow.",[25,1048,1050],{"id":1049},"still-yours-to-control","Still yours to control",[11,1052,1053],{},"Nothing has changed about who's in charge. Creating a link is owner-only. You can generate a fresh link, which kills the old one immediately, or turn it off, which leaves no working link at all.",[11,1055,1056],{},"One behaviour has changed, and it's worth saying plainly: a magic link used to turn off when you switched a recording back to Team. It doesn't anymore. The link and the library visibility are now separate things. Switch between Team and Private as much as you like and the link keeps working. The one thing that does turn a link off is publishing, because a published video already has a public page, and two front doors to the same video is one too many.",[11,1058,1059],{},"And the honest trade hasn't changed either: anyone holding the link can watch. Treat the link like a key.",[25,1061,1063],{"id":1062},"the-short-version","The short version",[11,1065,1066],{},"Publish when a video deserves the full treatment. For everything else, the one-viewer, watch-it-once, outside-the-team moments, any recording can now carry a magic link... and you can copy it from the library, the Share tab, or the save screen the moment you stop recording.",[11,1068,70],{},[11,1070,1071,1073,80],{},[74,1072,76],{},[78,1074],{},{"title":82,"searchDepth":83,"depth":83,"links":1076},[1077,1078,1079,1080],{"id":1011,"depth":83,"text":1012},{"id":1024,"depth":83,"text":1025},{"id":1049,"depth":83,"text":1050},{"id":1062,"depth":83,"text":1063},"2026-08-12","Magic links used to be a private-recording feature. Now any recording in your library can have one, so you can share a video with someone outside your team without publishing it first.",{},"\u002Fblog\u002Fmagic-links-for-any-video",{"title":992,"description":1082},{"loc":1084},"blog\u002Fmagic-links-for-any-video","WYfPmRabKJE5okV9THQS0WwToB1QfNwEeB4IBkYyfLM",{"id":1090,"title":1091,"body":1092,"date":1159,"description":1160,"extension":91,"meta":1161,"navigation":93,"path":1162,"published":93,"seo":1163,"seoTitle":96,"sitemap":1164,"stem":1165,"__hash__":1166},"blog\u002Fblog\u002Fa-tidier-library-list.md","A Tidier Library List",{"type":8,"value":1093,"toc":1154},[1094,1097,1100,1104,1107,1110,1113,1117,1120,1133,1136,1140,1143,1146,1148],[11,1095,1096],{},"This one is less of a feature and more of a fix-up, but it's the kind of fix-up that makes the library feel trustworthy again, so it deserves a few words.",[11,1098,1099],{},"The recordings page has two views: a thumbnail grid, and a list grouped by access... Team, Shared with me, Shared by me, Private to me, Published, plus your local drafts. The grouped list is the one that needed the work.",[25,1101,1103],{"id":1102},"what-was-wrong","What Was Wrong",[11,1105,1106],{},"The old list built its sections from whatever page of results happened to be loaded. The library is paginated server-side (ten items at a time), so the sections were only ever a view over the current page.",[11,1108,1109],{},"In practice, that meant a video you knew was shared with you might not appear under \"Shared with me\"... it was simply sitting on the third page. Counts were off. Sections came and went as you paged. Not great.",[11,1111,1112],{},"To be fair, it worked fine when libraries were small enough to fit on one page. Then they weren't.",[25,1114,1116],{"id":1115},"what-it-does-now","What It Does Now",[11,1118,1119],{},"Each section now asks the server for its own items and its own true count, and the overview loads the first five of every section in parallel. So:",[1121,1122,1123,1127,1130],"ul",{},[1124,1125,1126],"li",{},"The number on each section header is the real total, not \"how many landed on this page\".",[1124,1128,1129],{},"\"View all\" opens that section on its own, with proper pagination.",[1124,1131,1132],{},"The section you're viewing lives in the URL, so a refresh (or the back button) keeps your place.",[11,1134,1135],{},"Your choice of grid or list is remembered between visits. One small detail we're fond of: the grid now pages at 12 items instead of 10, because it lays out three or four tiles per row... a page of 10 always ended on a ragged row.",[25,1137,1139],{"id":1138},"faster-status-too","Faster Status Too",[11,1141,1142],{},"While we were in there, we changed how publish and transcode state reaches the list. It used to be fetched separately, after the items had already rendered. Now every item arrives with its state attached, so badges like \"Transcoding...\" show immediately and update live as the video becomes ready.",[11,1144,1145],{},"None of this is glamorous... it's list plumbing. But this is a page many of you look at every day, and it should tell the truth about what's in your library. Now it does.",[11,1147,70],{},[11,1149,1150,1152,80],{},[74,1151,76],{},[78,1153],{},{"title":82,"searchDepth":83,"depth":83,"links":1155},[1156,1157,1158],{"id":1102,"depth":83,"text":1103},{"id":1115,"depth":83,"text":1116},{"id":1138,"depth":83,"text":1139},"2026-07-30","We reworked the recordings list view. Sections now fetch their own items and show true counts, instead of grouping whatever page happened to be loaded.",{},"\u002Fblog\u002Fa-tidier-library-list",{"title":1091,"description":1160},{"loc":1162},"blog\u002Fa-tidier-library-list","KlKnq-1WV9YLZEHUrJIQGBHc1HqW78BpTtldrjyKXN8",{"id":1168,"title":1169,"body":1170,"date":1218,"description":1219,"extension":91,"meta":1220,"navigation":93,"path":1221,"published":93,"seo":1222,"seoTitle":96,"sitemap":1223,"stem":1224,"__hash__":1225},"blog\u002Fblog\u002Fis-this-thing-on.md","Is This Thing On?",{"type":8,"value":1171,"toc":1213},[1172,1175,1178,1182,1185,1188,1192,1195,1199,1202,1205,1207],[11,1173,1174],{},"There are few things more deflating than finishing a 10 minute walkthrough, playing it back, and hearing... nothing. You spoke. The recorder didn't hear you. A handful of you have written in about exactly this, and honestly, it's happened to us too.",[11,1176,1177],{},"So we've made three small additions.",[25,1179,1181],{"id":1180},"a-live-mic-meter","A Live Mic Meter",[11,1183,1184],{},"There's now a small level meter next to the recording controls. It reads the same audio that's actually being recorded... not just your mic in general... so if the bars move when you talk, your recording will have sound. Say something before you hit record and watch it respond. Once it hears you, the icon flips green.",[11,1186,1187],{},"It's a tiny thing, but it turns \"I assume the mic works\" into \"I can see the mic works\".",[25,1189,1191],{"id":1190},"a-warning-when-it-doesnt","A Warning When It Doesn't",[11,1193,1194],{},"If we can't get hold of your microphone (permissions, another app hogging it, that sort of thing), we no longer carry on quietly. You'll get a clear alert over the preview before you record, so you can sort it out first... or at least make a silent recording on purpose rather than by surprise.",[25,1196,1198],{"id":1197},"a-mute-button","A Mute Button",[11,1200,1201],{},"And for the opposite case: sometimes you want the mic off. There's now a mute button in the recording controls, including in the floating controls window. It mutes only your microphone... any tab or system audio you're sharing keeps recording.",[11,1203,1204],{},"Short and sweet, as promised. May your recordings always have the sound you intended.",[11,1206,70],{},[11,1208,1209,1211,80],{},[74,1210,76],{},[78,1212],{},{"title":82,"searchDepth":83,"depth":83,"links":1214},[1215,1216,1217],{"id":1180,"depth":83,"text":1181},{"id":1190,"depth":83,"text":1191},{"id":1197,"depth":83,"text":1198},"2026-07-20","A live mic level meter, a proper warning when your mic fails, and a mute button in the recording controls. Small additions, one less silent recording.",{},"\u002Fblog\u002Fis-this-thing-on",{"title":1169,"description":1219},{"loc":1221},"blog\u002Fis-this-thing-on","XTzzpByO06g7XUgoqZjjSEuHxmbLTdq4TiHzwKEzAAY",{"id":1227,"title":1228,"body":1229,"date":1289,"description":1290,"extension":91,"meta":1291,"navigation":93,"path":1292,"published":93,"seo":1293,"seoTitle":96,"sitemap":1294,"stem":1295,"__hash__":1296},"blog\u002Fblog\u002Fdraw-on-your-videos.md","Draw on Your Videos",{"type":8,"value":1230,"toc":1283},[1231,1234,1237,1239,1242,1245,1249,1252,1255,1259,1262,1266,1269,1272,1275,1277],[11,1232,1233],{},"We recently gave the screenshot editor a proper set of drawing tools. Arrows, boxes, circles, text and a freehand pen. The moment they landed, the next question was sitting right there... if we can draw on a screenshot, why not on a video?",[11,1235,1236],{},"So that's what we've done. The same tools now work in the recorder.",[25,1238,114],{"id":113},[11,1240,1241],{},"Start a screen recording (with or without your camera) and you'll find a small toolbar at the top of the preview: arrow, shape, pen, text, undo and redo. Anything you place on the preview is drawn straight into the video, live. Circle a button mid-sentence and your viewer sees the circle appear mid-sentence.",[11,1243,1244],{},"You can also set the scene before you hit record. Drop an arrow on the thing you're about to explain, start the countdown, and it's there from the first frame.",[25,1246,1248],{"id":1247},"the-pen","The Pen",[11,1250,1251],{},"The pen is the one we keep reaching for. Click it, pick a colour and thickness right on the toolbar, and scribble. Underline the line of code. Circle the number that matters. Draw the squiggle that says \"this bit, right here\".",[11,1253,1254],{},"Every stroke is its own layer, so undo removes one stroke at a time, and you can still move, recolour or thicken a stroke afterwards from the sidebar.",[25,1256,1258],{"id":1257},"layers-same-as-screenshots","Layers, Same as Screenshots",[11,1260,1261],{},"The sidebar carries the same layers panel as the screenshot editor. Select a layer to tweak it, delete the ones you don't want, or clear the lot with one click. Undo and redo work with the shortcuts you'd expect (⌘Z \u002F ⌘⇧Z), and the camera bubble stays fully draggable while you work around it.",[25,1263,1265],{"id":1264},"one-thing-to-know","One Thing To Know",[11,1267,1268],{},"The drawings become part of the video itself. They're composited into the recording as you make them, which is exactly what makes the live pointing work... but it also means they can't be removed after the fact. If you restart a take, you start with a clean slate.",[11,1270,1271],{},"Annotations you can edit after recording would be a much bigger piece of work, so for now, live and permanent is the deal. We think it's the right trade... it keeps the whole thing simple and immediate, like drawing on a whiteboard while you talk.",[11,1273,1274],{},"If you record walkthroughs, teach, or answer support questions with video, we think this one will quietly earn its keep.",[11,1276,70],{},[11,1278,1279,1281,80],{},[74,1280,76],{},[78,1282],{},{"title":82,"searchDepth":83,"depth":83,"links":1284},[1285,1286,1287,1288],{"id":113,"depth":83,"text":114},{"id":1247,"depth":83,"text":1248},{"id":1257,"depth":83,"text":1258},{"id":1264,"depth":83,"text":1265},"2026-07-15","The screenshot editor's drawing tools now work in the video recorder. Arrows, boxes, circles, text and the freehand pen... drawn live, while you record.",{},"\u002Fblog\u002Fdraw-on-your-videos",{"title":1228,"description":1290},{"loc":1292},"blog\u002Fdraw-on-your-videos","HWAIlHHLP1a4k3F7_v6bJBffCWHI-oPjbHwgF_oKG3s",{"id":1298,"title":1299,"body":1300,"date":1420,"description":1421,"extension":91,"meta":1422,"navigation":93,"path":1000,"published":93,"seo":1423,"seoTitle":96,"sitemap":1424,"stem":1425,"__hash__":1426},"blog\u002Fblog\u002Fprivate-video-sharing.md","Private recordings, shared with just the people you choose",{"type":8,"value":1301,"toc":1412},[1302,1314,1317,1320,1323,1326,1332,1338,1341,1345,1348,1351,1354,1357,1361,1364,1367,1370,1374,1377,1380,1383,1386,1389,1393,1396,1399,1401,1404,1406],[1303,1304,1305],"blockquote",{},[11,1306,1307,1310,1311,1313],{},[74,1308,1309],{},"Update, 12 August 2026:"," Magic links are no longer a private-only feature. Any recording can have one now, team-visible or private, and a link survives switching between the two. The full story is in ",[402,1312,992],{"href":1084},".",[11,1315,1316],{},"Up to now, every recording you sent to your team's library was visible to the whole team. That's the right default for async work, and it's still the default. But it isn't right for everything.",[11,1318,1319],{},"So we've added a simple control. Any recording can now be one of two things: visible to your team, or private to you and the specific people you share it with.",[25,1321,1322],{"id":113},"How it works",[11,1324,1325],{},"Open a recording and you'll find a sharing control with two options.",[11,1327,1328,1331],{},[74,1329,1330],{},"Team"," is the default. Everyone in your organisation can open it, the same as before.",[11,1333,1334,1337],{},[74,1335,1336],{},"Private"," flips it the other way. The recording is visible to you, and to nobody else, until you add people. You pick the teammates who should see it, and only they can. Leave the list empty and it stays private to just you.",[11,1339,1340],{},"That's the whole thing. No new place to learn, no separate settings page. It sits right on the recording.",[25,1342,1344],{"id":1343},"sharing-with-someone-outside-your-team","Sharing with someone outside your team",[11,1346,1347],{},"Sometimes the person who needs to see a private recording isn't on your team at all. A client waiting on a fix. A contractor. Someone who doesn't have an account and shouldn't need one.",[11,1349,1350],{},"For that, you can create a magic link. It's a long, unguessable URL, and anyone who has it can open the recording and watch, without signing in. The recording still stays private in your library. It doesn't show up for your team, and it stays out of search. The link is the only way in.",[11,1352,1353],{},"Creating the link is owner-only, the same as everything else here, and you stay in control of it. You can copy it, generate a fresh one, or turn it off. Generating a fresh one kills the old link straight away, so if it's been forwarded further than you meant, a new link cuts the old one off. Turning it off leaves no working link at all.",[11,1355,1356],{},"One thing worth noting. Anyone holding the link can watch, so treat the link itself like a key. That's the trade for not making people sign in. (This post originally said switching back to Team turns the link off. It did at the time, but it doesn't anymore. Magic links now work on any recording, team or private, and the link stays live when you switch.)",[25,1358,1360],{"id":1359},"why-team-stays-the-default","Why team stays the default",[11,1362,1363],{},"searchferret exists so teams can share context without booking another call. That only works when sharing is the easy, normal thing, so team-visible is still what happens unless you say otherwise.",[11,1365,1366],{},"Private is for the smaller set of recordings that shouldn't be team-wide. A walkthrough about one person's work. A sensitive bug. A rough draft you're not ready to put in front of everyone. For those, you reach for private and choose who's in.",[11,1368,1369],{},"We didn't want privacy to be the kind of feature you have to think about every time you record. You shouldn't. Record, share with your team, get on with your day. Private is there for the few times you need it.",[25,1371,1373],{"id":1372},"the-part-we-thought-hardest-about","The part we thought hardest about",[11,1375,1376],{},"Here's the decision that took the most thinking. When you mark a recording private, who can override that?",[11,1378,1379],{},"The common answer is that admins and owners can see everything. It's convenient, and on a spreadsheet it looks like control.",[11,1381,1382],{},"We went the other way. If you make a recording private, it's private. An admin can't quietly open it. An owner can't either. There's no backdoor, on purpose.",[11,1384,1385],{},"The reason is trust. \"Private\" should mean what the word says. If a private recording were only private from your peers but open to whoever holds the top role, then it isn't really private, it's just private from some people. We'd rather it mean the plain thing.",[11,1387,1388],{},"That carries through to search, too. We shipped library-wide search a while back so you can find any recording by what was said in it. A private recording stays out of those results for anyone you haven't shared it with. So it won't surface in a search by transcript, by title, or by tag. Private is private in the list, on the page, and in search, or it isn't private at all.",[25,1390,1392],{"id":1391},"a-couple-of-honest-limits","A couple of honest limits",[11,1394,1395],{},"If a recording is already published, with a public link out in the world, you can't flip it to private while that link exists. There's a public copy out there already, so making the original private wouldn't undo that. Unpublish it first, then make it private.",[11,1397,1398],{},"And here's what's still open. Right now, control of a private recording sits with the person who made it. That's the behaviour we wanted, but it has an edge we haven't fully settled: if someone leaves the team, recordings they kept private to themselves don't automatically pass to anyone. I'd rather name that plainly than pretend it's solved. We're working out the cleanest way to handle it, and I'll say so here when we do.",[25,1400,1063],{"id":1062},[11,1402,1403],{},"Most recordings should be seen by your team, so that's still the default. The ones that shouldn't can now be private, shared with exactly the people you choose, and private really does mean private.",[11,1405,70],{},[11,1407,1408,1410,80],{},[74,1409,76],{},[78,1411],{},{"title":82,"searchDepth":83,"depth":83,"links":1413},[1414,1415,1416,1417,1418,1419],{"id":113,"depth":83,"text":1322},{"id":1343,"depth":83,"text":1344},{"id":1359,"depth":83,"text":1360},{"id":1372,"depth":83,"text":1373},{"id":1391,"depth":83,"text":1392},{"id":1062,"depth":83,"text":1063},"2026-06-30","Every recording used to be visible to your whole team. Now you can mark one private, share it with only the teammates you pick, or hand out a magic link to someone outside the team. Here's how it works, and the one decision we thought hardest about.",{},{"title":1299,"description":1421},{"loc":1000},"blog\u002Fprivate-video-sharing","4w1eDBm2kmo4JQVRYZeimeK3JQcfKvN4tm9HViEdSaM",{"id":1428,"title":1429,"body":1430,"date":1514,"description":1515,"extension":91,"meta":1516,"navigation":93,"path":1517,"published":93,"seo":1518,"seoTitle":96,"sitemap":1519,"stem":1520,"__hash__":1521},"blog\u002Fblog\u002Fremoving-user-limits.md","We removed user limits from every team plan",{"type":8,"value":1431,"toc":1506},[1432,1435,1438,1442,1445,1448,1452,1455,1458,1462,1465,1468,1471,1474,1478,1481,1488,1492,1495,1498,1500,1503],[11,1433,1434],{},"We just took the per-user cap off all of searchferret's team plans. You can add your whole team now. No seat math, no upgrade nudge every time someone new joins.",[11,1436,1437],{},"Here's the decision, and the thinking behind it, in case it's useful to anyone weighing the same thing.",[25,1439,1441],{"id":1440},"what-changed","What changed",[11,1443,1444],{},"Before today, team plans had a limit on how many people you could add. Hit the cap, and adding the next person meant moving up a tier.",[11,1446,1447],{},"That limit is gone. Every team plan is now uncapped on users. Same plan, same price, as many people as you want.",[25,1449,1451],{"id":1450},"why-we-capped-seats-in-the-first-place","Why we capped seats in the first place",[11,1453,1454],{},"Per-seat limits are the default for a reason. They're easy to reason about, easy to price, and they grow revenue in a clean, predictable line as a customer's team grows.",[11,1456,1457],{},"So we did the normal thing. It looked sensible on a spreadsheet.",[25,1459,1461],{"id":1460},"the-comment-that-changed-our-minds","The comment that changed our minds",[11,1463,1464],{},"A friend told me the user limit was the one thing in our pricing that didn't sit right with him.",[11,1466,1467],{},"He put it plainly. Picture the company with six people. They get all the way through a tier built for five, and now they pay the same as a company with twenty-five. They're barely over the line, paying for room they don't use, while a five-person team right next to them pays less. He said he felt sorry for them.",[11,1469,1470],{},"He was right. We could feel it the moment he said it.",[11,1472,1473],{},"searchferret is built for teams that record and share async instead of booking another call. The whole idea only works when the whole team is in. A per-seat cap quietly fought that. Every new teammate became a small decision against adding them, because the wrong sixth person tipped you into a bigger bill. We were charging against the exact behaviour we most wanted to encourage. That's backwards.",[25,1475,1477],{"id":1476},"what-this-means-for-your-team","What this means for your team",[11,1479,1480],{},"Bring everyone. The engineer who records one walkthrough a month and the support lead who lives in it cost you the same, which is to say the headcount no longer changes the price.",[11,1482,1483,1484,1313],{},"If you've been keeping someone off the account to stay under the cap, you don't need to anymore. If you want the fuller picture of how searchferret works once the whole team is in, we wrote it up on ",[402,1485,1487],{"href":1486},"\u002Fbranded-recorder-for-teams","our page for teams",[25,1489,1491],{"id":1490},"whats-still-open","What's still open",[11,1493,1494],{},"I'll be plain about the part I don't have figured out. Removing the cap changes the cost picture, and a few very heavy teams could move our unit economics in ways I can't fully predict yet.",[11,1496,1497],{},"I'd rather learn that and adjust than keep a limit that discourages the right behaviour. If something needs to change later, I'll say so here rather than quietly tightening things back up.",[25,1499,1063],{"id":1062},[11,1501,1502],{},"The number of people on your team isn't what we want to charge for. So we stopped.",[11,1504,1505],{},"Until next time.",{"title":82,"searchDepth":83,"depth":83,"links":1507},[1508,1509,1510,1511,1512,1513],{"id":1440,"depth":83,"text":1441},{"id":1450,"depth":83,"text":1451},{"id":1460,"depth":83,"text":1461},{"id":1476,"depth":83,"text":1477},{"id":1490,"depth":83,"text":1491},{"id":1062,"depth":83,"text":1063},"2026-06-22","A friend told us the per-user cap was the one thing in our pricing that didn't feel right. He was right. So we took it off every team plan. Add your whole team, no seat math.",{},"\u002Fblog\u002Fremoving-user-limits",{"title":1429,"description":1515},{"loc":1517},"blog\u002Fremoving-user-limits","Vv2TmGJaFEt3OekZIjEy_hSfYlwxLWVjKSknedwSyQw",{"id":1523,"title":1524,"body":1525,"date":1603,"description":1604,"extension":91,"meta":1605,"navigation":93,"path":1606,"published":93,"seo":1607,"seoTitle":96,"sitemap":1608,"stem":1609,"__hash__":1610},"blog\u002Fblog\u002Ftags-and-creator-search.md","Search by person and topic, not just words",{"type":8,"value":1526,"toc":1597},[1527,1530,1533,1536,1540,1543,1546,1550,1553,1556,1560,1563,1566,1579,1583,1586,1589,1591],[11,1528,1529],{},"A while back we shipped library-wide search. You type a few words you remember, and we find the moment they were said, across every recording in your team's library. It works well, as long as you remember the words.",[11,1531,1532],{},"The trouble is, you don't always remember the words. Sometimes what you remember is who made the recording, or roughly what it was about. \"That thing Sarah recorded.\" \"The onboarding walkthrough, whichever one it was.\" You know the video exists... you just can't put your finger on the exact phrase to search for.",[11,1534,1535],{},"So we've added two more ways to find it: by tag, and by creator.",[25,1537,1539],{"id":1538},"tags-find-a-topic-not-a-phrase","Tags: find a topic, not a phrase",[11,1541,1542],{},"You can now add your own labels to any recording. One might be onboarding, another q3-planning, another bug-repro. Whatever fits the way your team works.",[11,1544,1545],{},"Tags are shared across your organisation, so a tag one person adds is a tag everyone can search. If your team settles on tagging every onboarding video onboarding, then that one word pulls all of them up, no matter who recorded them or what they happen to be called. You get the grouping without having to build and maintain a folder for it.",[25,1547,1549],{"id":1548},"creator-find-everything-one-person-recorded","Creator: find everything one person recorded",[11,1551,1552],{},"Every recording now remembers who made it. So you can search a teammate's name and get back everything they've added to the library.",[11,1554,1555],{},"This matters most for teams spread across time zones. Someone records a few walkthroughs on Friday while you're asleep. On Monday, instead of scrolling the whole library, you search their name, and there they all are, in one place. It's a quick way to catch up on what someone shared while you were offline.",[25,1557,1559],{"id":1558},"the-same-search-now-looking-in-five-places","The same search, now looking in five places",[11,1561,1562],{},"None of this is a separate feature to learn. It's the same search you already use. Hit ⌘K from anywhere, type, and the results come up as you go.",[11,1564,1565],{},"What's changed is how much that one search box looks at. It's now five things: the transcript of every recording, the video titles, the screenshot filenames, the tags your team adds, and the name of whoever recorded it. The typo tolerance works the same as before, so a near miss on a name or a tag still finds it.",[11,1567,1568,1569,1573,1574,1578],{},"If you want the full picture of how the search itself works, the timestamps, the ⌘K palette, the shareable links, that's all in the ",[402,1570,1572],{"href":1571},"\u002Fblog\u002Flibrary-wide-search","library-wide search post",". The ",[402,1575,1577],{"href":1576},"\u002Fcaptions","searchable video page"," lays it out in one place too.",[25,1580,1582],{"id":1581},"whats-not-in-there-yet","What's not in there yet",[11,1584,1585],{},"Comments, video descriptions, and team-wide annotations still aren't searchable. They're on the list.",[11,1587,1588],{},"If your library has grown to the point where finding things in it has started to feel like work, these two are worth a few minutes. Add a handful of tags to the recordings you reach for most, and see how much quicker the next hunt goes.",[11,1590,70],{},[11,1592,1593,1595,80],{},[74,1594,76],{},[78,1596],{},{"title":82,"searchDepth":83,"depth":83,"links":1598},[1599,1600,1601,1602],{"id":1538,"depth":83,"text":1539},{"id":1548,"depth":83,"text":1549},{"id":1558,"depth":83,"text":1559},{"id":1581,"depth":83,"text":1582},"2026-06-09","Library-wide search now finds recordings by the tags your team adds and by who recorded them, not just by what was said. Two more ways to find the video you half-remember.",{},"\u002Fblog\u002Ftags-and-creator-search",{"title":1524,"description":1604},{"loc":1606},"blog\u002Ftags-and-creator-search","8slv2N2A62yJwSAMn4Lzm54TcpYxCK2xcgJrQf1kyIs",{"id":1612,"title":1613,"body":1614,"date":1812,"description":1813,"extension":91,"meta":1814,"navigation":93,"path":1571,"published":93,"seo":1815,"seoTitle":96,"sitemap":1816,"stem":1817,"__hash__":1818},"blog\u002Fblog\u002Flibrary-wide-search.md","Library-wide search",{"type":8,"value":1615,"toc":1802},[1616,1619,1622,1625,1631,1635,1638,1670,1673,1677,1680,1683,1686,1690,1693,1699,1702,1706,1717,1722,1725,1736,1740,1743,1746,1750,1753,1760,1763,1767,1770,1773,1776,1779,1781,1788,1794,1796],[11,1617,1618],{},"If you're running a distributed team, half the people you'd normally ask are asleep when you need them. The answer is probably in a Loom-style recap someone made on Friday, or buried in last week's all-hands, or in that long demo a teammate recorded for the customer call rehearsal... but finding the actual ten seconds where it was said is a different problem entirely.",[11,1620,1621],{},"That's the thing we wanted to fix.",[11,1623,1624],{},"Library-wide search is now live. Type a few words you remember, and we'll search across every video, every transcript, and every screenshot in your organisation.",[11,1626,1627],{},[20,1628],{"alt":1629,"src":1630},"Search results appearing as you type","search-page.png",[25,1632,1634],{"id":1633},"what-it-searches","What it searches",[11,1636,1637],{},"Five things at once:",[1121,1639,1640,1646,1652,1658,1664],{},[1124,1641,1642,1645],{},[74,1643,1644],{},"Video titles."," When you remember the recording by name.",[1124,1647,1648,1651],{},[74,1649,1650],{},"Screenshot filenames."," That product mock someone uploaded as \"billing-v3-final.png\" is now findable.",[1124,1653,1654,1657],{},[74,1655,1656],{},"What was actually said."," The transcript of every video, fully searchable.",[1124,1659,1660,1663],{},[74,1661,1662],{},"Tags."," The labels your team adds to recordings. Tag a video onboarding and it surfaces on that word.",[1124,1665,1666,1669],{},[74,1667,1668],{},"Who recorded it."," Search a teammate's name to pull up everything they've added.",[11,1671,1672],{},"Multiple matches in one recording get grouped together, so one long all-hands doesn't push everything else off the page. You get the first few matches per recording, and a \"+ more in this recording\" line if there's a longer trail to follow.",[25,1674,1676],{"id":1675},"you-dont-have-to-spell-it-right","You don't have to spell it right",[11,1678,1679],{},"Search is typo-tolerant.",[11,1681,1682],{},"Type \"onbording\" and you'll find \"onboarding\". Type \"auth flo\" and you'll find \"auth flow\". You don't need the exact phrase, just something close. Which matters more than it sounds, because half the time, the bit you're hunting for is a half-remembered word from a meeting three weeks ago.",[11,1684,1685],{},"This is what trips people up on traditional search. They know the meeting happened. They just can't remember the exact words.",[25,1687,1689],{"id":1688},"click-a-result-land-on-the-moment","Click a result, land on the moment",[11,1691,1692],{},"Every transcript match comes with a timestamp on it. Click it, and you land on that moment in the recording: captions view scrolled to the matching line, video player queued just before it.",[11,1694,1695],{},[20,1696],{"alt":1697,"src":1698},"Clicking a result opens the captions view at the matched timestamp","search-results.png",[11,1700,1701],{},"You can hit play and hear it in context. The search term stays highlighted in the surrounding utterances, so even if the first match isn't quite the one, the next one is right there to scan.",[25,1703,1705],{"id":1704},"k-from-anywhere","⌘K from anywhere",[11,1707,1708,1709,1712,1713,1716],{},"For quick lookups, hit ",[74,1710,1711],{},"⌘K"," (or ",[74,1714,1715],{},"Ctrl+K"," on Windows \u002F Linux) from any page in the app. A command palette opens, you type, and results come up as you go.",[11,1718,1719],{},[20,1720],{"alt":1629,"src":1721},"search-modal.png",[11,1723,1724],{},"Hit enter on a result to navigate to it. Hit enter on the \"Search all transcripts for...\" line at the bottom to jump to the full results page with everything else.",[11,1726,1727,1728,1731,1732,1735],{},"Search URLs are shareable too. The query lives in the URL bar (",[185,1729,1730],{},"?q=...","), so a link like ",[185,1733,1734],{},"\u002Frecordings\u002Fsearch?q=billing-rewrite"," runs that search for whoever opens it. That's a nice thing to drop into a Slack thread: \"go look at the bit where I talked about this\".",[25,1737,1739],{"id":1738},"always-in-sync","Always in sync",[11,1741,1742],{},"The index follows your library. Upload a new recording, it shows up in search as soon as the captions are ready. Edit your captions, the search updates. Delete a recording or unpublish a screenshot, those hits drop out.",[11,1744,1745],{},"You don't have to do anything. It just stays current.",[25,1747,1749],{"id":1748},"a-small-tip-leave-captions-on-when-you-record","A small tip: leave captions on when you record",[11,1751,1752],{},"The whole thing only works if your recordings have captions on them, so our recommendation is to leave captions turned on when you record. That's where the searchable text comes from.",[11,1754,1755,1756,1759],{},"If you'd rather not have captions burned across the video itself, that's a separate choice. Head to your organisation's player settings and turn the ",[74,1757,1758],{},"Captions"," default off. The transcript still exists in the background, search still works exactly the same, and any viewer who wants captions can flip them on from the player controls.",[11,1761,1762],{},"You get the searchability without the visual clutter. And the viewer keeps the choice.",[25,1764,1766],{"id":1765},"where-this-really-starts-to-pay-off","Where this really starts to pay off",[11,1768,1769],{},"If your team is distributed, async, or just busy, the real value isn't in the search box itself. It's in what your recordings quietly become.",[11,1771,1772],{},"A product walkthrough. A design review. A bug investigation. A pricing discussion. A customer call recap shared with the rest of the team. A \"here's how the new permissions system works\" video. The Friday review someone recorded for the people who couldn't make it. All the moments where knowledge moves out of someone's head and onto a recording.",[11,1774,1775],{},"Every one of those used to be a video that fewer and fewer people watched as the weeks passed. Now they're knowledge you can find again, by anyone in the org, in seconds. The library stops being a folder of files. It starts being something closer to team memory you can ask questions of.",[11,1777,1778],{},"Honestly, that's the part we built this for.",[25,1780,1582],{"id":1581},[11,1782,1783,1784,1787],{},"Since this post went out, we've added two more things to search: the tags your team adds, and who recorded each video. More on both in ",[402,1785,1786],{"href":1606},"Search by person and topic",". Comments, video descriptions, and team-wide annotations are still coming in a follow-up.",[11,1789,1790,1791,1793],{},"If your library has grown enough that finding things in it has started to feel like a chore, give it a try. Hit ",[74,1792,1711],{},", type a phrase you know is buried in there somewhere, and see what comes back.",[11,1795,70],{},[11,1797,1798,1800,80],{},[74,1799,76],{},[78,1801],{},{"title":82,"searchDepth":83,"depth":83,"links":1803},[1804,1805,1806,1807,1808,1809,1810,1811],{"id":1633,"depth":83,"text":1634},{"id":1675,"depth":83,"text":1676},{"id":1688,"depth":83,"text":1689},{"id":1704,"depth":83,"text":1705},{"id":1738,"depth":83,"text":1739},{"id":1748,"depth":83,"text":1749},{"id":1765,"depth":83,"text":1766},{"id":1581,"depth":83,"text":1582},"2026-05-13","Search every video, transcript, and screenshot across your organisation. Typo-tolerant, timestamp-aware, and a single ⌘K away. Built for distributed teams whose answers live in last week's recordings.",{},{"title":1613,"description":1813},{"loc":1571},"blog\u002Flibrary-wide-search","F8WsX3mRnIdLhBO3N8_j00tosMu5rz-sjooYavsEbi8",{"id":1820,"title":1821,"body":1822,"date":2024,"description":2025,"extension":91,"meta":2026,"navigation":93,"path":2027,"published":93,"seo":2028,"seoTitle":96,"sitemap":2029,"stem":2030,"__hash__":2031},"blog\u002Fblog\u002Fhow-pixelmatic-uses-xform-for-video-infrastructure.md","How searchferret uses xform for video transcoding, HLS streaming, and analytics",{"type":8,"value":1823,"toc":2014},[1824,1834,1837,1841,1844,1847,1850,1854,1857,1874,1877,1881,1884,1887,1890,1894,1897,1900,1903,1907,1910,1913,1916,1919,1923,1926,1929,1932,1936,1939,1942,1945,1971,1974,1978,1981,1995,1998,2006,2008],[11,1825,1826,1827,1833],{},"Every once in a while a fellow SaaS founder will email us asking \"what are you actually running your video on?\" The plain answer is ",[402,1828,1832],{"href":1829,"rel":1830},"https:\u002F\u002Fxform.media",[1831],"nofollow","xform media",", which is a sister product our team builds. So this post is partly a write-up for the people who ask, and partly for searchferret customers who'd quite reasonably like to know what happens to their recordings after they hit publish.",[11,1835,1836],{},"What follows is a high-level walk through the things xform does for us, one section at a time.",[25,1838,1840],{"id":1839},"a-bit-of-background","A bit of background",[11,1842,1843],{},"Video infrastructure is one of the larger pieces of work in a product like searchferret. Transcoding, streaming, a player, captions, analytics, attribution, all of it. A while back we built xform to handle exactly that, so when we started on searchferret, the obvious thing was to lean on what we already had rather than do it twice. That's a big part of why searchferret got to customers as quickly as it did.",[11,1845,1846],{},"It meant the team could spend its effort on the things only searchferret needed to be: the recording experience, the team workspace, the editing tools, the brand. The video side, we already knew how to do.",[11,1848,1849],{},"A quieter benefit too. When something behaves oddly with a publish, we don't have to file a ticket with a vendor and wait. We can look at it from both sides. And we've been running our own production traffic through xform for a while, which tends to surface edge cases you'd never see from a happy-path demo. If something is going to break, we'd rather it break for us first.",[25,1851,1853],{"id":1852},"what-we-ask-xform-to-do","What we ask xform to do",[11,1855,1856],{},"When you hit publish on a recording, xform handles a handful of different jobs in one go:",[1121,1858,1859,1862,1865,1868,1871],{},[1124,1860,1861],{},"Transcoding the file into formats and quality levels that play smoothly on any device.",[1124,1863,1864],{},"Hosting the video and serving a clean, branded player you can embed anywhere.",[1124,1866,1867],{},"Generating captions (or accepting the ones you recorded with).",[1124,1869,1870],{},"Making the spoken words across your library searchable.",[1124,1872,1873],{},"Tracking per-view analytics, including UTM tags so you know where viewers came from.",[11,1875,1876],{},"The longer version is below.",[25,1878,1880],{"id":1879},"transcoding-and-adaptive-streaming","Transcoding and adaptive streaming",[11,1882,1883],{},"A raw recording from your browser is fine to download, but it's not great to stream. xform takes the file and produces a ladder of renditions, different resolutions and bitrates, packaged as HLS. That's the same adaptive streaming format the major video platforms use.",[11,1885,1886],{},"In plain terms: your viewer's player picks the right quality for their connection, and switches up or down as the connection changes. Someone on hotel wifi gets a watchable stream, someone on fibre gets a sharper one, and nobody has to think about a quality setting.",[11,1888,1889],{},"Alongside the stream, xform produces a single downloadable MP4. So if a customer would rather grab the file than embed it, that's a click.",[25,1891,1893],{"id":1892},"a-branded-embeddable-player","A branded, embeddable player",[11,1895,1896],{},"The player you see when you open a searchferret video, or embed one on a website, is xform's. It plays the stream adaptively, supports captions, handles fullscreen and picture-in-picture, and the usual keyboard shortcuts.",[11,1898,1899],{},"It also carries through a bit of your team's brand. An accent colour, your logo. So when you drop a demo on your marketing site or share a walkthrough with a customer, the player doesn't look like it came from somewhere else.",[11,1901,1902],{},"Building and maintaining a custom video player is more work than it sounds. We're happy not to be the ones doing it.",[25,1904,1906],{"id":1905},"captions-and-searchable-transcripts","Captions and searchable transcripts",[11,1908,1909],{},"Two things happen on the captions side.",[11,1911,1912],{},"If you recorded with live captions on in searchferret, those captions get bundled into the video. The viewer can toggle them on or off, and the timing matches what you actually said.",[11,1914,1915],{},"If you didn't, xform generates captions automatically from the audio after upload. We pick those up and store them alongside the video record.",[11,1917,1918],{},"Either way, the captions become more than a viewer accessibility feature. The actual words people say in a recording become searchable across your team's library. A new hire looking for \"how do we handle refunds\" can find the 90-second clip where you explained it, without having to know the title or who recorded it. That's what we were getting at a couple of weeks ago when we wrote about a searchable async video library.",[25,1920,1922],{"id":1921},"per-view-analytics","Per-view analytics",[11,1924,1925],{},"Publishing a video without seeing what happens to it is a bit like sending an email and never finding out if anyone opened it.",[11,1927,1928],{},"xform tracks every view. View counts, watch time, engagement curves, drop-off points, plus the basics like geography, device, and referrer. We pull all of that straight through to the analytics tab inside searchferret, so you don't have to log into a separate dashboard to see it.",[11,1930,1931],{},"The engagement curve is the bit our customers say they reach for most. It tells you, second by second, where viewers stayed engaged and where they tuned out. Seeing where a sales prospect dropped off a demo is a different kind of feedback than just \"they viewed it\".",[25,1933,1935],{"id":1934},"utm-tracking","UTM tracking",[11,1937,1938],{},"If you've shared a video across a few channels (an email campaign, a LinkedIn post, a help centre article, a sales follow-up), you've probably wished you knew which channel was actually doing the work.",[11,1940,1941],{},"That's what UTM tracking is for. You add a few tags to your share link (source, medium, campaign), and xform attributes every view through that link to those tags. In the analytics dashboard, you can then see which campaigns drove the most views, the longest watch time, the strongest engagement, and which ones, honestly, didn't do much.",[11,1943,1944],{},"A few real applications we've seen customers (and ourselves) use it for:",[1121,1946,1947,1953,1959,1965],{},[1124,1948,1949,1952],{},[74,1950,1951],{},"Sales follow-up."," Tag the link per rep, per deal, or per stage. See which prospects actually watched the demo, and which scrolled past.",[1124,1954,1955,1958],{},[74,1956,1957],{},"Multi-channel campaigns."," A product launch goes to email, LinkedIn, and a blog post. UTM tags tell you which channel paid back.",[1124,1960,1961,1964],{},[74,1962,1963],{},"Testing thumbnails or titles."," Two variants, two UTM tags. Real numbers on which one earned the click and held attention.",[1124,1966,1967,1970],{},[74,1968,1969],{},"Internal newsletters."," When you share a town-hall recording, you can see how many people actually opened and watched, not just clicked.",[11,1972,1973],{},"It's a small feature, but it quietly turns a video from a piece of content into a piece of data.",[25,1975,1977],{"id":1976},"why-this-set-up","Why this set-up",[11,1979,1980],{},"If we'd reached for one of the big general-purpose video platforms, we'd have gotten most of the same primitives. The reason we run on xform specifically:",[1121,1982,1983,1986,1989,1992],{},[1124,1984,1985],{},"It's tuned for the SaaS embed use case, not consumer entertainment.",[1124,1987,1988],{},"The pricing scales the way our business does, without us having to do elaborate credit accounting against per-minute billing.",[1124,1990,1991],{},"Streaming, captions, analytics, and UTM tracking all sit in one place instead of three.",[1124,1993,1994],{},"We can move quickly when something needs to change, because we're not waiting in a vendor's roadmap queue.",[11,1996,1997],{},"That last point is probably the one I'd lean on if you're picking video infrastructure for your own SaaS. Whatever you run on will shape your product over time, in small ways you don't see at the start. Worth picking something you can move with.",[11,1999,2000,2001,2005],{},"If you're curious about xform itself, the ",[402,2002,2004],{"href":1829,"rel":2003},[1831],"xform.media"," site is the place to look. And if you're a searchferret customer who just wants to know what happens to your recordings after you hit publish, hopefully this gives you a clearer picture.",[11,2007,70],{},[11,2009,2010,2012,80],{},[74,2011,76],{},[78,2013],{},{"title":82,"searchDepth":83,"depth":83,"links":2015},[2016,2017,2018,2019,2020,2021,2022,2023],{"id":1839,"depth":83,"text":1840},{"id":1852,"depth":83,"text":1853},{"id":1879,"depth":83,"text":1880},{"id":1892,"depth":83,"text":1893},{"id":1905,"depth":83,"text":1906},{"id":1921,"depth":83,"text":1922},{"id":1934,"depth":83,"text":1935},{"id":1976,"depth":83,"text":1977},"2026-05-12","What actually happens to your recordings after you hit publish. A plain walk-through of the transcoding, hosted player, captions, analytics, and UTM tracking we run through xform media.",{},"\u002Fblog\u002Fhow-pixelmatic-uses-xform-for-video-infrastructure",{"title":1821,"description":2025},{"loc":2027},"blog\u002Fhow-pixelmatic-uses-xform-for-video-infrastructure","HvcokYIb9ZtmIQ-lno5RQZ9HB4e7rt6T8aaO7ondcP8",{"id":2033,"title":2034,"body":2035,"date":2125,"description":2126,"extension":91,"meta":2127,"navigation":93,"path":2128,"published":93,"seo":2129,"seoTitle":2130,"sitemap":2131,"stem":2132,"__hash__":2133},"blog\u002Fblog\u002Fquiet-costs-of-remote-work.md","The quiet costs of running a remote team (and the async video habit that helps)",{"type":8,"value":2036,"toc":2120},[2037,2040,2043,2046,2050,2056,2067,2073,2076,2080,2083,2086,2089,2109,2112,2114,2117],[11,2038,2039],{},"If you lead a remote or distributed team, you've probably noticed the calendar doesn't tell you the full story.",[11,2041,2042],{},"The 9am standup looks reasonable on paper. But someone in Berlin is wrapping up their afternoon, someone in Austin has just rolled out of bed, and your teammate in Manila is choosing between the call and dinner with their family. The calendar says \"30 minutes\". The real cost is closer to a workday, in lost focus, awkward hours, and the half-present fog of being in a meeting at the wrong time of day.",[11,2044,2045],{},"I think this is the part of remote work that doesn't show up in retros. It just quietly drags on everything.",[25,2047,2049],{"id":2048},"a-few-things-remote-leads-are-quietly-wrestling-with","A few things remote leads are quietly wrestling with",[11,2051,2052,2055],{},[74,2053,2054],{},"Timezone overlap is a zero-sum game."," The more global your team, the narrower the window where everyone can reasonably meet. Leaders generally respond by either scheduling calls at unkind hours, pushing more work async, or accepting that certain people will always be \"catching up\". None of those feel great. Maybe the calendar isn't really the thing to be solving.",[11,2057,2058,2061,2062,2066],{},[74,2059,2060],{},"Meetings multiply to fill the vacuum."," When you can't swing by someone's desk, the default is to put time on the calendar. A 15-minute walkthrough becomes a recurring weekly. Before long, the team is in meetings ",[2063,2064,2065],"em",{},"about"," the work instead of doing the work. Meeting overload, I think, isn't really a scheduling problem. It's what happens when a live call is the default for things that don't need to be live.",[11,2068,2069,2072],{},[74,2070,2071],{},"Context evaporates."," The decision made on Tuesday's call, why we picked vendor A, how the new onboarding flow should work, lives only in the memory of whoever was there. Three months later, a new hire asks the same question. Someone has to answer it again. And again.",[11,2074,2075],{},"The common thread, I think, is that valuable information gets spoken once, in a meeting, in a timezone, and then it's gone. Without something to point at later, a distributed team rebuilds the same context every week.",[25,2077,2079],{"id":2078},"what-actually-helps-and-where-async-video-fits","What actually helps (and where async video fits)",[11,2081,2082],{},"The teams that handle this well seem to share one habit. They treat async video as a proper artifact. Recorded walkthroughs, kickoffs, decisions. Not a forgotten Zoom cloud file nobody ever opens.",[11,2084,2085],{},"That's the specific problem we're building searchferret to help with. When someone records a walkthrough, a decision, or a kickoff, the video gets captioned automatically and those captions become searchable. Not just the titles. The actual words people said. Over time, your video library quietly turns into a piece of documentation your team can actually find things in.",[11,2087,2088],{},"The practical effect is pretty mundane, which is sort of the point:",[1121,2090,2091,2094,2097,2100,2103,2106],{},[1124,2092,2093],{},"A teammate in another timezone watches on their own schedule instead of squeezing into yours.",[1124,2095,2096],{},"A new hire searching \"how do we handle refunds\" finds the 90-second clip where you explained it six weeks ago, instead of pinging you on Slack. The async video library quietly doubles as searchable internal documentation.",[1124,2098,2099],{},"A recurring sync you were dreading becomes a five-minute async standup recording anyone can scan, skim, or skip.",[1124,2101,2102],{},"Feedback on a proposal, a design, or a quote turns into a three-minute walkthrough with comments inline, instead of three calendar invites trying to find an hour everyone's awake.",[1124,2104,2105],{},"New-hire training stops being a live session you re-run every time someone joins. It's a video they watch on their own time, and watch again when they need to.",[1124,2107,2108],{},"A product walkthrough, for a customer or a teammate, becomes something the watcher can pause, replay, and forward, instead of a support call across timezones.",[11,2110,2111],{},"You end up with fewer meetings, better context retention, and a remote team that doesn't need to be in the same room (or the same hour) to stay aligned.",[25,2113,1063],{"id":1062},[11,2115,2116],{},"Remote work's real tax isn't the software or the home office setup. It's the slow leak of knowledge that happens when the only record of a conversation is the people who were in it.",[11,2118,2119],{},"A searchable async video library won't fix every distributed-team problem. But it does patch that specific leak, and (in our experience) that's the one quietly costing most remote leads the most.",{"title":82,"searchDepth":83,"depth":83,"links":2121},[2122,2123,2124],{"id":2048,"depth":83,"text":2049},{"id":2078,"depth":83,"text":2079},{"id":1062,"depth":83,"text":1063},"2026-04-23","Timezone friction, meeting overload, and vanishing context are the real costs of running a distributed team. Async video, the searchable kind, is the habit that plugs the biggest leak.",{},"\u002Fblog\u002Fquiet-costs-of-remote-work",{"title":2034,"description":2126},"The quiet costs of running a remote team",{"loc":2128},"blog\u002Fquiet-costs-of-remote-work","RiHu0Tmz6qWRMLNVlxArrNWVwfRto2mBsQyLKYZyM-c",{"id":2135,"title":2136,"body":2137,"date":2359,"description":2360,"extension":91,"meta":2361,"navigation":93,"path":2362,"published":93,"seo":2363,"seoTitle":96,"sitemap":2364,"stem":2365,"__hash__":2366},"blog\u002Fblog\u002Fscreenshot-editor-update.md","A friendlier screenshot editor",{"type":8,"value":2138,"toc":2346},[2139,2142,2145,2148,2151,2155,2162,2165,2172,2176,2179,2182,2186,2189,2192,2206,2209,2213,2223,2226,2230,2233,2253,2256,2260,2267,2273,2277,2284,2291,2295,2301,2304,2308,2311,2314,2318,2321,2325,2332,2335,2338,2340],[11,2140,2141],{},"We've spent the last two weeks reworking searchferret's screenshot editor, and honestly... we're a little giddy with how it's turned out.",[11,2143,2144],{},"What started as a handful of \"wouldn't it be nice if...\" notes became a proper overhaul. Inline editing, real keyboard shortcuts, undo\u002Fredo, duplication, and a long tail of polish that makes the whole thing feel a lot easier to live with.",[11,2146,2147],{},"None of these are headline features on their own. Together though, they've turned the editor from something we tolerated into something we actually enjoy using.",[11,2149,2150],{},"Here's the tour.",[25,2152,2154],{"id":2153},"paste-edit-download","Paste, edit, download",[11,2156,2157,2158,2161],{},"The thing we want people to feel first is that there's no ceremony. Sign in to your free account, hit ",[74,2159,2160],{},"⌘V"," to paste a screenshot straight from your clipboard, annotate it however you like, and hit download. No \"save to searchferret\", no round-trip through a cloud library.",[11,2163,2164],{},"The editor is a tool you reach for, use, and close. Like a local app that happens to live in a browser tab.",[11,2166,2167,2168,2171],{},"If you ",[2063,2169,2170],{},"do"," want to share it with your team, that's a single click away. Upload to searchferret and you get a clean share link, same as with videos. That's an option though, never a tollbooth.",[25,2173,2175],{"id":2174},"edit-text-where-you-see-it","Edit text where you see it",[11,2177,2178],{},"Text blocks used to be edited from a sidebar input. Now you just double-click the text on the canvas, type, and click away. The text input itself stays invisible until you interact with it, so there's no distracting border around every text block.",[11,2180,2181],{},"We also gave text a proper styling pass: background fill, optional border (with square, medium, or large corner radius), size slider, alignment, and a bold toggle. Enough to make a clean callout without leaving the canvas.",[25,2183,2185],{"id":2184},"undo-and-redo","Undo and redo",[11,2187,2188],{},"There's now an undo\u002Fredo toolbar at the top of the editor, next to the \"add layer\" menu. Both buttons gray out when there's nothing to go back (or forward) to.",[11,2190,2191],{},"Keyboard shortcuts work the way you'd expect:",[1121,2193,2194,2200],{},[1124,2195,2196,2199],{},[74,2197,2198],{},"⌘Z \u002F Ctrl+Z"," for undo",[1124,2201,2202,2205],{},[74,2203,2204],{},"⌘⇧Z \u002F Ctrl+Shift+Z"," for redo",[11,2207,2208],{},"Bursts of changes (dragging a slider, nudging a box around) collapse into a single history entry, so one undo press reverses the whole move instead of unwinding it pixel by pixel.",[25,2210,2212],{"id":2211},"alt-drag-to-duplicate","Alt-drag to duplicate",[11,2214,2215,2216,1712,2219,2222],{},"Hold ",[74,2217,2218],{},"Alt",[74,2220,2221],{},"Option"," on Mac) and drag any layer (box, mask, arrow, text) to drop a copy wherever you let go. The original stays put.",[11,2224,2225],{},"It's the Figma move, and it turns out to be the fastest way to make, say, three arrows in a row, or a stack of masks for a diff.",[25,2227,2229],{"id":2228},"keyboard-first-selection","Keyboard-first selection",[11,2231,2232],{},"Small things, but they add up:",[1121,2234,2235,2241,2247],{},[1124,2236,2237,2240],{},[74,2238,2239],{},"Click empty space"," to deselect the current layer.",[1124,2242,2243,2246],{},[74,2244,2245],{},"Escape"," to deselect (and to exit text-edit mode if you're in it).",[1124,2248,2249,2252],{},[74,2250,2251],{},"Backspace \u002F Delete"," to remove the selected layer.",[11,2254,2255],{},"If you're typing in a text layer, Backspace does what it always does inside text. The editor is smart enough not to nuke your layer mid-sentence.",[25,2257,2259],{"id":2258},"draw-on-it-with-the-pen","Draw on it with the pen",[11,2261,2262,2263,2266],{},"Sometimes an arrow is too formal. The new ",[74,2264,2265],{},"Pen"," tool lets you scribble straight onto the screenshot: click Pen in the toolbar, pick a colour and thickness right there, and drag. Circle the weird bit, underline the thing, draw the little squiggle that says \"this, right here\".",[11,2268,2269,2270,2272],{},"Strokes come out smooth (we curve through your pointer samples rather than connecting the dots), and every stroke is its own layer. That means undo works per stroke, you can move a stroke after the fact, alt-drag duplicates it, and you can recolour or thicken it later from the sidebar. A single click makes a dot. ",[74,2271,2245],{}," (or clicking Pen again) puts the pen down.",[25,2274,2276],{"id":2275},"circles-join-the-party","Circles join the party",[11,2278,2279,2280,2283],{},"The Box button has grown into a ",[74,2281,2282],{},"Shape"," menu: box or circle, your pick. Circles are drawn inside the same draggable, resizable frame as boxes, with the same stroke, width, and fill controls — great for ringing a button or a face without the sharp corners.",[11,2285,2286,2287,2290],{},"And a bonus that applies to boxes, circles, ",[2063,2288,2289],{},"and"," arrows: double-click one to give it a text label. Shapes get the label in the centre; arrows carry it at their tail. The label inherits the shape's colour, and you can style its size, background pill, and border from the sidebar.",[25,2292,2294],{"id":2293},"an-eyedropper-in-every-colour-picker","An eyedropper in every colour picker",[11,2296,2297,2298,1313],{},"Every colour control in the editor (strokes, fills, text, masks, backgrounds) now opens the same picker: a proper colour area, a hex field that accepts any CSS colour, and an ",[74,2299,2300],{},"eyedropper",[11,2302,2303],{},"The eyedropper is the sleeper feature here. Click it, then click any pixel on your screen — including the screenshot itself — and that's your colour. Matching an annotation to your product's brand colour used to mean a round-trip through some colour-picker website; now it's two clicks. On browsers without native eyedropper support we hand you the system colour picker instead, which on a Mac has its own magnifier tucked inside.",[25,2305,2307],{"id":2306},"masks-with-a-bit-of-personality","Masks with a bit of personality",[11,2309,2310],{},"Masks (the blur or colour blocks you use to hide sensitive info) now support the same three radius presets as text blocks: square, medium, and large. Large gives you a nice capsule shape for redacting a single row, and medium is the sensible default for most boxes.",[11,2312,2313],{},"We also dropped the always-on dashed outline on unselected masks. Masks are visible now (they have fill or blur), so the outline was just visual noise.",[25,2315,2317],{"id":2316},"curved-arrows-that-actually-look-like-arrows","Curved arrows that actually look like arrows",[11,2319,2320],{},"Tiny fix, but it bugged us. When you curved an arrow, the rounded end of the shaft poked through the arrowhead, making the tip look recessed. That's sorted now. The shaft tucks cleanly under the triangle on both straight and curved arrows.",[25,2322,2324],{"id":2323},"sidebar-that-stops-shifting","Sidebar that stops shifting",[11,2326,2327,2328,2331],{},"If you've used the editor recently, you may have noticed the sidebar twitching slightly wider when you selected a text or box layer. The culprit was a crowded row of controls that couldn't shrink past the native ",[185,2329,2330],{},"\u003Cinput type=\"range\">"," minimum width. Sidebar width is stable now across all layer types.",[2333,2334],"hr",{},[11,2336,2337],{},"None of this shows up on a pricing page, but it's the kind of thing you feel every time you use the tool. More polish coming. Let us know what else bothers you.",[11,2339,70],{},[11,2341,2342,2344,80],{},[74,2343,76],{},[78,2345],{},{"title":82,"searchDepth":83,"depth":83,"links":2347},[2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358],{"id":2153,"depth":83,"text":2154},{"id":2174,"depth":83,"text":2175},{"id":2184,"depth":83,"text":2185},{"id":2211,"depth":83,"text":2212},{"id":2228,"depth":83,"text":2229},{"id":2258,"depth":83,"text":2259},{"id":2275,"depth":83,"text":2276},{"id":2293,"depth":83,"text":2294},{"id":2306,"depth":83,"text":2307},{"id":2316,"depth":83,"text":2317},{"id":2323,"depth":83,"text":2324},"2026-04-21","What's new in searchferret's screenshot tool: a freehand pen, circles, an eyedropper in every color picker, inline text editing, keyboard shortcuts, undo\u002Fredo, and a pile of small polish.",{},"\u002Fblog\u002Fscreenshot-editor-update",{"title":2136,"description":2360},{"loc":2362},"blog\u002Fscreenshot-editor-update","EnECxhzzDJGLV8vqPoOyHbyMXuiKI14wfbb_JOuM4Co",{"id":2368,"title":2369,"body":2370,"date":2488,"description":2489,"extension":91,"meta":2490,"navigation":93,"path":2491,"published":93,"seo":2492,"seoTitle":96,"sitemap":2493,"stem":2494,"__hash__":2495},"blog\u002Fblog\u002Fpricing-philosophy.md","Pricing, and how we think about it",{"type":8,"value":2371,"toc":2481},[2372,2382,2386,2389,2392,2396,2399,2402,2406,2409,2453,2457,2460,2463,2466,2470,2473,2475],[1303,2373,2374],{},[11,2375,2376,2379,2380,1313],{},[74,2377,2378],{},"Update, 22 June 2026:"," We've since removed user limits from every team plan. You can read why in ",[402,2381,1429],{"href":1517},[25,2383,2385],{"id":2384},"where-this-comes-from","Where this comes from",[11,2387,2388],{},"We've spent a fair bit of time looking at how other companies price their products. The ones we keep coming back to are Basecamp, Plausible, and Todist. They're very different products for very different audiences, but they share something we wanted for searchferret. They price with a bit of generosity, they compete on the product itself, and they treat their customers like adults.",[11,2390,2391],{},"That's the posture we were after.",[25,2393,2395],{"id":2394},"the-shape-of-it","The shape of it",[11,2397,2398],{},"Pricing can go one of two ways. It can nickel-and-dime at every turn, hide essential features behind enterprise calls, and quietly punish teams for growing. Or it can be more like a handshake. Here's the price, here's what you get, the kind of deal you'd happily mention to a friend.",[11,2400,2401],{},"We're aiming for the handshake.",[25,2403,2405],{"id":2404},"small-acts-of-generosity","Small acts of generosity",[11,2407,2408],{},"A few things we've put in place from the start:",[1121,2410,2411,2417,2423,2429,2435,2441,2447],{},[1124,2412,2413,2416],{},[74,2414,2415],{},"Record unlimited videos, for free."," Browser-based, no install, no five-minute cap on the front door. Sign up for a free account and you get a discreet \"Made with searchferret.com\" in the bottom-right corner. Save as many WebM files as you like, locally.",[1124,2418,2419,2422],{},[74,2420,2421],{},"Take unlimited screenshots, for free."," Browser-based, with a small editor for crops, arrows, and text annotations. No watermark. Save the images locally, as many as you like.",[1124,2424,2425,2428],{},[74,2426,2427],{},"Three free published videos."," Enough to actually try the hosted path end-to-end (public share link, transcript, the whole flow) before we ask for a dollar.",[1124,2430,2431,2434],{},[74,2432,2433],{},"Centralised recorder settings on every paid plan."," Camera position, frame backgrounds, branding... configured once, consistent across everyone on your team. It's one of the things we're proudest of, and it's there from the cheapest tier up.",[1124,2436,2437,2440],{},[74,2438,2439],{},"Branded public video pages on every paid plan."," Your videos look like yours, not ours.",[1124,2442,2443,2446],{},[74,2444,2445],{},"Pay by tier, not by seat."," Every team plan includes unlimited team members, so you can add teammates without watching the meter. A five-person team on Short pays $29 a month total, not $29 × 5, and you only move up when you publish and store more — never because you hired someone.",[1124,2448,2449,2452],{},[74,2450,2451],{},"Your videos stay."," No retention clocks, no \"we archived your stuff after six months.\" You have them until you delete them.",[25,2454,2456],{"id":2455},"being-honest-about-the-other-side","Being honest about the other side",[11,2458,2459],{},"We also need to make money. searchferret has real infrastructure behind it (encoding, hosting, delivery), and generosity that's financially unsustainable is just a countdown.",[11,2461,2462],{},"So the pricing ladder exists, and it's shaped around usage. How many videos you publish and how much storage you use. You climb the ladder because you do more, not because we held a feature hostage — and never because your team grew.",[11,2464,2465],{},"Two features are genuinely gated, and we want to say so plainly. Advanced analytics (viewer-level engagement, retention curves) and custom video domains live on our higher tiers. They cost us more to run, and they tend to be where buyers at that scale expect them to live. Everything else (transcription, branded share pages, password-protected links, team settings) is on every paid plan.",[25,2467,2469],{"id":2468},"thats-the-whole-thing","That's the whole thing",[11,2471,2472],{},"No seat counts masquerading as value. No \"contact us for pricing.\" Plans start at $12 a month. Record for free for as long as you like. If you find us useful, we hope you'll tell someone.",[11,2474,70],{},[11,2476,2477,2479,80],{},[74,2478,76],{},[78,2480],{},{"title":82,"searchDepth":83,"depth":83,"links":2482},[2483,2484,2485,2486,2487],{"id":2384,"depth":83,"text":2385},{"id":2394,"depth":83,"text":2395},{"id":2404,"depth":83,"text":2405},{"id":2455,"depth":83,"text":2456},{"id":2468,"depth":83,"text":2469},"2026-04-20","How we think about searchferret's pricing. Generosity at the front door, an honest ladder as you grow, no seat-count games.",{},"\u002Fblog\u002Fpricing-philosophy",{"title":2369,"description":2489},{"loc":2491},"blog\u002Fpricing-philosophy","2UIzxV8oVOo5k1LmrsWQuxtt61MxdINqMbmbxETDC8U",{"id":2497,"title":2498,"body":2499,"date":2573,"description":2574,"extension":91,"meta":2575,"navigation":93,"path":2576,"published":93,"seo":2577,"seoTitle":96,"sitemap":2578,"stem":2579,"__hash__":2580},"blog\u002Fblog\u002Fwelcome-to-pixelmatic.md","Welcome to searchferret",{"type":8,"value":2500,"toc":2568},[2501,2505,2508,2511,2514,2518,2521,2547,2551,2554,2557,2560,2562],[25,2502,2504],{"id":2503},"a-bit-of-backstory","A bit of backstory",[11,2506,2507],{},"For a few years, we used a screen recorder called Capture, made by Dropbox. It was simple, it lived in the browser, and it did the one thing we needed it to do.",[11,2509,2510],{},"Then Dropbox shut it down.",[11,2512,2513],{},"We went looking for a replacement and couldn't quite find one that fit. The closest options were either too heavy (downloads, installs, sign-ups before you could record a 30-second clip) or too thin (no team settings, no shared library, no clean way to share a video with a customer). So, after a bit of deliberation, we decided to build our own. That's where searchferret comes from.",[25,2515,2517],{"id":2516},"what-we-wanted-it-to-do","What we wanted it to do",[11,2519,2520],{},"A handful of things, really. None of them revolutionary. We just wanted them all in one place:",[1121,2522,2523,2529,2535,2541],{},[1124,2524,2525,2528],{},[74,2526,2527],{},"No downloads."," Open the browser, hit record, you're going.",[1124,2530,2531,2534],{},[74,2532,2533],{},"Shared team settings."," Camera position, frame backgrounds, branding... configured once, synced in realtime, consistent across everyone.",[1124,2536,2537,2540],{},[74,2538,2539],{},"One place for our videos."," An org-wide library so the team isn't hunting through Slack DMs for the walkthrough from three weeks ago.",[1124,2542,2543,2546],{},[74,2544,2545],{},"Easy sharing."," A clean public page on searchferret plus an embeddable player, so customers don't need an account to watch.",[25,2548,2550],{"id":2549},"whats-free-what-isnt","What's free, what isn't",[11,2552,2553],{},"The recorder itself is free. Sign up for a free account, then record as many videos as you like and store them locally. You only need a subscription when you want the team features: shared settings, the org-wide library, and sharing videos through searchferret.",[11,2555,2556],{},"That's version 1. There's plenty more we want to do, but it felt better to ship something honest and useful than to keep polishing in the dark.",[11,2558,2559],{},"If you give it a try and something feels off, we'd love to hear it.",[11,2561,70],{},[11,2563,2564,2566,80],{},[74,2565,76],{},[78,2567],{},{"title":82,"searchDepth":83,"depth":83,"links":2569},[2570,2571,2572],{"id":2503,"depth":83,"text":2504},{"id":2516,"depth":83,"text":2517},{"id":2549,"depth":83,"text":2550},"2026-04-07","The story behind searchferret, plus what's actually in version 1.",{},"\u002Fblog\u002Fwelcome-to-pixelmatic",{"title":2498,"description":2574},{"loc":2576},"blog\u002Fwelcome-to-pixelmatic","HJ5mNU9qmzAE4V3Tb1au6cfG86M3QM9utEnJZFY9W3c",17,1788806735084]