Spaces:
Running on Zero
Running on Zero
| import gradio as gr | |
| import spaces | |
| def _warmup(): | |
| # Placeholder so the Space is recognized as a ZeroGPU task. | |
| # This portfolio page is display-only and does not really use the GPU. | |
| return "ok" | |
| A = "assets/" | |
| # Each work is an ordered list of blocks rendered top-to-bottom. | |
| # Block types: ("md", text) | ("img", [paths]) | ("video", path) | |
| GRIS = [ | |
| ("md", | |
| "# Gris\n" | |
| "**Role:** Sound design Β· Sound synthesis Β· Composition Β· Music editing \n" | |
| "**Software:** Ableton Live, Pro Tools"), | |
| ("video", "gris.mp4"), | |
| ("md", | |
| "### Game & chapter overview\n" | |
| "*Gris* is a platform-adventure game. It follows a girl named Gris who wakes before a " | |
| "crumbling statue of a woman. She tries to sing but soon chokes up; the statue's hand " | |
| "falls apart, dropping her to the colorless land below. After landing, she keeps moving " | |
| "forward, meeting strange structures that seem to be powered by mysterious, star-like " | |
| "points of light. She can collect these lights to gain new abilities β such as turning " | |
| "into stone, or creating new constellation-like paths."), | |
| ("md", "### Opening cinematic β style design"), | |
| ("img", [A + "gris_1.png"]), | |
| ("md", | |
| "The opening cinematic uses a synth-piano timbre from Live. This timbre gives a sense of " | |
| "memory, drawing the listener into the world that follows. Compositionally it uses " | |
| "continuous, slightly irregular rhythms with a highly repetitive melody β light and " | |
| "dreamlike, tinged with a touch of melancholy."), | |
| ("md", | |
| "### Chapter 2 β Anger\n" | |
| "The second chapter, *Anger*, is one of the emotional climaxes of the story. Tempered by " | |
| "repeated sandstorms, the girl gradually grows stronger and bravely faces the challenges " | |
| "ahead."), | |
| ("img", [A + "gris_2.png", A + "gris_3.png"]), | |
| ("md", | |
| "**Visual style analysis:** The visuals are dreamy and beautiful, with fairly soft " | |
| "colors. Chapter 2's main tone is red, adding an atmosphere of struggle and tension. Most " | |
| "of the time the camera sits far from the scene. The most striking shift comes as the " | |
| "sandstorm arrives: red smoke-clouds engulf the whole scene and visibility drops rapidly."), | |
| ("md", | |
| "**Sound style design:** The overall design holds to a *\"simple but not simplistic\"* " | |
| "style β it must neither break the quiet, harmonious atmosphere nor lack detail and feel " | |
| "crude. This remake carries more contrast than the original. In everyday traversal the " | |
| "style is gentler and more dreamlike, while at moments of growth β the sandstorm, or " | |
| "obtaining the \"box\" ability β it becomes more deeply affecting.\n\n" | |
| "**(1) Footsteps:** Must suit different materials. Loudness fairly low, mid and high " | |
| "frequencies attenuated, reverb and delay added as appropriate to match the open, distant " | |
| "visuals. Indoor and outdoor handling differ β indoor footsteps slightly more prominent.\n\n" | |
| "**(2) Ambience:** Subtle point sources woven in, such as the fine friction of sand or " | |
| "tiny rock/metal drops (depending on the environment). In the temple, low frequencies are " | |
| "moderately boosted, and point sources shift accordingly β for example bell sounds that " | |
| "move continuously with the player's position.\n\n" | |
| "**(3) Effects:** Mainly synthesis-based. Because effect sounds are often tied to " | |
| "\"achievement,\" they need a clear sense of positive feedback, with chorus added to " | |
| "create a feeling of holiness.\n\n" | |
| "**\\* Sandstorm:** A clear \"negative-feedback\" effect, mainly synthesis-based, richly " | |
| "layered β randomly synthesized notes (mimicking the texture of sand) and extremely " | |
| "low-frequency wind. A whisper element is inserted, like the low murmur of a demon.\n\n" | |
| "*Keywords: brave, vast, contrast, quiet, dreamlike, beautiful, sacred.*"), | |
| ("md", | |
| "### Depression (Chapter 4)\n" | |
| "*Depression* is the fourth chapter of *Gris*. Its theme color is blue, symbolizing the " | |
| "saddest stage. In the first half the player collects stars; after gathering six, they " | |
| "place them into a shell β which is actually a sea turtle, now revived. The turtle dives " | |
| "into the dim abyss, and the light it emits becomes a guide for the player to follow. The " | |
| "player then falls into the plight of being chased by an eel; after the chase they quickly " | |
| "ascend and swim away, and are finally rescued by the turtle, swimming toward a new area β " | |
| "a storyline that pushes the emotion to its climax."), | |
| ("img", [A + "gris_4.png"]), | |
| ("md", | |
| "**Visual style analysis:** The overall palette is dark, and brightness varies markedly " | |
| "with water depth. Faint light sources dot the scene, like starlight. When rescued by the " | |
| "turtle, the palette turns dreamlike, and the scene shifts to an open area full of glowing " | |
| "jellyfish."), | |
| ("md", | |
| "**Sound style design:** This section draws on ambient-music composition, using " | |
| "synthesizers to build multiple atmospheric layers. As the visual colors shift between " | |
| "light and dark, the number of layers rises or falls, giving a distinctly varied " | |
| "experience. The darker the scene, the more low frequency, and the more pronounced the " | |
| "dissonant, conflicting, ominous atmosphere; effects and timbres lean unreal and surreal.\n\n" | |
| "The lighting's sound design is gentler, like twinkling starlight, forming a clear " | |
| "contrast with the background. The turtle's appearance is where emotion erupts β but not " | |
| "too violently; instead the sound's mass gently expands, giving a feeling of \"sudden " | |
| "clarity.\" Jellyfish and bubbles have a wide sound field with delay processing, and " | |
| "major-key chords with an orchestral-like timbre add drama and grandeur.\n\n" | |
| "For the eel, the focus is the \"bite\" β the very source of conflict in the story. The " | |
| "eel is moderate in size but still threatening, sitting in a vast body of water, so its " | |
| "sound is given large reverb with appropriately boosted low frequencies."), | |
| ] | |
| VALLEY = [ | |
| ("md", | |
| "# The Valley of Ancient\n" | |
| "**Role:** Sound design Β· Sound synthesis Β· Wwise engineering Β· Part of the UE5 audio " | |
| "hookup \n" | |
| "**Software:** Reaper, Ableton Live, Unreal Engine 5, Wwise"), | |
| ("video", "thevalleyofancient-002.mp4"), | |
| ("md", "## 1. Style design\n\n**Visual style:**"), | |
| ("img", [A + "valley_1.png", A + "valley_2.png"]), | |
| ("md", | |
| "The visuals split into two parts: before entering the portal, an ordinary valley scene; " | |
| "after entering, a dark \"Dark World\" scene. The visuals are grounded in an ancient " | |
| "valley with an epic, grand style, but most elements are real β only the Boss is entirely " | |
| "fictional. The player's ultimate mission is to overthrow the Boss, which is enormous, " | |
| "with red light glowing from its head and an explosive effect."), | |
| ("md", | |
| "**Sound style design:** The style should be realistic overall, adding non-realistic " | |
| "elements only when the story reaches specific states. Narratively, the sound should " | |
| "convey danger, drawing the player to immerse in this perilous environment; and since the " | |
| "setting is \"ancient,\" it should evoke a fairly primal atmosphere. The Boss is large " | |
| "with a hard body, so combat sound needs a clear sense of impact, forming a sharp " | |
| "contrast with the player. At the key moments of the Boss's appearance and defeat, " | |
| "synthesis-based ambient sounds are added to stir emotion and underscore the Boss's " | |
| "identity.\n\n" | |
| "*Time & place:* an ancient valley, fairly dry and lifeless. \n" | |
| "*Emotion:* shrouded in crisis β fear alongside a firm resolve to complete the mission. \n" | |
| "*Off-screen & living elements:* creatures suited to an \"ancient valley\" scene.\n\n" | |
| "**Sound interaction design:** When the Boss uses its fire-breathing skill, the position " | |
| "of the fire sound shifts accordingly as the player runs."), | |
| ("md", | |
| "## 2. Sound presentation & specifications\n\n" | |
| "**Sound field:** The target platform is a home-PC playback system, so only a stereo " | |
| "field is considered.\n\n" | |
| "**Ambience:**\n" | |
| "- *Background (BG):* fairly wide; reserves the two sides and the center of the field for " | |
| "3D sounds, limiting width and controlling Center.\n" | |
| "- *Ordinary 3D point sources:* appear in the mid/back ground, avoiding the center and " | |
| "both ends.\n" | |
| "- *Special 3D point sources:* appear at both ends of the field, with a certain height " | |
| "setting.\n\n" | |
| "**Skill & motion sounds:** mostly at the center of the field; some special effects (such " | |
| "as the fire-breath) change with the player's position.\n\n" | |
| "**Frequency response:**\n" | |
| "- *Ambience:* to preserve the impact of key skills, low-cut below 63Hz. The Dark World " | |
| "background sits around 125Hz; the ordinary environment around 200Hz. Point sources are " | |
| "more flexible, mainly mid-high above 500Hz, some reaching 3β5kHz.\n" | |
| "- *Footsteps:* characteristic band around 500Hz.\n" | |
| "- *Skill sounds:* wide bandwidth, emphasizing roughly 50β300Hz to strengthen impact.\n\n" | |
| "**Dynamic mixing:** In the two key animations β the Boss's entrance and defeat β " | |
| "sidechain compression is applied. As the scene switches to the dark world, the bands of " | |
| "wind and creature sounds descend to a degree."), | |
| ("img", [A + "valley_3.jpg", A + "valley_4.jpg", A + "valley_5.png"]), | |
| ] | |
| def render(blocks): | |
| for kind, payload in blocks: | |
| if kind == "md": | |
| gr.Markdown(payload) | |
| elif kind == "video": | |
| gr.Video(payload, show_label=False) | |
| elif kind == "img": | |
| if len(payload) == 1: | |
| gr.Image(payload[0], show_label=False) | |
| else: | |
| gr.Gallery(payload, show_label=False, columns=len(payload), | |
| height="auto", object_fit="contain") | |
| with gr.Blocks(title="Sound Design Portfolio") as demo: | |
| gr.Markdown("# π§ Sound Design Portfolio\nTwo game sound-design projects β full design " | |
| "documents with the original visuals.") | |
| with gr.Tabs(): | |
| with gr.Tab("Gris"): | |
| render(GRIS) | |
| with gr.Tab("The Valley of Ancient"): | |
| render(VALLEY) | |
| if __name__ == "__main__": | |
| demo.launch(theme=gr.themes.Soft()) | |