We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
`--save_last_frame` appears twice in options
## Description of bug / unexpected behavior
<!-- Add a clear and concise description of the problem you encountered. -->

When using `manim render --help`, you can see `--save_last_frame` appearing twice, once marked as deprecated:

```
  -s, --save_last_frame
...
  -s, --save_last_frame          Save last frame as png (Deprecated).
```

This is also visible i n [reference manual](https://docs.manim.community/en/stable/guides/configuration.html#:~:text=webm%7Cmov%5D%0A%20%20%2Ds%2C%20%2D%2D-,save_last_frame,-%2Dq%2C%20%2D%2Dquality%20%5Bl).

## Expected behavior
<!-- Add a clear and concise description of what you expected to happen. -->

The option appears exactly once

## How to reproduce the issue
<!-- Provide a piece of code illustrating the undesired behavior. -->

<details><summary>Code for reproducing the problem</summary>

```bash
> manim render --help | grep 'save_last_frame'
```

</details>


## Additional media files
<!-- Paste in the files manim produced on rendering the code above. -->

<details><summary>Images/GIFs</summary>

<!-- PASTE MEDIA HERE -->

</details>


## Logs
<details><summary>Terminal output</summary>
<!-- Add "-v DEBUG" when calling manim to generate more detailed logs -->

```
PASTE HERE OR PROVIDE LINK TO https://pastebin.com/ OR SIMILAR
```

<!-- Insert screenshots here (only when absolutely necessary, we prefer copy/pasted output!) -->

</details>


## System specifications

<details><summary>System Details</summary>

- OS (with version, e.g., Windows 10 v2004 or macOS 10.15 (Catalina)):
- RAM:
- Python version (`python/py/python3 --version`):
- Installed modules (provide output from `pip list`):
```
PASTE HERE
```
</details>

<details><summary>LaTeX details</summary>

+ LaTeX distribution (e.g. TeX Live 2020):
+ Installed LaTeX packages:
<!-- output of `tlmgr list --only-installed` for TeX Live or a screenshot of the Packages page for MikTeX -->
</details>

<details><summary>FFMPEG</summary>

Output of `ffmpeg -version`:

```
PASTE HERE
```
</details>

## Additional comments
<!-- Add further context that you think might be relevant for this issue here. -->

This is probably a code cleanup issue, as you can clearly see the option being declared twice in [`render_options.py`](https://github.com/ManimCommunity/manim/blob/main/manim/cli/render/render_options.py):

```py
# line 61
    option("-s", "--save_last_frame", is_flag=True, default=None),
# line 125:131
    option(
        "-s",
        "--save_last_frame",
        default=None,
        is_flag=True,
        help="Save last frame as png (Deprecated).",
    ),
```

I can create a PR to remove one of them, just need info which one should be removed - the first one without help, or the second one marking it deprecated (easiest to just remove the "deprecated" keyword as it's formated nicely, and get rid of the first one).

Should I also report it as a bug in [cloup](https://github.com/janLuke/cloup) that it doesn't check for duplicates?

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `manim/cli/render/render_options.py`
Content:
```
1 from __future__ import annotations
2 
3 import re
4 
5 from cloup import Choice, option, option_group
6 
7 from manim.constants import QUALITIES, RendererType
8 
9 from ... import logger
10 
11 
12 def validate_scene_range(ctx, param, value):
13     try:
14         start = int(value)
15         return (start,)
16     except Exception:
17         pass
18 
19     if value:
20         try:
21             start, end = map(int, re.split(r"[;,\-]", value))
22             return start, end
23         except Exception:
24             logger.error("Couldn't determine a range for -n option.")
25             exit()
26 
27 
28 def validate_resolution(ctx, param, value):
29     if value:
30         try:
31             start, end = map(int, re.split(r"[;,\-]", value))
32             return (start, end)
33         except Exception:
34             logger.error("Resolution option is invalid.")
35             exit()
36 
37 
38 render_options = option_group(
39     "Render Options",
40     option(
41         "-n",
42         "--from_animation_number",
43         callback=validate_scene_range,
44         help="Start rendering from n_0 until n_1. If n_1 is left unspecified, "
45         "renders all scenes after n_0.",
46         default=None,
47     ),
48     option(
49         "-a",
50         "--write_all",
51         is_flag=True,
52         help="Render all scenes in the input file.",
53         default=None,
54     ),
55     option(
56         "--format",
57         type=Choice(["png", "gif", "mp4", "webm", "mov"], case_sensitive=False),
58         default=None,
59     ),
60     option("-s", "--save_last_frame", is_flag=True, default=None),
61     option(
62         "-q",
63         "--quality",
64         default=None,
65         type=Choice(
66             list(reversed([q["flag"] for q in QUALITIES.values() if q["flag"]])),  # type: ignore
67             case_sensitive=False,
68         ),
69         help="Render quality at the follow resolution framerates, respectively: "
70         + ", ".join(
71             reversed(
72                 [
73                     f'{q["pixel_width"]}x{q["pixel_height"]} {q["frame_rate"]}FPS'
74                     for q in QUALITIES.values()
75                     if q["flag"]
76                 ]
77             )
78         ),
79     ),
80     option(
81         "-r",
82         "--resolution",
83         callback=validate_resolution,
84         default=None,
85         help='Resolution in "W,H" for when 16:9 aspect ratio isn\'t possible.',
86     ),
87     option(
88         "--fps",
89         "--frame_rate",
90         "frame_rate",
91         type=float,
92         default=None,
93         help="Render at this frame rate.",
94     ),
95     option(
96         "--renderer",
97         type=Choice(
98             [renderer_type.value for renderer_type in RendererType],
99             case_sensitive=False,
100         ),
101         help="Select a renderer for your Scene.",
102         default="cairo",
103     ),
104     option(
105         "-g",
106         "--save_pngs",
107         is_flag=True,
108         default=None,
109         help="Save each frame as png (Deprecated).",
110     ),
111     option(
112         "-i",
113         "--save_as_gif",
114         default=None,
115         is_flag=True,
116         help="Save as a gif (Deprecated).",
117     ),
118     option(
119         "--save_sections",
120         default=None,
121         is_flag=True,
122         help="Save section videos in addition to movie file.",
123     ),
124     option(
125         "-s",
126         "--save_last_frame",
127         default=None,
128         is_flag=True,
129         help="Save last frame as png (Deprecated).",
130     ),
131     option(
132         "-t",
133         "--transparent",
134         is_flag=True,
135         help="Render scenes with alpha channel.",
136     ),
137     option(
138         "--use_projection_fill_shaders",
139         is_flag=True,
140         help="Use shaders for OpenGLVMobject fill which are compatible with transformation matrices.",
141         default=None,
142     ),
143     option(
144         "--use_projection_stroke_shaders",
145         is_flag=True,
146         help="Use shaders for OpenGLVMobject stroke which are compatible with transformation matrices.",
147         default=None,
148     ),
149 )
150
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/manim/cli/render/render_options.py b/manim/cli/render/render_options.py
--- a/manim/cli/render/render_options.py
+++ b/manim/cli/render/render_options.py
@@ -57,7 +57,13 @@
         type=Choice(["png", "gif", "mp4", "webm", "mov"], case_sensitive=False),
         default=None,
     ),
-    option("-s", "--save_last_frame", is_flag=True, default=None),
+    option(
+        "-s",
+        "--save_last_frame",
+        default=None,
+        is_flag=True,
+        help="Render and save only the last frame of a scene as a PNG image.",
+    ),
     option(
         "-q",
         "--quality",
@@ -121,13 +127,6 @@
         is_flag=True,
         help="Save section videos in addition to movie file.",
     ),
-    option(
-        "-s",
-        "--save_last_frame",
-        default=None,
-        is_flag=True,
-        help="Save last frame as png (Deprecated).",
-    ),
     option(
         "-t",
         "--transparent",

{"golden_diff": "diff --git a/manim/cli/render/render_options.py b/manim/cli/render/render_options.py\n--- a/manim/cli/render/render_options.py\n+++ b/manim/cli/render/render_options.py\n@@ -57,7 +57,13 @@\n         type=Choice([\"png\", \"gif\", \"mp4\", \"webm\", \"mov\"], case_sensitive=False),\n         default=None,\n     ),\n-    option(\"-s\", \"--save_last_frame\", is_flag=True, default=None),\n+    option(\n+        \"-s\",\n+        \"--save_last_frame\",\n+        default=None,\n+        is_flag=True,\n+        help=\"Render and save only the last frame of a scene as a PNG image.\",\n+    ),\n     option(\n         \"-q\",\n         \"--quality\",\n@@ -121,13 +127,6 @@\n         is_flag=True,\n         help=\"Save section videos in addition to movie file.\",\n     ),\n-    option(\n-        \"-s\",\n-        \"--save_last_frame\",\n-        default=None,\n-        is_flag=True,\n-        help=\"Save last frame as png (Deprecated).\",\n-    ),\n     option(\n         \"-t\",\n         \"--transparent\",\n", "issue": "`--save_last_frame` appears twice in options\n## Description of bug / unexpected behavior\r\n<!-- Add a clear and concise description of the problem you encountered. -->\r\n\r\nWhen using `manim render --help`, you can see `--save_last_frame` appearing twice, once marked as deprecated:\r\n\r\n```\r\n  -s, --save_last_frame\r\n...\r\n  -s, --save_last_frame          Save last frame as png (Deprecated).\r\n```\r\n\r\nThis is also visible i n [reference manual](https://docs.manim.community/en/stable/guides/configuration.html#:~:text=webm%7Cmov%5D%0A%20%20%2Ds%2C%20%2D%2D-,save_last_frame,-%2Dq%2C%20%2D%2Dquality%20%5Bl).\r\n\r\n## Expected behavior\r\n<!-- Add a clear and concise description of what you expected to happen. -->\r\n\r\nThe option appears exactly once\r\n\r\n## How to reproduce the issue\r\n<!-- Provide a piece of code illustrating the undesired behavior. -->\r\n\r\n<details><summary>Code for reproducing the problem</summary>\r\n\r\n```bash\r\n> manim render --help | grep 'save_last_frame'\r\n```\r\n\r\n</details>\r\n\r\n\r\n## Additional media files\r\n<!-- Paste in the files manim produced on rendering the code above. -->\r\n\r\n<details><summary>Images/GIFs</summary>\r\n\r\n<!-- PASTE MEDIA HERE -->\r\n\r\n</details>\r\n\r\n\r\n## Logs\r\n<details><summary>Terminal output</summary>\r\n<!-- Add \"-v DEBUG\" when calling manim to generate more detailed logs -->\r\n\r\n```\r\nPASTE HERE OR PROVIDE LINK TO https://pastebin.com/ OR SIMILAR\r\n```\r\n\r\n<!-- Insert screenshots here (only when absolutely necessary, we prefer copy/pasted output!) -->\r\n\r\n</details>\r\n\r\n\r\n## System specifications\r\n\r\n<details><summary>System Details</summary>\r\n\r\n- OS (with version, e.g., Windows 10 v2004 or macOS 10.15 (Catalina)):\r\n- RAM:\r\n- Python version (`python/py/python3 --version`):\r\n- Installed modules (provide output from `pip list`):\r\n```\r\nPASTE HERE\r\n```\r\n</details>\r\n\r\n<details><summary>LaTeX details</summary>\r\n\r\n+ LaTeX distribution (e.g. TeX Live 2020):\r\n+ Installed LaTeX packages:\r\n<!-- output of `tlmgr list --only-installed` for TeX Live or a screenshot of the Packages page for MikTeX -->\r\n</details>\r\n\r\n<details><summary>FFMPEG</summary>\r\n\r\nOutput of `ffmpeg -version`:\r\n\r\n```\r\nPASTE HERE\r\n```\r\n</details>\r\n\r\n## Additional comments\r\n<!-- Add further context that you think might be relevant for this issue here. -->\r\n\r\nThis is probably a code cleanup issue, as you can clearly see the option being declared twice in [`render_options.py`](https://github.com/ManimCommunity/manim/blob/main/manim/cli/render/render_options.py):\r\n\r\n```py\r\n# line 61\r\n    option(\"-s\", \"--save_last_frame\", is_flag=True, default=None),\r\n# line 125:131\r\n    option(\r\n        \"-s\",\r\n        \"--save_last_frame\",\r\n        default=None,\r\n        is_flag=True,\r\n        help=\"Save last frame as png (Deprecated).\",\r\n    ),\r\n```\r\n\r\nI can create a PR to remove one of them, just need info which one should be removed - the first one without help, or the second one marking it deprecated (easiest to just remove the \"deprecated\" keyword as it's formated nicely, and get rid of the first one).\r\n\r\nShould I also report it as a bug in [cloup](https://github.com/janLuke/cloup) that it doesn't check for duplicates?\n", "before_files": [{"content": "from __future__ import annotations\n\nimport re\n\nfrom cloup import Choice, option, option_group\n\nfrom manim.constants import QUALITIES, RendererType\n\nfrom ... import logger\n\n\ndef validate_scene_range(ctx, param, value):\n    try:\n        start = int(value)\n        return (start,)\n    except Exception:\n        pass\n\n    if value:\n        try:\n            start, end = map(int, re.split(r\"[;,\\-]\", value))\n            return start, end\n        except Exception:\n            logger.error(\"Couldn't determine a range for -n option.\")\n            exit()\n\n\ndef validate_resolution(ctx, param, value):\n    if value:\n        try:\n            start, end = map(int, re.split(r\"[;,\\-]\", value))\n            return (start, end)\n        except Exception:\n            logger.error(\"Resolution option is invalid.\")\n            exit()\n\n\nrender_options = option_group(\n    \"Render Options\",\n    option(\n        \"-n\",\n        \"--from_animation_number\",\n        callback=validate_scene_range,\n        help=\"Start rendering from n_0 until n_1. If n_1 is left unspecified, \"\n        \"renders all scenes after n_0.\",\n        default=None,\n    ),\n    option(\n        \"-a\",\n        \"--write_all\",\n        is_flag=True,\n        help=\"Render all scenes in the input file.\",\n        default=None,\n    ),\n    option(\n        \"--format\",\n        type=Choice([\"png\", \"gif\", \"mp4\", \"webm\", \"mov\"], case_sensitive=False),\n        default=None,\n    ),\n    option(\"-s\", \"--save_last_frame\", is_flag=True, default=None),\n    option(\n        \"-q\",\n        \"--quality\",\n        default=None,\n        type=Choice(\n            list(reversed([q[\"flag\"] for q in QUALITIES.values() if q[\"flag\"]])),  # type: ignore\n            case_sensitive=False,\n        ),\n        help=\"Render quality at the follow resolution framerates, respectively: \"\n        + \", \".join(\n            reversed(\n                [\n                    f'{q[\"pixel_width\"]}x{q[\"pixel_height\"]} {q[\"frame_rate\"]}FPS'\n                    for q in QUALITIES.values()\n                    if q[\"flag\"]\n                ]\n            )\n        ),\n    ),\n    option(\n        \"-r\",\n        \"--resolution\",\n        callback=validate_resolution,\n        default=None,\n        help='Resolution in \"W,H\" for when 16:9 aspect ratio isn\\'t possible.',\n    ),\n    option(\n        \"--fps\",\n        \"--frame_rate\",\n        \"frame_rate\",\n        type=float,\n        default=None,\n        help=\"Render at this frame rate.\",\n    ),\n    option(\n        \"--renderer\",\n        type=Choice(\n            [renderer_type.value for renderer_type in RendererType],\n            case_sensitive=False,\n        ),\n        help=\"Select a renderer for your Scene.\",\n        default=\"cairo\",\n    ),\n    option(\n        \"-g\",\n        \"--save_pngs\",\n        is_flag=True,\n        default=None,\n        help=\"Save each frame as png (Deprecated).\",\n    ),\n    option(\n        \"-i\",\n        \"--save_as_gif\",\n        default=None,\n        is_flag=True,\n        help=\"Save as a gif (Deprecated).\",\n    ),\n    option(\n        \"--save_sections\",\n        default=None,\n        is_flag=True,\n        help=\"Save section videos in addition to movie file.\",\n    ),\n    option(\n        \"-s\",\n        \"--save_last_frame\",\n        default=None,\n        is_flag=True,\n        help=\"Save last frame as png (Deprecated).\",\n    ),\n    option(\n        \"-t\",\n        \"--transparent\",\n        is_flag=True,\n        help=\"Render scenes with alpha channel.\",\n    ),\n    option(\n        \"--use_projection_fill_shaders\",\n        is_flag=True,\n        help=\"Use shaders for OpenGLVMobject fill which are compatible with transformation matrices.\",\n        default=None,\n    ),\n    option(\n        \"--use_projection_stroke_shaders\",\n        is_flag=True,\n        help=\"Use shaders for OpenGLVMobject stroke which are compatible with transformation matrices.\",\n        default=None,\n    ),\n)\n", "path": "manim/cli/render/render_options.py"}], "after_files": [{"content": "from __future__ import annotations\n\nimport re\n\nfrom cloup import Choice, option, option_group\n\nfrom manim.constants import QUALITIES, RendererType\n\nfrom ... import logger\n\n\ndef validate_scene_range(ctx, param, value):\n    try:\n        start = int(value)\n        return (start,)\n    except Exception:\n        pass\n\n    if value:\n        try:\n            start, end = map(int, re.split(r\"[;,\\-]\", value))\n            return start, end\n        except Exception:\n            logger.error(\"Couldn't determine a range for -n option.\")\n            exit()\n\n\ndef validate_resolution(ctx, param, value):\n    if value:\n        try:\n            start, end = map(int, re.split(r\"[;,\\-]\", value))\n            return (start, end)\n        except Exception:\n            logger.error(\"Resolution option is invalid.\")\n            exit()\n\n\nrender_options = option_group(\n    \"Render Options\",\n    option(\n        \"-n\",\n        \"--from_animation_number\",\n        callback=validate_scene_range,\n        help=\"Start rendering from n_0 until n_1. If n_1 is left unspecified, \"\n        \"renders all scenes after n_0.\",\n        default=None,\n    ),\n    option(\n        \"-a\",\n        \"--write_all\",\n        is_flag=True,\n        help=\"Render all scenes in the input file.\",\n        default=None,\n    ),\n    option(\n        \"--format\",\n        type=Choice([\"png\", \"gif\", \"mp4\", \"webm\", \"mov\"], case_sensitive=False),\n        default=None,\n    ),\n    option(\n        \"-s\",\n        \"--save_last_frame\",\n        default=None,\n        is_flag=True,\n        help=\"Render and save only the last frame of a scene as a PNG image.\",\n    ),\n    option(\n        \"-q\",\n        \"--quality\",\n        default=None,\n        type=Choice(\n            list(reversed([q[\"flag\"] for q in QUALITIES.values() if q[\"flag\"]])),  # type: ignore\n            case_sensitive=False,\n        ),\n        help=\"Render quality at the follow resolution framerates, respectively: \"\n        + \", \".join(\n            reversed(\n                [\n                    f'{q[\"pixel_width\"]}x{q[\"pixel_height\"]} {q[\"frame_rate\"]}FPS'\n                    for q in QUALITIES.values()\n                    if q[\"flag\"]\n                ]\n            )\n        ),\n    ),\n    option(\n        \"-r\",\n        \"--resolution\",\n        callback=validate_resolution,\n        default=None,\n        help='Resolution in \"W,H\" for when 16:9 aspect ratio isn\\'t possible.',\n    ),\n    option(\n        \"--fps\",\n        \"--frame_rate\",\n        \"frame_rate\",\n        type=float,\n        default=None,\n        help=\"Render at this frame rate.\",\n    ),\n    option(\n        \"--renderer\",\n        type=Choice(\n            [renderer_type.value for renderer_type in RendererType],\n            case_sensitive=False,\n        ),\n        help=\"Select a renderer for your Scene.\",\n        default=\"cairo\",\n    ),\n    option(\n        \"-g\",\n        \"--save_pngs\",\n        is_flag=True,\n        default=None,\n        help=\"Save each frame as png (Deprecated).\",\n    ),\n    option(\n        \"-i\",\n        \"--save_as_gif\",\n        default=None,\n        is_flag=True,\n        help=\"Save as a gif (Deprecated).\",\n    ),\n    option(\n        \"--save_sections\",\n        default=None,\n        is_flag=True,\n        help=\"Save section videos in addition to movie file.\",\n    ),\n    option(\n        \"-t\",\n        \"--transparent\",\n        is_flag=True,\n        help=\"Render scenes with alpha channel.\",\n    ),\n    option(\n        \"--use_projection_fill_shaders\",\n        is_flag=True,\n        help=\"Use shaders for OpenGLVMobject fill which are compatible with transformation matrices.\",\n        default=None,\n    ),\n    option(\n        \"--use_projection_stroke_shaders\",\n        is_flag=True,\n        help=\"Use shaders for OpenGLVMobject stroke which are compatible with transformation matrices.\",\n        default=None,\n    ),\n)\n", "path": "manim/cli/render/render_options.py"}]}