Pomiędzy dwoma królestwami wciąż toczy się wojna. Władcy jednego z nich rodzi się trzecia córka, której matka, królowa, umiera wkrótce po porodzie. Dziewczynka, o imieniu Fantaghiro, wyrasta na energiczną i krnąbrną pannę. Stary król przekazuje władzę nad wojskiem generałowi do czasu, kiedy jego córki wyjdą za mąż. Tymczasem umiera władca wrogiego królestwa i władzę obejmuje jego syn, Romualdo. Fantaghiro, ćwicząc w lesie strzelanie z łuku, przypadkiem go poznaje. Królewicz bierze ją za nimfę leśną i zakochuje się w niej.
Podczas polowania książę Romualdo (Kim Rossi Stuart) poznaje Fantaghiro. Niestety, jego zaloty nie przynoszą rezultatu. Ukrywająca się odtąd w męskim stroju księżniczka doprowadza do pojedynku z zakochanym księciem. Ślepy los ma zdecydować o przyszłości.
Opowieść zaczyna się w bajkowym świecie, w którym toczy się wojna pomiędzy dwoma królestwami: królestwem starego króla (Mario Adorf) - ojca Fantaghiró i sąsiednim królestwem, rządzonym przez księcia Romualda. Pewnego razu książę Romualdo przypadkiem spotyka Fantaghiró w lesie i zakochuje się w niej. Fantaghiró ucieka mu jednak. Ponieważ książę Romualdo widział tylko jej oczy, próbuje odnaleźć kobietę o tych oczach. Zaprasza wszystkie wysoko urodzone panny ze swojego królestwa, lecz żadna nie jest Fantaghiró. Kiedy zmęczony wojną Romualdo postanawia stanąć do pojedynku z najlepszym rycerzem starego króla, ten - za radą swoich wróżbitów - wysyła do walki swoją córkę Fantaghiró, gdyż stara przepowiednia głosi, że tylko jego potomek położy kres wojnie (stary król ma tylko córki). Fantaghiró nie może jednak zdradzić, że jest kobietą. Obcina więc włosy i ubiera się jak mężczyzna. Romualdo rozpoznaje jednak jej oczy...