The last stand-up special by comedian, actor, screenwriter and director Bo Burnham, Make Happy 2016, ends with a little camera trick: After Burnham has finished his routine, he goes from the stage to a standing ovation at the Capitol Theater and through a hidden cut, seems to show up in a small guest house in Los Angeles. (It’s not clear that there was a change of location until the crowd suddenly subsides when Burnham turns to the camera and says, “Oh, well, it’s just us.”) After one final song, the comedian opens it Door of the guest house and emerges in his own sunny back yard, where he is greeted by his longtime partner, Hustler’s director Lorene Scafaria, and his dog Bruce. The shot is framed to create a contrast between the rigorous demands of creative work and the vibrant outdoor life:

The most important thing you need to know about Bo Burnham’s great new special Inside, which came out on Netflix on Sunday, is that it was shot almost exclusively in this guest house. Burnham himself wrote, directed, directed, directed and edited the special while it was quarantined during the pandemic. At the same time, it doubles as a comedy special, a coronavirus diary, an attempt to channel Vegas-era Howard Hughes, and a smart and moving research into depression. Apocalyptic, self-hatred and of course internet culture. That sounds like a hell of a good thing to get an audience through, and Burnham is more restless with the deal than ever, oscillating wildly between needing attention and mere disdain for anyone who gives it to him. The opening song of the show sets the tone with the lyrics: “I’m sorry I was gone, but look, I gave you some content / Daddy made you your favorite, wide open!” Later, however, Burnham pays a moving tribute to the way comedy brings people together:

Man, you were a great crowd. Give it up for yourself that you came out tonight by the way. Give it up! It’s crazy to support live comedy in these strange times. These are some pretty crazy times. But it’s nice in these crazy times that we can meet and laugh.

He delivers these lines through an extremely scruffy quarantine beard who is sitting in his underwear on a stool in his empty guest house, above the sound of birds chirping. It’s like John Hodgman’s 9/11 remarks updated to reflect modern levels of misanthropy and despair. There are traditional comedy parts and they are good: In one sketch, Burnham plays a corporate social affairs consultant who gives advice like, “The question is no longer, would you like to buy Wheat Thins?” For example, the question is now: “Will you help Wheat Thins fight Lyme disease?” But the main action lies in Burnham’s relationship with his own work and the irrelevance of that work in the face of global collapse.

If the premise of your show is tap dancing over an abyss, you have to be a spectacular tap dancer, and luckily, it’s Burnham. One of his key steps in previous specials was turning ugly things into dazzling pop music, and he still does, but creating a special without an audience gave him a lot more room to play around with structure, and the results are exceptional. The highlight is a worthy sequel to Mr. Show’s legendary “Pre-Taped Call-In Show,” in which Burnham performs a short “Sixteen Tons” -type song about unpaid interns and then cuts into a recursive series of reaction videos and reaction videos to the Reaction videos and so on:

The Mr. Show version of this joke is all about its recursive structure, but Burnham turns against his reaction video in the reaction video:

I explain what the song means and what it is about goes. I’m a little presumptuous – it’s an instinct I have where I need everything I write to have a deeper meaning or something. But it’s a stupid song and it doesn’t really mean anything. And it’s pretty unlikely that I’d have this need, this desperate need to be seen as intelligent.

It’s not exactly revolutionary for a comic to go back to its own insecurities, but the way Burnham makes his own Criticized work in Inside, it is remarkable whether he envisions a choir of angels urging him to heal the world with “the indescribable power of your comedy”. “He imagines his quarantine existence as a terrible video game that he broadcasts live, or brings a sock puppet to yell at him like,” Why do you, bloody whites, insist on seeing every single political concept through the short-sighted lens of your own To see for yourself? -Update? “At some point he projects himself to give an extremely unconvincing anti-suicide lecture (“ Just not okay? ”) On his own t-shirt, as elegant a visualization of self = commodity as I’ve ever seen it :

It’s an odd position to work from, but despite Burnham’s relentless undercutting of his own work, Inside is not just an exercise in self-pity or narcissism. Instead, Burnham’s habit of judging himself by the same strict standards is giving him that he applies for the rest of the world, room to become bigger than he otherwise could. One of the most elaborate songs of the special is a criticism of the internet in its entirety that is much easier to take from someone who doesn’t claim Burnham insists that he is part of the problem, like all of us, and this is the only way to even reckon with the crappy civilization we are starting up ut have. Despite its many levels of jokes and meta-jokes, Inside is one of the most sincere artistic responses to the 21st century: a beautiful, intricate nautilus clamshell full of disgust.

Matthew Dessem is Brow Beats Nights and Weekends Editor and Author of One Biography of the screenwriter and director Clyde Bruckman.

“)), c = l (y [i.size_id] .split (” x “). Map (function (s) {return value (s)}), 2) , s.width = c [0], s .height = c [1]), s.rubiconTargeting = (Array.isArray (i.targeting)? i.targeting: []). redu (function (e, t) {return e [t.key] = t. Values ​​[0], e}, {rpfl_elemid: f.adUnitCode}), t.push (s)): r.logError (“Rubicon: bidRequest undefined at index position:”. concat (o), n, e), t}, []). sort (function (e, t) {return (t.cpm || 0) – (e.cpm || 0)})}, getUserSyncs: Function (e, t, n, r) {if (! D&&e.iframeEnabled) {var i = “”; return n&& “string” == typeof n.consentString&& (“boolean” == typeof n.gdprApplies? i = “? gdpr =” .gdprApplies), “&gdpr_consent =”). concat (n.consentString): i = “? gdpr_consent =”. concat (n.consentString)), r&& (i = “”. concat (i? “&”: “?”, “us_privacy =”) .concat (encodeURIComponent (r))), D =! 0, {type: “iframe”, url: “https: //” .concat (b.syncHost || “eus”, “ / usync.html”) i}}}, transformBidParams: function (e ) {return r.convertTypes ({accountId: “number”, siteId: “number”, zoneId: “number”}, e)}}; Function h (e, t) {var n = obgetConfig (“pageUrl”); n = e.params.referrer? e.params.referrer: n || t.refererInfo.referer; return^http:/i,”https:”):n Genealogie function _ (e, t) {var n = e.params; if (“video” === t) {var i = []; return i = [,]: Array.isray (r.deepAccess (e, “”)) &&1 === i = [0]: Array.isArray (e.sizes) &&0e.length) && (t = e.length); for (var n = 0, r = new array (t); n ‘; var i, o}}, h = function (e) {var t = 0 = e&&t.innerWidthe.length) && (t = e.length ); for (var n = 0, r = new array (t); ne.length) && (t = e.length); for (var n = 0), r = new array (t); n = e. length? {done :! 0}: {done:! 1, value: e [r]}}, e: function (e) {throw e}, f: i}} trigger new TypeError (“Invalid attempt to iterate non-iterable instance. NTo be iterable, non-array Objects have a [Symbol.iterator] () method. “)} Var o, a =! 0, s =! 1; return {s: function () {n = e [Symbol.iterator ()}, n: function () {var e = (); return a = e.done, e}, e: function (e) {s =! 0, o = e}, f: function () {try {a || null == n.return || n.return ()} finally {if (s) throw o}}}} (o); try {for (us ();! (a = un ()). done;) {var f = a.value; 01e3 *,! i || s || r || zero! = (d = n) &&d! == B (t)? o = e.submodule.getId (e.config, t, i): “function” == typeof e.submodule.extendId&& (o = e.submodule). extendId (e.config, t, i)), c.isPlainObject (o) && ( (U (e,, i =, “function” == typeof o.callback&& ( e.callback = o.callback)), i&& (e.idObj = e.submodule.decode (i, e.config))): e.config.value? e.idObj = e.config.value: (u = e.submodule.getId (e.config, t, void 0), c.isPlainObject (u) && (“function” == typeof u.callback&& ( ) lback = u.callback), (e.idObj = e.submodule.decode (, e.config)))}} Function Y () {var e, t, n, r = (e = D, t = j, Array.isArray (e)? E.reduce (function (e, n) {return! N || c.isEmptyStr ( || (! || c.isEmptyStr ( || c.isEmptyStr ( || -1 === t.indexOf ( &&! c.isPlainObject (n.value) && (n . Memory || n.value) || e.push (n), e}, []): []); r.length&& (n = k.filter (function (e) {return! i () (P, function (t) {return ===})}), P = (function (e) {var t = i () (r, function (t) {return = ==}); return e.findRootDomain = z, t? {Submodule: e, config: t, callback : void 0, idObj: void 0}: null}). filter (function (e) {return null! == e}),! x&&P.length&& (object (ua) (). requestBids.before (G, 40) , c.logInfo (“”. concat (S, “- usersync config updated for”) .concat (P.length, “submodules:”), (function (s) {return}) ), x =! 0))} Function $ (e) {i () (k, Function (t) {return === e.nam e}) || (k.push (e), Y ())} function X (e) {P = [], x =! (D = []), y = void 0, -1! == (j = [w.localStorageIsEnabled ()? O: null, w.cookiesAreEnabled ()? A: null] .filter (function (e) {return null! == e})). indexOf (A) &&w.getCookie (C.)? c.logInfo (“”. concat (S, “- Opt-out cookie found, exit module”)): – 1! == j.indexOf (O) &&w.getDataFromLocalStorage (C)? c.logInfo (“” .concat (S, “- Opt-Out localStorage found, exit module”)) 🙁 e.getConfig (function (s) {var t = e.userSync; t&&t.userIds&& (D = t. userIds, h = c .isNumber (t.syncDelay)? t.syncDelay: I, _ = c.isNumber (t.auctionDelay)? t.auctionDelay: E, Y ())}), Object (ua) (). getUserIds = V, Object (ua) (). getUserIdsAsEids = K, Object (ua) (). refreshUserIds = H)} X (ob), Object (pc) (“userId”, $)}}, [894]) , pbjs.processQueue ();
}, {}];
window.modules [“visibility.legacy”] = [function (required, module, export) {“use strict”; DS.service (“$ visibility”, [“$ document”, “$ window”, “_ throttle”, “Eventify”, function (e, t, n, i) {var o, r, h = []; Function s (e, t) {return et? E: t} Function d (e, t, n) {! E.preload&&e.preloadThreshhold&&function (e, t, n, i) {return = e.shownThreshold&&! e.seen?, new r (“shown”, t))}, 15)) :(! n || i1&& (h = e (r, Math.floor (n / o), i-1, o)) , h}, this.getVerticallyVisiblePixels = f, this.getViewportHeight = function () {return t.innerHeight || e.documentElement.clientHeight || e.body.clientHeight}, this.getViewportWidth = function () {return t.innerWidth || e.documentElement.clientWidth || e.body.clientWidth}, this.isElementNotHidden = u, this.isElementInViewport = function (n) {var i = n.getBoundingClientRect (); return> = 0&&i.left> = 0&CSE = o.length) return {done: true}; return {done: false, value: o [i]}; }, e: function e (_e) {throw _e; }, f: F}; } throw new TypeError (“Invalid attempt to iterate a non-iterable instance. nTo be iterable, non-array objects must have a [Symbol.iterator] () method.”); } var normalCompletion = true, didErr = false, err; return {s: function s () {it = o [symbol.iterator] (); }, n: function n () {var step = (); normalCompletion = step.done; Regression; }, e: function e (_e2) {didErr = true; err = _e2; }, f: function f () {try {if (! normalCompletion && it.return! = null) it.return (); } finally {if (didErr) throw err; }}}; }}

Function _unsupportedIterableToArray (o, minLen) {if (! O) return; if (typeof o === “string”) return _arrayLikeToArray (o, minLen); var n = (o) .slice (8, -1); if (n === “Object” && o.constructor) n =; if (n === “Map” || n === “Set”) returns Array.from (o); if (n === “Arguments” || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray (o, minLen); }}

Function _arrayLikeToArray (arr, len) {if (len == null || len> arr.length) len = arr.length; for (var i = 0, arr2 = new array (len); i