{"id":146898,"date":"2024-05-09T13:19:55","date_gmt":"2024-05-09T13:19:55","guid":{"rendered":"https:\/\/randomnerdtutorials.com\/?p=146898"},"modified":"2024-05-09T13:32:55","modified_gmt":"2024-05-09T13:32:55","slug":"raspberry-pi-mjpeg-streaming-web-server-picamera2","status":"publish","type":"post","link":"https:\/\/randomnerdtutorials.com\/raspberry-pi-mjpeg-streaming-web-server-picamera2\/","title":{"rendered":"Raspberry Pi: MJPEG Streaming Web Server (Picamera2)"},"content":{"rendered":"\n<p>In this guide, you&#8217;ll learn how to set up a video streaming web server with a Raspberry Pi and a camera using a simple script with the <span class=\"rnthl rntliteral\">Picamera2<\/span> library. You&#8217;ll be able to access the streaming web server on any web browser in your local network.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" fetchpriority=\"high\" decoding=\"async\" width=\"1200\" height=\"675\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/Raspberry-Pi-Picamera2-Streaming-Video.jpg?resize=1200%2C675&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Raspberry Pi MJPEG Streaming Web Server Picamera2\" class=\"wp-image-146808\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/Raspberry-Pi-Picamera2-Streaming-Video.jpg?w=1280&amp;quality=100&amp;strip=all&amp;ssl=1 1280w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/Raspberry-Pi-Picamera2-Streaming-Video.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/Raspberry-Pi-Picamera2-Streaming-Video.jpg?resize=1024%2C576&amp;quality=100&amp;strip=all&amp;ssl=1 1024w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/Raspberry-Pi-Picamera2-Streaming-Video.jpg?resize=768%2C432&amp;quality=100&amp;strip=all&amp;ssl=1 768w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<p>Before proceeding, make sure you check the following prerequisites: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You need a <a href=\"https:\/\/makeradvisor.com\/best-raspberry-pi-starter-kits\/\" target=\"_blank\" rel=\"noopener\" title=\"\">Raspberry Pi board<\/a> and a <a href=\"https:\/\/makeradvisor.com\/tools\/raspberry-pi-camera-v2-module\/\" target=\"_blank\" rel=\"noopener\" title=\"\">Raspberry Pi camera<\/a>.<\/li>\n\n\n\n<li>You should have a <a href=\"https:\/\/randomnerdtutorials.com\/installing-raspbian-lite-enabling-and-connecting-with-ssh\/#install-raspberry-pi-os\">Raspberry Pi running Raspberry Pi OS<\/a> (32-bit or 64-bit).<\/li>\n\n\n\n<li>You should be able to<a href=\"https:\/\/randomnerdtutorials.com\/installing-raspbian-lite-enabling-and-connecting-with-ssh\/#connect-RPi-SSH\"> establish an SSH connection with your Raspberry Pi<\/a>.<\/li>\n\n\n\n<li><a href=\"https:\/\/randomnerdtutorials.com\/raspberry-pi-mjpeg-streaming-web-server-picamera2\/\" title=\"\">Set Up Python Picamera2 on a Raspberry Pi<\/a>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"picamera2-python-library\">Picamera2 Python Library<\/h2>\n\n\n\n<p><a href=\"https:\/\/github.com\/raspberrypi\/picamera2\" target=\"_blank\" rel=\"noopener\" title=\"\">Picamera2<\/a> is a Python library for interacting with the Raspberry Pi&#8217;s camera. It is based on the <em>libcamera <\/em>camera stack and it is maintained by the Raspberry Pi foundation. It&#8217;s no longer recommended to use the older <span class=\"rnthl rntliteral\">PiCamera<\/span> library with the latest Raspberry Pi OS versions. <\/p>\n\n\n\n<p>The <span class=\"rnthl rntliteral\">Picamera2<\/span> library is supported on all Raspberry Pi models from the Pi Zero to the RPi 5.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"pip-virtual-environment\">Installing Picamera2 Library<\/h3>\n\n\n\n<p>Having an&nbsp;<a href=\"https:\/\/randomnerdtutorials.com\/installing-raspbian-lite-enabling-and-connecting-with-ssh\/#connect-RPi-SSH\">SSH connection established with your Raspberry Pi<\/a>, update and upgrade your Raspberry Pi, if any updates are available. Run the following command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update &amp;&amp; sudo apt upgrade -y<\/code><\/pre>\n\n\n\n<p>Run the next command to install the <span class=\"rnthl rntliteral\">Picamera2<\/span> library in your Raspberry Pi.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y python3-picamera2<\/code><\/pre>\n\n\n\n<p class=\"rntbox rntcred\">It is strongly recommended to install and update <span class=\"rnthl rntliteral\">Picamera2<\/span> using the <span class=\"rnthl rntliteral\">apt<\/span> command described earlier which will avoid compatibility problems. I&#8217;ve encountered many compilation issues while trying to install the <span class=\"rnthl rntliteral\">Picamera2<\/span> library with the <span class=\"rnthl rntliteral\">pip<\/span> command on a virtual environment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"connect-raspberry-pi-camera\">Preparing the Raspberry Pi Camera<\/h2>\n\n\n\n<p>The Raspberry Pi camera is a small and low-cost camera module compatible with the Raspberry Pi boards. Even though it can be good enough for most projects, <a href=\"https:\/\/randomnerdtutorials.com\/set-up-usb-camera-opencv-raspberry-pi\/\" title=\"\">some USB cameras will provide better image quality<\/a>. For this guide, we&#8217;ll be using the Raspberry Pi Camera V2 module shown in the following picture:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"750\" height=\"421\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/Raspberry-Pi-Camera-Module-v2.jpg?resize=750%2C421&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Raspberry Pi Camera Module V2\" class=\"wp-image-146800\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/Raspberry-Pi-Camera-Module-v2.jpg?w=750&amp;quality=100&amp;strip=all&amp;ssl=1 750w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/Raspberry-Pi-Camera-Module-v2.jpg?resize=300%2C168&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n<p>This guide also works with the Raspberry Pi Camera V3 and the camera is compatible with all Raspberry Pi models.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Enable the Raspberry Pi Camera Module<\/h3>\n\n\n\n<p>If you are running the latest version of Raspberry Pi OS, the official Raspberry Pi cameras will be detected and enabled automatically.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Connect the camera<\/h3>\n\n\n\n<p>Connecting the Raspberry Pi Camera Module is very straightforward. With the Pi shutdown, connect the camera to the Pi CSI port as shown in the following figure.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"750\" height=\"422\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/Raspberry-Pi-5-Pi-Camera-Module-v2-connected-cable.jpg?resize=750%2C422&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Raspberry Pi 5 Pi Camera Module v2 connected cable\" class=\"wp-image-146802\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/Raspberry-Pi-5-Pi-Camera-Module-v2-connected-cable.jpg?w=750&amp;quality=100&amp;strip=all&amp;ssl=1 750w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/Raspberry-Pi-5-Pi-Camera-Module-v2-connected-cable.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"take-photo-picamera2\">MJPEG Streaming Web Server &#8211; Python Script<\/h2>\n\n\n\n<p>Running a streaming web server is fairly easy with the Raspberry Pi camera thanks to the <span class=\"rnthl rntliteral\">Picamera2<\/span> Python library. <\/p>\n\n\n\n<p>Create a new file called <em>stream_server.py<\/em> by running the following command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano stream_server.py<\/code><\/pre>\n\n\n\n<p>Copy the following code to your newly created file:<\/p>\n\n\n<pre style=\"max-height: 40em; margin-bottom: 20px;\"><code class=\"language-python\"># Rui Santos &amp; Sara Santos - Random Nerd Tutorials\r\n# Complete project details at https:\/\/RandomNerdTutorials.com\/raspberry-pi-mjpeg-streaming-web-server-picamera2\/\r\n\r\n# Mostly copied from https:\/\/picamera.readthedocs.io\/en\/release-1.13\/recipes2.html\r\n# Run this script, then point a web browser at http:&lt;this-ip-address&gt;:7123\r\n# Note: needs simplejpeg to be installed (pip3 install simplejpeg).\r\n\r\nimport io\r\nimport logging\r\nimport socketserver\r\nfrom http import server\r\nfrom threading import Condition\r\n\r\nfrom picamera2 import Picamera2\r\nfrom picamera2.encoders import JpegEncoder\r\nfrom picamera2.outputs import FileOutput\r\n\r\nPAGE = &quot;&quot;&quot;\\\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;title&gt;picamera2 MJPEG streaming demo&lt;\/title&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n&lt;h1&gt;Picamera2 MJPEG Streaming Demo&lt;\/h1&gt;\r\n&lt;img src=&quot;stream.mjpg&quot; width=&quot;640&quot; height=&quot;480&quot; \/&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n&quot;&quot;&quot;\r\n\r\nclass StreamingOutput(io.BufferedIOBase):\r\n    def __init__(self):\r\n        self.frame = None\r\n        self.condition = Condition()\r\n\r\n    def write(self, buf):\r\n        with self.condition:\r\n            self.frame = buf\r\n            self.condition.notify_all()\r\n\r\n\r\nclass StreamingHandler(server.BaseHTTPRequestHandler):\r\n    def do_GET(self):\r\n        if self.path == '\/':\r\n            self.send_response(301)\r\n            self.send_header('Location', '\/index.html')\r\n            self.end_headers()\r\n        elif self.path == '\/index.html':\r\n            content = PAGE.encode('utf-8')\r\n            self.send_response(200)\r\n            self.send_header('Content-Type', 'text\/html')\r\n            self.send_header('Content-Length', len(content))\r\n            self.end_headers()\r\n            self.wfile.write(content)\r\n        elif self.path == '\/stream.mjpg':\r\n            self.send_response(200)\r\n            self.send_header('Age', 0)\r\n            self.send_header('Cache-Control', 'no-cache, private')\r\n            self.send_header('Pragma', 'no-cache')\r\n            self.send_header('Content-Type', 'multipart\/x-mixed-replace; boundary=FRAME')\r\n            self.end_headers()\r\n            try:\r\n                while True:\r\n                    with output.condition:\r\n                        output.condition.wait()\r\n                        frame = output.frame\r\n                    self.wfile.write(b'--FRAME\\r\\n')\r\n                    self.send_header('Content-Type', 'image\/jpeg')\r\n                    self.send_header('Content-Length', len(frame))\r\n                    self.end_headers()\r\n                    self.wfile.write(frame)\r\n                    self.wfile.write(b'\\r\\n')\r\n            except Exception as e:\r\n                logging.warning(\r\n                    'Removed streaming client %s: %s',\r\n                    self.client_address, str(e))\r\n        else:\r\n            self.send_error(404)\r\n            self.end_headers()\r\n\r\n\r\nclass StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer):\r\n    allow_reuse_address = True\r\n    daemon_threads = True\r\n\r\n\r\npicam2 = Picamera2()\r\npicam2.configure(picam2.create_video_configuration(main={&quot;size&quot;: (640, 480)}))\r\noutput = StreamingOutput()\r\npicam2.start_recording(JpegEncoder(), FileOutput(output))\r\n\r\ntry:\r\n    address = ('', 7123)\r\n    server = StreamingServer(address, StreamingHandler)\r\n    server.serve_forever()\r\nfinally:\r\n    picam2.stop_recording()<\/code><\/pre>\n\t<p style=\"text-align:center\"><a class=\"rntwhite\" href=\"https:\/\/github.com\/RuiSantosdotme\/Random-Nerd-Tutorials\/raw\/master\/Projects\/Raspberry-Pi\/stream_server.py\" target=\"_blank\">View raw code<\/a><\/p>\n\n\n\n<p>Press <strong>Ctrl<\/strong>+<strong>X<\/strong> to save your file, type <strong>Y<\/strong> and <strong>Enter<\/strong>.<\/p>\n\n\n\n<p>You can customize the web page by changing the HTML and adding some CSS on the <span class=\"rnthl rntliteral\">PAGE<\/span> variable. The <em>stream.mjpg<\/em> refers to the streaming files (the actual video).<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>PAGE = \"\"\"\\\n&lt;html&gt;\n&lt;head&gt;\n&lt;title&gt;picamera2 MJPEG streaming demo&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n&lt;h1&gt;Picamera2 MJPEG Streaming Demo&lt;\/h1&gt;\n&lt;img src=\"stream.mjpg\" width=\"640\" height=\"480\" \/&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n\"\"\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Running the Script<\/h3>\n\n\n\n<p>Run the following command to get the Raspberry Pi IP address. You&#8217;ll need the IP address to access your web server.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>hostname -I<\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"477\" height=\"98\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/raspberry-pi-ip-address.png?resize=477%2C98&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Raspberry Pi IP Address\" class=\"wp-image-146654\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/raspberry-pi-ip-address.png?w=477&amp;quality=100&amp;strip=all&amp;ssl=1 477w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/raspberry-pi-ip-address.png?resize=300%2C62&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 477px) 100vw, 477px\" \/><\/figure><\/div>\n\n\n<p>Then, start your web server by running the following command on your project directory:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python stream_server.py<\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"933\" height=\"322\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/stream-server-picamera2-run-python-command.png?resize=933%2C322&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"stream server picamera2 run Python command\" class=\"wp-image-146904\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/stream-server-picamera2-run-python-command.png?w=933&amp;quality=100&amp;strip=all&amp;ssl=1 933w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/stream-server-picamera2-run-python-command.png?resize=300%2C104&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/stream-server-picamera2-run-python-command.png?resize=768%2C265&amp;quality=100&amp;strip=all&amp;ssl=1 768w\" sizes=\"(max-width: 933px) 100vw, 933px\" \/><\/figure><\/div>\n\n\n<p>Finally, open any web browser on your local network and type the Raspberry Pi IP address followed by the port number<strong> :7123<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>http:&#47;&#47;raspberry-pi-ip-address:7123<\/code><\/pre>\n\n\n\n<p>That&#8217;s it! Your Raspberry Pi web server is streaming the MJPEG files.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"847\" height=\"738\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/streaming-video-mjpeg-server-picamera2-python-example-script.png?resize=847%2C738&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Streaming video MJPEG server Picamera2 Python example script\" class=\"wp-image-146799\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/streaming-video-mjpeg-server-picamera2-python-example-script.png?w=847&amp;quality=100&amp;strip=all&amp;ssl=1 847w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/streaming-video-mjpeg-server-picamera2-python-example-script.png?resize=300%2C261&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/streaming-video-mjpeg-server-picamera2-python-example-script.png?resize=768%2C669&amp;quality=100&amp;strip=all&amp;ssl=1 768w\" sizes=\"(max-width: 847px) 100vw, 847px\" \/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\">Wrapping Up<\/h2>\n\n\n\n<p>In this quick guide, you learn how to set up an IP camera using the Raspberry Pi and the Raspberry Pi camera. This can be useful to monitor something on your network in real-time. One of the most used applications is to take an eye on 3D printers, but this can also be used for a wide range of applications like smart doorbells or security cameras.<\/p>\n\n\n\n<p>We hope you\u2019ve found this tutorial useful. You may also want to check other camera-related tutorials.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/randomnerdtutorials.com\/install-opencv-raspberry-pi\/\">Install OpenCV on a Raspberry Pi (compatible with all RPi boards)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/randomnerdtutorials.com\/set-up-usb-camera-opencv-raspberry-pi\/\">Set Up USB Camera for OpenCV Projects with Raspberry Pi<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/randomnerdtutorials.com\/install-mediapipe-raspberry-pi\/\">Install MediaPipe on a Raspberry Pi \u2013 Example Gesture Recognition<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/randomnerdtutorials.com\/raspberry-pi-picamera2-python\/\">Set Up Python Picamera2 on a Raspberry Pi (Take Photos and Capture Video)<\/a><\/li>\n<\/ul>\n\n\n\n<p>Finally, you can check all our Raspberry Pi projects on the following link:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/randomnerdtutorials.com\/projects-raspberry-pi\/\" title=\"\">Free Raspberry Pi Tutorials and Guides<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In this guide, you&#8217;ll learn how to set up a video streaming web server with a Raspberry Pi and a camera using a simple script with the Picamera2 library. You&#8217;ll &#8230; <\/p>\n<p class=\"read-more-container\"><a title=\"Raspberry Pi: MJPEG Streaming Web Server (Picamera2)\" class=\"read-more button\" href=\"https:\/\/randomnerdtutorials.com\/raspberry-pi-mjpeg-streaming-web-server-picamera2\/#more-146898\" aria-label=\"Read more about Raspberry Pi: MJPEG Streaming Web Server (Picamera2)\">CONTINUE READING \u00bb<\/a><\/p>\n","protected":false},"author":1,"featured_media":146808,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[301,264,190,268],"tags":[],"class_list":["post-146898","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-0-raspberrypi","category-project","category-raspberry-pi","category-raspberry-pi-project"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/01\/Raspberry-Pi-Picamera2-Streaming-Video.jpg?fit=1280%2C720&quality=100&strip=all&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts\/146898","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/comments?post=146898"}],"version-history":[{"count":12,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts\/146898\/revisions"}],"predecessor-version":[{"id":155136,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts\/146898\/revisions\/155136"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/media\/146808"}],"wp:attachment":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/media?parent=146898"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/categories?post=146898"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/tags?post=146898"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}